summaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorRoman Yeryomin <roman@advem.lv>2013-09-13 18:59:29 +0300
committerRoman Yeryomin <roman@advem.lv>2013-09-13 18:59:29 +0300
commit3035e0e2186752945b28a69da78d5330d93a6ff8 (patch)
tree3c6544513f7fcdcb01739a0fe7d5c493234ff4e6 /target
parent16eb65bbd37690ce8aba9fda390ac59b5abcb0a0 (diff)
Remove uwifi as there is no binary anyway and clean kernel Makefile
Signed-off-by: Roman Yeryomin <roman@advem.lv>
Diffstat (limited to 'target')
-rw-r--r--target/linux/realtek/files/drivers/staging/rtk_uWiFi/Kconfig14
-rw-r--r--target/linux/realtek/files/drivers/staging/rtk_uWiFi/Makefile4
-rw-r--r--target/linux/realtek/files/include/linux/device_uWiFi.h643
-rw-r--r--target/linux/realtek/files/include/linux/pm_runtime_uWiFi.h136
-rw-r--r--target/linux/realtek/files/include/linux/pm_uWiFi.h502
-rw-r--r--target/linux/realtek/files/include/linux/usb_uWiFi.h1568
-rw-r--r--target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch18
-rw-r--r--target/linux/realtek/patches-2.6.30/9993-Makefile-vmlinux-path.patch14
-rw-r--r--target/linux/realtek/patches-2.6.30/9993-linux-Makefile-from-rsdk-3.2.4.patch324
9 files changed, 14 insertions, 3209 deletions
diff --git a/target/linux/realtek/files/drivers/staging/rtk_uWiFi/Kconfig b/target/linux/realtek/files/drivers/staging/rtk_uWiFi/Kconfig
deleted file mode 100644
index 8771716b7..000000000
--- a/target/linux/realtek/files/drivers/staging/rtk_uWiFi/Kconfig
+++ /dev/null
@@ -1,14 +0,0 @@
-config USB_UWIFI_HOST
- tristate "RTK USB uWiFi host driver"
- default N
- ---help---
- This enables the RTK uWiFi device driver which will run on the
- host machine.
-
-
-
-config RTL_USB_UWIFI_HOST_SPEEDUP
- bool
- depends on USB_UWIFI_HOST
- default y if USB_UWIFI_HOST
-
diff --git a/target/linux/realtek/files/drivers/staging/rtk_uWiFi/Makefile b/target/linux/realtek/files/drivers/staging/rtk_uWiFi/Makefile
deleted file mode 100644
index fcf02e1bc..000000000
--- a/target/linux/realtek/files/drivers/staging/rtk_uWiFi/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-
-obj-$(CONFIG_USB_UWIFI_HOST) += uWiFi.o
-
-
diff --git a/target/linux/realtek/files/include/linux/device_uWiFi.h b/target/linux/realtek/files/include/linux/device_uWiFi.h
deleted file mode 100644
index aa178fd22..000000000
--- a/target/linux/realtek/files/include/linux/device_uWiFi.h
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- * device.h - generic, centralized driver model
- *
- * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
- * Copyright (c) 2004-2007 Greg Kroah-Hartman <gregkh@suse.de>
- *
- * This file is released under the GPLv2
- *
- * See Documentation/driver-model/ for more information.
- */
-
-#ifndef _DEVICE_H_
-#define _DEVICE_H_
-
-#include <linux/ioport.h>
-#include <linux/kobject.h>
-#include <linux/klist.h>
-#include <linux/list.h>
-#include <linux/lockdep.h>
-#include <linux/compiler.h>
-#include <linux/types.h>
-#include <linux/module.h>
-#include <linux/pm.h>
-#include <linux/semaphore.h>
-#include <asm/atomic.h>
-#include <asm/device.h>
-
-#define BUS_ID_SIZE 20
-
-struct device;
-struct device_private;
-struct device_driver;
-struct driver_private;
-struct class;
-struct class_private;
-struct bus_type;
-struct bus_type_private;
-
-struct bus_attribute {
- struct attribute attr;
- ssize_t (*show)(struct bus_type *bus, char *buf);
- ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);
-};
-
-#define BUS_ATTR(_name, _mode, _show, _store) \
-struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
-
-extern int __must_check bus_create_file(struct bus_type *,
- struct bus_attribute *);
-extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
-
-struct bus_type {
- const char *name;
- struct bus_attribute *bus_attrs;
- struct device_attribute *dev_attrs;
- struct driver_attribute *drv_attrs;
-
- int (*match)(struct device *dev, struct device_driver *drv);
- int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
- int (*probe)(struct device *dev);
- int (*remove)(struct device *dev);
- void (*shutdown)(struct device *dev);
-
- int (*suspend)(struct device *dev, pm_message_t state);
- int (*suspend_late)(struct device *dev, pm_message_t state);
- int (*resume_early)(struct device *dev);
- int (*resume)(struct device *dev);
-
- struct dev_pm_ops *pm;
-
- struct bus_type_private *p;
-};
-
-extern int __must_check bus_register(struct bus_type *bus);
-extern void bus_unregister(struct bus_type *bus);
-
-extern int __must_check bus_rescan_devices(struct bus_type *bus);
-
-/* iterator helpers for buses */
-
-int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
- int (*fn)(struct device *dev, void *data));
-struct device *bus_find_device(struct bus_type *bus, struct device *start,
- void *data,
- int (*match)(struct device *dev, void *data));
-struct device *bus_find_device_by_name(struct bus_type *bus,
- struct device *start,
- const char *name);
-
-int __must_check bus_for_each_drv(struct bus_type *bus,
- struct device_driver *start, void *data,
- int (*fn)(struct device_driver *, void *));
-
-void bus_sort_breadthfirst(struct bus_type *bus,
- int (*compare)(const struct device *a,
- const struct device *b));
-/*
- * Bus notifiers: Get notified of addition/removal of devices
- * and binding/unbinding of drivers to devices.
- * In the long run, it should be a replacement for the platform
- * notify hooks.
- */
-struct notifier_block;
-
-extern int bus_register_notifier(struct bus_type *bus,
- struct notifier_block *nb);
-extern int bus_unregister_notifier(struct bus_type *bus,
- struct notifier_block *nb);
-
-/* All 4 notifers below get called with the target struct device *
- * as an argument. Note that those functions are likely to be called
- * with the device semaphore held in the core, so be careful.
- */
-#define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */
-#define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */
-#define BUS_NOTIFY_BOUND_DRIVER 0x00000003 /* driver bound to device */
-#define BUS_NOTIFY_UNBIND_DRIVER 0x00000004 /* driver about to be
- unbound */
-
-extern struct kset *bus_get_kset(struct bus_type *bus);
-extern struct klist *bus_get_device_klist(struct bus_type *bus);
-
-struct device_driver {
- const char *name;
- struct bus_type *bus;
-
- struct module *owner;
- const char *mod_name; /* used for built-in modules */
-
- int (*probe) (struct device *dev);
- int (*remove) (struct device *dev);
- void (*shutdown) (struct device *dev);
- int (*suspend) (struct device *dev, pm_message_t state);
- int (*resume) (struct device *dev);
- struct attribute_group **groups;
-
- struct dev_pm_ops *pm;
-
- struct driver_private *p;
-};
-
-
-extern int __must_check driver_register(struct device_driver *drv);
-extern void driver_unregister(struct device_driver *drv);
-
-extern struct device_driver *get_driver(struct device_driver *drv);
-extern void put_driver(struct device_driver *drv);
-extern struct device_driver *driver_find(const char *name,
- struct bus_type *bus);
-extern int driver_probe_done(void);
-extern void wait_for_device_probe(void);
-
-
-/* sysfs interface for exporting driver attributes */
-
-struct driver_attribute {
- struct attribute attr;
- ssize_t (*show)(struct device_driver *driver, char *buf);
- ssize_t (*store)(struct device_driver *driver, const char *buf,
- size_t count);
-};
-
-#define DRIVER_ATTR(_name, _mode, _show, _store) \
-struct driver_attribute driver_attr_##_name = \
- __ATTR(_name, _mode, _show, _store)
-
-extern int __must_check driver_create_file(struct device_driver *driver,
- struct driver_attribute *attr);
-extern void driver_remove_file(struct device_driver *driver,
- struct driver_attribute *attr);
-
-extern int __must_check driver_add_kobj(struct device_driver *drv,
- struct kobject *kobj,
- const char *fmt, ...);
-
-extern int __must_check driver_for_each_device(struct device_driver *drv,
- struct device *start,
- void *data,
- int (*fn)(struct device *dev,
- void *));
-struct device *driver_find_device(struct device_driver *drv,
- struct device *start, void *data,
- int (*match)(struct device *dev, void *data));
-
-/*
- * device classes
- */
-struct class {
- const char *name;
- struct module *owner;
-
- struct class_attribute *class_attrs;
- struct device_attribute *dev_attrs;
- struct kobject *dev_kobj;
-
- int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
-
- void (*class_release)(struct class *class);
- void (*dev_release)(struct device *dev);
-
- int (*suspend)(struct device *dev, pm_message_t state);
- int (*resume)(struct device *dev);
-
- struct dev_pm_ops *pm;
- struct class_private *p;
-};
-
-struct class_dev_iter {
- struct klist_iter ki;
- const struct device_type *type;
-};
-
-extern struct kobject *sysfs_dev_block_kobj;
-extern struct kobject *sysfs_dev_char_kobj;
-extern int __must_check __class_register(struct class *class,
- struct lock_class_key *key);
-extern void class_unregister(struct class *class);
-
-/* This is a #define to keep the compiler from merging different
- * instances of the __key variable */
-#define class_register(class) \
-({ \
- static struct lock_class_key __key; \
- __class_register(class, &__key); \
-})
-
-extern void class_dev_iter_init(struct class_dev_iter *iter,
- struct class *class,
- struct device *start,
- const struct device_type *type);
-extern struct device *class_dev_iter_next(struct class_dev_iter *iter);
-extern void class_dev_iter_exit(struct class_dev_iter *iter);
-
-extern int class_for_each_device(struct class *class, struct device *start,
- void *data,
- int (*fn)(struct device *dev, void *data));
-extern struct device *class_find_device(struct class *class,
- struct device *start, void *data,
- int (*match)(struct device *, void *));
-
-struct class_attribute {
- struct attribute attr;
- ssize_t (*show)(struct class *class, char *buf);
- ssize_t (*store)(struct class *class, const char *buf, size_t count);
-};
-
-#define CLASS_ATTR(_name, _mode, _show, _store) \
-struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
-
-extern int __must_check class_create_file(struct class *class,
- const struct class_attribute *attr);
-extern void class_remove_file(struct class *class,
- const struct class_attribute *attr);
-
-struct class_interface {
- struct list_head node;
- struct class *class;
-
- int (*add_dev) (struct device *, struct class_interface *);
- void (*remove_dev) (struct device *, struct class_interface *);
-};
-
-extern int __must_check class_interface_register(struct class_interface *);
-extern void class_interface_unregister(struct class_interface *);
-
-extern struct class * __must_check __class_create(struct module *owner,
- const char *name,
- struct lock_class_key *key);
-extern void class_destroy(struct class *cls);
-
-/* This is a #define to keep the compiler from merging different
- * instances of the __key variable */
-#define class_create(owner, name) \
-({ \
- static struct lock_class_key __key; \
- __class_create(owner, name, &__key); \
-})
-
-/*
- * The type of device, "struct device" is embedded in. A class
- * or bus can contain devices of different types
- * like "partitions" and "disks", "mouse" and "event".
- * This identifies the device type and carries type-specific
- * information, equivalent to the kobj_type of a kobject.
- * If "name" is specified, the uevent will contain it in
- * the DEVTYPE variable.
- */
-struct device_type {
- const char *name;
- struct attribute_group **groups;
- int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
- void (*release)(struct device *dev);
-
- int (*suspend)(struct device *dev, pm_message_t state);
- int (*resume)(struct device *dev);
-
- struct dev_pm_ops *pm;
-};
-
-/* interface for exporting device attributes */
-struct device_attribute {
- struct attribute attr;
- ssize_t (*show)(struct device *dev, struct device_attribute *attr,
- char *buf);
- ssize_t (*store)(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count);
-};
-
-#define DEVICE_ATTR(_name, _mode, _show, _store) \
-struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
-
-extern int __must_check device_create_file(struct device *device,
- struct device_attribute *entry);
-extern void device_remove_file(struct device *dev,
- struct device_attribute *attr);
-extern int __must_check device_create_bin_file(struct device *dev,
- struct bin_attribute *attr);
-extern void device_remove_bin_file(struct device *dev,
- struct bin_attribute *attr);
-extern int device_schedule_callback_owner(struct device *dev,
- void (*func)(struct device *dev), struct module *owner);
-
-/* This is a macro to avoid include problems with THIS_MODULE */
-#define device_schedule_callback(dev, func) \
- device_schedule_callback_owner(dev, func, THIS_MODULE)
-
-/* device resource management */
-typedef void (*dr_release_t)(struct device *dev, void *res);
-typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
-
-#ifdef CONFIG_DEBUG_DEVRES
-extern void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
- const char *name);
-#define devres_alloc(release, size, gfp) \
- __devres_alloc(release, size, gfp, #release)
-#else
-extern void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
-#endif
-extern void devres_free(void *res);
-extern void devres_add(struct device *dev, void *res);
-extern void *devres_find(struct device *dev, dr_release_t release,
- dr_match_t match, void *match_data);
-extern void *devres_get(struct device *dev, void *new_res,
- dr_match_t match, void *match_data);
-extern void *devres_remove(struct device *dev, dr_release_t release,
- dr_match_t match, void *match_data);
-extern int devres_destroy(struct device *dev, dr_release_t release,
- dr_match_t match, void *match_data);
-
-/* devres group */
-extern void * __must_check devres_open_group(struct device *dev, void *id,
- gfp_t gfp);
-extern void devres_close_group(struct device *dev, void *id);
-extern void devres_remove_group(struct device *dev, void *id);
-extern int devres_release_group(struct device *dev, void *id);
-
-/* managed kzalloc/kfree for device drivers, no kmalloc, always use kzalloc */
-extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
-extern void devm_kfree(struct device *dev, void *p);
-
-struct device_dma_parameters {
- /*
- * a low level driver may set these to teach IOMMU code about
- * sg limitations.
- */
- unsigned int max_segment_size;
- unsigned long segment_boundary_mask;
-};
-
-struct device {
- struct device *parent;
-
- struct device_private *p;
-
- struct kobject kobj;
- const char *init_name; /* initial name of the device */
- struct device_type *type;
-
- struct semaphore sem; /* semaphore to synchronize calls to
- * its driver.
- */
-
- struct bus_type *bus; /* type of bus device is on */
- struct device_driver *driver; /* which driver has allocated this
- device */
- void *driver_data; /* data private to the driver */
- void *platform_data; /* Platform specific data, device
- core doesn't touch it */
- struct dev_pm_info power;
-
-#ifdef CONFIG_NUMA
- int numa_node; /* NUMA node this device is close to */
-#endif
- u64 *dma_mask; /* dma mask (if dma'able device) */
- u64 coherent_dma_mask;/* Like dma_mask, but for
- alloc_coherent mappings as
- not all hardware supports
- 64 bit addresses for consistent
- allocations such descriptors. */
-
- struct device_dma_parameters *dma_parms;
-
- struct list_head dma_pools; /* dma pools (if dma'ble) */
-
- struct dma_coherent_mem *dma_mem; /* internal for coherent mem
- override */
- /* arch specific additions */
- struct dev_archdata archdata;
-
- dev_t devt; /* dev_t, creates the sysfs "dev" */
-
- spinlock_t devres_lock;
- struct list_head devres_head;
-
- struct klist_node knode_class;
- struct class *class;
- struct attribute_group **groups; /* optional groups */
-
- void (*release)(struct device *dev);
-};
-
-/* Get the wakeup routines, which depend on struct device */
-#include <linux/pm_wakeup.h>
-
-static inline const char *dev_name(const struct device *dev)
-{
- return kobject_name(&dev->kobj);
-}
-
-extern int dev_set_name(struct device *dev, const char *name, ...)
- __attribute__((format(printf, 2, 3)));
-
-#ifdef CONFIG_NUMA
-static inline int dev_to_node(struct device *dev)
-{
- return dev->numa_node;
-}
-static inline void set_dev_node(struct device *dev, int node)
-{
- dev->numa_node = node;
-}
-#else
-static inline int dev_to_node(struct device *dev)
-{
- return -1;
-}
-static inline void set_dev_node(struct device *dev, int node)
-{
-}
-#endif
-
-static inline void *dev_get_drvdata(const struct device *dev)
-{
- return dev->driver_data;
-}
-
-static inline void dev_set_drvdata(struct device *dev, void *data)
-{
- dev->driver_data = data;
-}
-
-static inline unsigned int dev_get_uevent_suppress(const struct device *dev)
-{
- return dev->kobj.uevent_suppress;
-}
-
-static inline void dev_set_uevent_suppress(struct device *dev, int val)
-{
- dev->kobj.uevent_suppress = val;
-}
-
-static inline int device_is_registered(struct device *dev)
-{
- return dev->kobj.state_in_sysfs;
-}
-
-static inline void device_enable_async_suspend(struct device *dev)
-{
- if (dev->power.status == DPM_ON)
- dev->power.async_suspend = true;
-}
-
-static inline void device_disable_async_suspend(struct device *dev)
-{
- if (dev->power.status == DPM_ON)
- dev->power.async_suspend = false;
-}
-
-static inline bool device_async_suspend_enabled(struct device *dev)
-{
- return !!dev->power.async_suspend;
-}
-
-static inline void device_lock(struct device *dev)
-{
- down(&dev->sem);
-}
-
-static inline int device_trylock(struct device *dev)
-{
- return down_trylock(&dev->sem);
-}
-
-static inline void device_unlock(struct device *dev)
-{
- up(&dev->sem);
-}
-
-void driver_init(void);
-
-/*
- * High level routines for use by the bus drivers
- */
-extern int __must_check device_register(struct device *dev);
-extern void device_unregister(struct device *dev);
-extern void device_initialize(struct device *dev);
-extern int __must_check device_add(struct device *dev);
-extern void device_del(struct device *dev);
-extern int device_for_each_child(struct device *dev, void *data,
- int (*fn)(struct device *dev, void *data));
-extern struct device *device_find_child(struct device *dev, void *data,
- int (*match)(struct device *dev, void *data));
-extern int device_rename(struct device *dev, char *new_name);
-extern int device_move(struct device *dev, struct device *new_parent,
- enum dpm_order dpm_order);
-
-/*
- * Root device objects for grouping under /sys/devices
- */
-extern struct device *__root_device_register(const char *name,
- struct module *owner);
-static inline struct device *root_device_register(const char *name)
-{
- return __root_device_register(name, THIS_MODULE);
-}
-extern void root_device_unregister(struct device *root);
-
-/*
- * Manual binding of a device to driver. See drivers/base/bus.c
- * for information on use.
- */
-extern int __must_check device_bind_driver(struct device *dev);
-extern void device_release_driver(struct device *dev);
-extern int __must_check device_attach(struct device *dev);
-extern int __must_check driver_attach(struct device_driver *drv);
-extern int __must_check device_reprobe(struct device *dev);
-
-/*
- * Easy functions for dynamically creating devices on the fly
- */
-extern struct device *device_create_vargs(struct class *cls,
- struct device *parent,
- dev_t devt,
- void *drvdata,
- const char *fmt,
- va_list vargs);
-extern struct device *device_create(struct class *cls, struct device *parent,
- dev_t devt, void *drvdata,
- const char *fmt, ...)
- __attribute__((format(printf, 5, 6)));
-extern void device_destroy(struct class *cls, dev_t devt);
-
-/*
- * Platform "fixup" functions - allow the platform to have their say
- * about devices and actions that the general device layer doesn't
- * know about.
- */
-/* Notify platform of device discovery */
-extern int (*platform_notify)(struct device *dev);
-
-extern int (*platform_notify_remove)(struct device *dev);
-
-
-/**
- * get_device - atomically increment the reference count for the device.
- *
- */
-extern struct device *get_device(struct device *dev);
-extern void put_device(struct device *dev);
-
-extern void wait_for_device_probe(void);
-
-/* drivers/base/power/shutdown.c */
-extern void device_shutdown(void);
-
-/* drivers/base/sys.c */
-extern void sysdev_shutdown(void);
-
-/* debugging and troubleshooting/diagnostic helpers. */
-extern const char *dev_driver_string(const struct device *dev);
-#define dev_printk(level, dev, format, arg...) \
- printk(level "%s %s: " format , dev_driver_string(dev) , \
- dev_name(dev) , ## arg)
-
-#define dev_emerg(dev, format, arg...) \
- dev_printk(KERN_EMERG , dev , format , ## arg)
-#define dev_alert(dev, format, arg...) \
- dev_printk(KERN_ALERT , dev , format , ## arg)
-#define dev_crit(dev, format, arg...) \
- dev_printk(KERN_CRIT , dev , format , ## arg)
-#define dev_err(dev, format, arg...) \
- dev_printk(KERN_ERR , dev , format , ## arg)
-#define dev_warn(dev, format, arg...) \
- dev_printk(KERN_WARNING , dev , format , ## arg)
-#define dev_notice(dev, format, arg...) \
- dev_printk(KERN_NOTICE , dev , format , ## arg)
-#define dev_info(dev, format, arg...) \
- dev_printk(KERN_INFO , dev , format , ## arg)
-
-#if defined(DEBUG)
-#define dev_dbg(dev, format, arg...) \
- dev_printk(KERN_DEBUG , dev , format , ## arg)
-#elif defined(CONFIG_DYNAMIC_DEBUG)
-#define dev_dbg(dev, format, ...) do { \
- dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
- } while (0)
-#else
-#define dev_dbg(dev, format, arg...) \
- ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
-#endif
-
-#ifdef VERBOSE_DEBUG
-#define dev_vdbg dev_dbg
-#else
-
-#define dev_vdbg(dev, format, arg...) \
- ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
-#endif
-
-/*
- * dev_WARN() acts like dev_printk(), but with the key difference
- * of using a WARN/WARN_ON to get the message out, including the
- * file/line information and a backtrace.
- */
-#define dev_WARN(dev, format, arg...) \
- WARN(1, "Device: %s\n" format, dev_driver_string(dev), ## arg);
-
-/* Create alias, so I can be autoloaded. */
-#define MODULE_ALIAS_CHARDEV(major,minor) \
- MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
-#define MODULE_ALIAS_CHARDEV_MAJOR(major) \
- MODULE_ALIAS("char-major-" __stringify(major) "-*")
-#endif /* _DEVICE_H_ */
diff --git a/target/linux/realtek/files/include/linux/pm_runtime_uWiFi.h b/target/linux/realtek/files/include/linux/pm_runtime_uWiFi.h
deleted file mode 100644
index b776db737..000000000
--- a/target/linux/realtek/files/include/linux/pm_runtime_uWiFi.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * pm_runtime.h - Device run-time power management helper functions.
- *
- * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl>
- *
- * This file is released under the GPLv2.
- */
-
-#ifndef _LINUX_PM_RUNTIME_H
-#define _LINUX_PM_RUNTIME_H
-
-#include <linux/device.h>
-#include <linux/pm.h>
-
-#ifdef CONFIG_PM_RUNTIME
-
-extern struct workqueue_struct *pm_wq;
-
-extern int pm_runtime_idle(struct device *dev);
-extern int pm_runtime_suspend(struct device *dev);
-extern int pm_runtime_resume(struct device *dev);
-extern int pm_request_idle(struct device *dev);
-extern int pm_schedule_suspend(struct device *dev, unsigned int delay);
-extern int pm_request_resume(struct device *dev);
-extern int __pm_runtime_get(struct device *dev, bool sync);
-extern int __pm_runtime_put(struct device *dev, bool sync);
-extern int __pm_runtime_set_status(struct device *dev, unsigned int status);
-extern int pm_runtime_barrier(struct device *dev);
-extern void pm_runtime_enable(struct device *dev);
-extern void __pm_runtime_disable(struct device *dev, bool check_resume);
-extern void pm_runtime_allow(struct device *dev);
-extern void pm_runtime_forbid(struct device *dev);
-
-static inline bool pm_children_suspended(struct device *dev)
-{
- return dev->power.ignore_children
- || !atomic_read(&dev->power.child_count);
-}
-
-static inline void pm_suspend_ignore_children(struct device *dev, bool enable)
-{
- dev->power.ignore_children = enable;
-}
-
-static inline void pm_runtime_get_noresume(struct device *dev)
-{
- atomic_inc(&dev->power.usage_count);
-}
-
-static inline void pm_runtime_put_noidle(struct device *dev)
-{
- atomic_add_unless(&dev->power.usage_count, -1, 0);
-}
-
-static inline bool device_run_wake(struct device *dev)
-{
- return dev->power.run_wake;
-}
-
-static inline void device_set_run_wake(struct device *dev, bool enable)
-{
- dev->power.run_wake = enable;
-}
-
-static inline bool pm_runtime_suspended(struct device *dev)
-{
- return dev->power.runtime_status == RPM_SUSPENDED;
-}
-
-#else /* !CONFIG_PM_RUNTIME */
-
-static inline int pm_runtime_idle(struct device *dev) { return -ENOSYS; }
-static inline int pm_runtime_suspend(struct device *dev) { return -ENOSYS; }
-static inline int pm_runtime_resume(struct device *dev) { return 0; }
-static inline int pm_request_idle(struct device *dev) { return -ENOSYS; }
-static inline int pm_schedule_suspend(struct device *dev, unsigned int delay)
-{
- return -ENOSYS;
-}
-static inline int pm_request_resume(struct device *dev) { return 0; }
-static inline int __pm_runtime_get(struct device *dev, bool sync) { return 1; }
-static inline int __pm_runtime_put(struct device *dev, bool sync) { return 0; }
-static inline int __pm_runtime_set_status(struct device *dev,
- unsigned int status) { return 0; }
-static inline int pm_runtime_barrier(struct device *dev) { return 0; }
-static inline void pm_runtime_enable(struct device *dev) {}
-static inline void __pm_runtime_disable(struct device *dev, bool c) {}
-static inline void pm_runtime_allow(struct device *dev) {}
-static inline void pm_runtime_forbid(struct device *dev) {}
-
-static inline bool pm_children_suspended(struct device *dev) { return false; }
-static inline void pm_suspend_ignore_children(struct device *dev, bool en) {}
-static inline void pm_runtime_get_noresume(struct device *dev) {}
-static inline void pm_runtime_put_noidle(struct device *dev) {}
-static inline bool device_run_wake(struct device *dev) { return false; }
-static inline void device_set_run_wake(struct device *dev, bool enable) {}
-static inline bool pm_runtime_suspended(struct device *dev) { return false; }
-
-#endif /* !CONFIG_PM_RUNTIME */
-
-static inline int pm_runtime_get(struct device *dev)
-{
- return __pm_runtime_get(dev, false);
-}
-
-static inline int pm_runtime_get_sync(struct device *dev)
-{
- return __pm_runtime_get(dev, true);
-}
-
-static inline int pm_runtime_put(struct device *dev)
-{
- return __pm_runtime_put(dev, false);
-}
-
-static inline int pm_runtime_put_sync(struct device *dev)
-{
- return __pm_runtime_put(dev, true);
-}
-
-static inline int pm_runtime_set_active(struct device *dev)
-{
- return __pm_runtime_set_status(dev, RPM_ACTIVE);
-}
-
-static inline void pm_runtime_set_suspended(struct device *dev)
-{
- __pm_runtime_set_status(dev, RPM_SUSPENDED);
-}
-
-static inline void pm_runtime_disable(struct device *dev)
-{
- __pm_runtime_disable(dev, true);
-}
-
-#endif
diff --git a/target/linux/realtek/files/include/linux/pm_uWiFi.h b/target/linux/realtek/files/include/linux/pm_uWiFi.h
deleted file mode 100644
index ee79fa0f9..000000000
--- a/target/linux/realtek/files/include/linux/pm_uWiFi.h
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * pm.h - Power management interface
- *
- * Copyright (C) 2000 Andrew Henroid
- *
- * 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
- */
-
-#ifndef _LINUX_PM_H
-#define _LINUX_PM_H
-
-#include <linux/list.h>
-
-/*
- * Callbacks for platform drivers to implement.
- */
-extern void (*pm_idle)(void);
-extern void (*pm_power_off)(void);
-extern void (*pm_power_off_prepare)(void);
-
-/*
- * Device power management
- */
-
-struct device;
-
-typedef struct pm_message {
- int event;
-} pm_message_t;
-
-/**
- * struct dev_pm_ops - device PM callbacks
- *
- * Several driver power state transitions are externally visible, affecting
- * the state of pending I/O queues and (for drivers that touch hardware)
- * interrupts, wakeups, DMA, and other hardware state. There may also be
- * internal transitions to various low power modes, which are transparent
- * to the rest of the driver stack (such as a driver that's ON gating off
- * clocks which are not in active use).
- *
- * The externally visible transitions are handled with the help of the following
- * callbacks included in this structure:
- *
- * @prepare: Prepare the device for the upcoming transition, but do NOT change
- * its hardware state. Prevent new children of the device from being
- * registered after @prepare() returns (the driver's subsystem and
- * generally the rest of the kernel is supposed to prevent new calls to the
- * probe method from being made too once @prepare() has succeeded). If
- * @prepare() detects a situation it cannot handle (e.g. registration of a
- * child already in progress), it may return -EAGAIN, so that the PM core
- * can execute it once again (e.g. after the new child has been registered)
- * to recover from the race condition. This method is executed for all
- * kinds of suspend transitions and is followed by one of the suspend
- * callbacks: @suspend(), @freeze(), or @poweroff().
- * The PM core executes @prepare() for all devices before starting to
- * execute suspend callbacks for any of them, so drivers may assume all of
- * the other devices to be present and functional while @prepare() is being
- * executed. In particular, it is safe to make GFP_KERNEL memory
- * allocations from within @prepare(). However, drivers may NOT assume
- * anything about the availability of the user space at that time and it
- * is not correct to request firmware from within @prepare() (it's too
- * late to do that). [To work around this limitation, drivers may
- * register suspend and hibernation notifiers that are executed before the
- * freezing of tasks.]
- *
- * @complete: Undo the changes made by @prepare(). This method is executed for
- * all kinds of resume transitions, following one of the resume callbacks:
- * @resume(), @thaw(), @restore(). Also called if the state transition
- * fails before the driver's suspend callback (@suspend(), @freeze(),
- * @poweroff()) can be executed (e.g. if the suspend callback fails for one
- * of the other devices that the PM core has unsuccessfully attempted to
- * suspend earlier).
- * The PM core executes @complete() after it has executed the appropriate
- * resume callback for all devices.
- *
- * @suspend: Executed before putting the system into a sleep state in which the
- * contents of main memory are preserved. Quiesce the device, put it into
- * a low power state appropriate for the upcoming system state (such as
- * PCI_D3hot), and enable wakeup events as appropriate.
- *
- * @resume: Executed after waking the system up from a sleep state in which the
- * contents of main memory were preserved. Put the device into the
- * appropriate state, according to the information saved in memory by the
- * preceding @suspend(). The driver starts working again, responding to
- * hardware events and software requests. The hardware may have gone
- * through a power-off reset, or it may have maintained state from the
- * previous suspend() which the driver may rely on while resuming. On most
- * platforms, there are no restrictions on availability of resources like
- * clocks during @resume().
- *
- * @freeze: Hibernation-specific, executed before creating a hibernation image.
- * Quiesce operations so that a consistent image can be created, but do NOT
- * otherwise put the device into a low power device state and do NOT emit
- * system wakeup events. Save in main memory the device settings to be
- * used by @restore() during the subsequent resume from hibernation or by
- * the subsequent @thaw(), if the creation of the image or the restoration
- * of main memory contents from it fails.
- *
- * @thaw: Hibernation-specific, executed after creating a hibernation image OR
- * if the creation of the image fails. Also executed after a failing
- * attempt to restore the contents of main memory from such an image.
- * Undo the changes made by the preceding @freeze(), so the device can be
- * operated in the same way as immediately before the call to @freeze().
- *
- * @poweroff: Hibernation-specific, executed after saving a hibernation image.
- * Quiesce the device, put it into a low power state appropriate for the
- * upcoming system state (such as PCI_D3hot), and enable wakeup events as
- * appropriate.
- *
- * @restore: Hibernation-specific, executed after restoring the contents of main
- * memory from a hibernation image. Driver starts working again,
- * responding to hardware events and software requests. Drivers may NOT
- * make ANY assumptions about the hardware state right prior to @restore().
- * On most platforms, there are no restrictions on availability of
- * resources like clocks during @restore().
- *
- * @suspend_noirq: Complete the operations of ->suspend() by carrying out any
- * actions required for suspending the device that need interrupts to be
- * disabled
- *
- * @resume_noirq: Prepare for the execution of ->resume() by carrying out any
- * actions required for resuming the device that need interrupts to be
- * disabled
- *
- * @freeze_noirq: Complete the operations of ->freeze() by carrying out any
- * actions required for freezing the device that need interrupts to be
- * disabled
- *
- * @thaw_noirq: Prepare for the execution of ->thaw() by carrying out any
- * actions required for thawing the device that need interrupts to be
- * disabled
- *
- * @poweroff_noirq: Complete the operations of ->poweroff() by carrying out any
- * actions required for handling the device that need interrupts to be
- * disabled
- *
- * @restore_noirq: Prepare for the execution of ->restore() by carrying out any
- * actions required for restoring the operations of the device that need
- * interrupts to be disabled
- *
- * All of the above callbacks, except for @complete(), return error codes.
- * However, the error codes returned by the resume operations, @resume(),
- * @thaw(), @restore(), @resume_noirq(), @thaw_noirq(), and @restore_noirq() do
- * not cause the PM core to abort the resume transition during which they are
- * returned. The error codes returned in that cases are only printed by the PM
- * core to the system logs for debugging purposes. Still, it is recommended
- * that drivers only return error codes from their resume methods in case of an
- * unrecoverable failure (i.e. when the device being handled refuses to resume
- * and becomes unusable) to allow us to modify the PM core in the future, so
- * that it can avoid attempting to handle devices that failed to resume and
- * their children.
- *
- * It is allowed to unregister devices while the above callbacks are being
- * executed. However, it is not allowed to unregister a device from within any
- * of its own callbacks.
- */
-
-struct dev_pm_ops {
- int (*prepare)(struct device *dev);
- void (*complete)(struct device *dev);
- int (*suspend)(struct device *dev);
- int (*resume)(struct device *dev);
- int (*freeze)(struct device *dev);
- int (*thaw)(struct device *dev);
- int (*poweroff)(struct device *dev);
- int (*restore)(struct device *dev);
- int (*suspend_noirq)(struct device *dev);
- int (*resume_noirq)(struct device *dev);
- int (*freeze_noirq)(struct device *dev);
- int (*thaw_noirq)(struct device *dev);
- int (*poweroff_noirq)(struct device *dev);
- int (*restore_noirq)(struct device *dev);
-};
-
-/**
- * PM_EVENT_ messages
- *
- * The following PM_EVENT_ messages are defined for the internal use of the PM
- * core, in order to provide a mechanism allowing the high level suspend and
- * hibernation code to convey the necessary information to the device PM core
- * code:
- *
- * ON No transition.
- *
- * FREEZE System is going to hibernate, call ->prepare() and ->freeze()
- * for all devices.
- *
- * SUSPEND System is going to suspend, call ->prepare() and ->suspend()
- * for all devices.
- *
- * HIBERNATE Hibernation image has been saved, call ->prepare() and
- * ->poweroff() for all devices.
- *
- * QUIESCE Contents of main memory are going to be restored from a (loaded)
- * hibernation image, call ->prepare() and ->freeze() for all
- * devices.
- *
- * RESUME System is resuming, call ->resume() and ->complete() for all
- * devices.
- *
- * THAW Hibernation image has been created, call ->thaw() and
- * ->complete() for all devices.
- *
- * RESTORE Contents of main memory have been restored from a hibernation
- * image, call ->restore() and ->complete() for all devices.
- *
- * RECOVER Creation of a hibernation image or restoration of the main
- * memory contents from a hibernation image has failed, call
- * ->thaw() and ->complete() for all devices.
- *
- * The following PM_EVENT_ messages are defined for internal use by
- * kernel subsystems. They are never issued by the PM core.
- *
- * USER_SUSPEND Manual selective suspend was issued by userspace.
- *
- * USER_RESUME Manual selective resume was issued by userspace.
- *
- * REMOTE_WAKEUP Remote-wakeup request was received from the device.
- *
- * AUTO_SUSPEND Automatic (device idle) runtime suspend was
- * initiated by the subsystem.
- *
- * AUTO_RESUME Automatic (device needed) runtime resume was
- * requested by a driver.
- */
-
-#define PM_EVENT_ON 0x0000
-#define PM_EVENT_FREEZE 0x0001
-#define PM_EVENT_SUSPEND 0x0002
-#define PM_EVENT_HIBERNATE 0x0004
-#define PM_EVENT_QUIESCE 0x0008
-#define PM_EVENT_RESUME 0x0010
-#define PM_EVENT_THAW 0x0020
-#define PM_EVENT_RESTORE 0x0040
-#define PM_EVENT_RECOVER 0x0080
-#define PM_EVENT_USER 0x0100
-#define PM_EVENT_REMOTE 0x0200
-#define PM_EVENT_AUTO 0x0400
-
-#define PM_EVENT_SLEEP (PM_EVENT_SUSPEND | PM_EVENT_HIBERNATE)
-#define PM_EVENT_USER_SUSPEND (PM_EVENT_USER | PM_EVENT_SUSPEND)
-#define PM_EVENT_USER_RESUME (PM_EVENT_USER | PM_EVENT_RESUME)
-#define PM_EVENT_REMOTE_RESUME (PM_EVENT_REMOTE | PM_EVENT_RESUME)
-#define PM_EVENT_AUTO_SUSPEND (PM_EVENT_AUTO | PM_EVENT_SUSPEND)
-#define PM_EVENT_AUTO_RESUME (PM_EVENT_AUTO | PM_EVENT_RESUME)
-
-#define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, })
-#define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, })
-#define PMSG_QUIESCE ((struct pm_message){ .event = PM_EVENT_QUIESCE, })
-#define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, })
-#define PMSG_HIBERNATE ((struct pm_message){ .event = PM_EVENT_HIBERNATE, })
-#define PMSG_RESUME ((struct pm_message){ .event = PM_EVENT_RESUME, })
-#define PMSG_THAW ((struct pm_message){ .event = PM_EVENT_THAW, })
-#define PMSG_RESTORE ((struct pm_message){ .event = PM_EVENT_RESTORE, })
-#define PMSG_RECOVER ((struct pm_message){ .event = PM_EVENT_RECOVER, })
-#define PMSG_USER_SUSPEND ((struct pm_message) \
- { .event = PM_EVENT_USER_SUSPEND, })
-#define PMSG_USER_RESUME ((struct pm_message) \
- { .event = PM_EVENT_USER_RESUME, })
-#define PMSG_REMOTE_RESUME ((struct pm_message) \
- { .event = PM_EVENT_REMOTE_RESUME, })
-#define PMSG_AUTO_SUSPEND ((struct pm_message) \
- { .event = PM_EVENT_AUTO_SUSPEND, })
-#define PMSG_AUTO_RESUME ((struct pm_message) \
- { .event = PM_EVENT_AUTO_RESUME, })
-
-/**
- * Device power management states
- *
- * These state labels are used internally by the PM core to indicate the current
- * status of a device with respect to the PM core operations.
- *
- * DPM_ON Device is regarded as operational. Set this way
- * initially and when ->complete() is about to be called.
- * Also set when ->prepare() fails.
- *
- * DPM_PREPARING Device is going to be prepared for a PM transition. Set
- * when ->prepare() is about to be called.
- *
- * DPM_RESUMING Device is going to be resumed. Set when ->resume(),
- * ->thaw(), or ->restore() is about to be called.
- *
- * DPM_SUSPENDING Device has been prepared for a power transition. Set
- * when ->prepare() has just succeeded.
- *
- * DPM_OFF Device is regarded as inactive. Set immediately after
- * ->suspend(), ->freeze(), or ->poweroff() has succeeded.
- * Also set when ->resume()_noirq, ->thaw_noirq(), or
- * ->restore_noirq() is about to be called.
- *
- * DPM_OFF_IRQ Device is in a "deep sleep". Set immediately after
- * ->suspend_noirq(), ->freeze_noirq(), or
- * ->poweroff_noirq() has just succeeded.
- */
-
-enum dpm_state {
- DPM_INVALID,
- DPM_ON,
- DPM_PREPARING,
- DPM_RESUMING,
- DPM_SUSPENDING,
- DPM_OFF,
- DPM_OFF_IRQ,
-};
-
-/**
- * Device run-time power management status.
- *
- * These status labels are used internally by the PM core to indicate the
- * current status of a device with respect to the PM core operations. They do
- * not reflect the actual power state of the device or its status as seen by the
- * driver.
- *
- * RPM_ACTIVE Device is fully operational. Indicates that the device
- * bus type's ->runtime_resume() callback has completed
- * successfully.
- *
- * RPM_SUSPENDED Device bus type's ->runtime_suspend() callback has
- * completed successfully. The device is regarded as
- * suspended.
- *
- * RPM_RESUMING Device bus type's ->runtime_resume() callback is being
- * executed.
- *
- * RPM_SUSPENDING Device bus type's ->runtime_suspend() callback is being
- * executed.
- */
-
-enum rpm_status {
- RPM_ACTIVE = 0,
- RPM_RESUMING,
- RPM_SUSPENDED,
- RPM_SUSPENDING,
-};
-
-/**
- * Device run-time power management request types.
- *
- * RPM_REQ_NONE Do nothing.
- *
- * RPM_REQ_IDLE Run the device bus type's ->runtime_idle() callback
- *
- * RPM_REQ_SUSPEND Run the device bus type's ->runtime_suspend() callback
- *
- * RPM_REQ_RESUME Run the device bus type's ->runtime_resume() callback
- */
-
-enum rpm_request {
- RPM_REQ_NONE = 0,
- RPM_REQ_IDLE,
- RPM_REQ_SUSPEND,
- RPM_REQ_RESUME,
-};
-
-struct dev_pm_info {
- pm_message_t power_state;
- unsigned int can_wakeup:1;
- unsigned int should_wakeup:1;
- unsigned async_suspend:1;
- enum dpm_state status; /* Owned by the PM core */
-#ifdef CONFIG_PM_SLEEP
- struct list_head entry;
- struct completion completion;
-#endif
-#ifdef CONFIG_PM_RUNTIME
- struct timer_list suspend_timer;
- unsigned long timer_expires;
- struct work_struct work;
- wait_queue_head_t wait_queue;
- spinlock_t lock;
- atomic_t usage_count;
- atomic_t child_count;
- unsigned int disable_depth:3;
- unsigned int ignore_children:1;
- unsigned int idle_notification:1;
- unsigned int request_pending:1;
- unsigned int deferred_resume:1;
- unsigned int run_wake:1;
- unsigned int runtime_auto:1;
- enum rpm_request request;
- enum rpm_status runtime_status;
- int runtime_error;
-#endif
-};
-
-/*
- * The PM_EVENT_ messages are also used by drivers implementing the legacy
- * suspend framework, based on the ->suspend() and ->resume() callbacks common
- * for suspend and hibernation transitions, according to the rules below.
- */
-
-/* Necessary, because several drivers use PM_EVENT_PRETHAW */
-#define PM_EVENT_PRETHAW PM_EVENT_QUIESCE
-
-/*
- * One transition is triggered by resume(), after a suspend() call; the
- * message is implicit:
- *
- * ON Driver starts working again, responding to hardware events
- * and software requests. The hardware may have gone through
- * a power-off reset, or it may have maintained state from the
- * previous suspend() which the driver will rely on while
- * resuming. On most platforms, there are no restrictions on
- * availability of resources like clocks during resume().
- *
- * Other transitions are triggered by messages sent using suspend(). All
- * these transitions quiesce the driver, so that I/O queues are inactive.
- * That commonly entails turning off IRQs and DMA; there may be rules
- * about how to quiesce that are specific to the bus or the device's type.
- * (For example, network drivers mark the link state.) Other details may
- * differ according to the message:
- *
- * SUSPEND Quiesce, enter a low power device state appropriate for
- * the upcoming system state (such as PCI_D3hot), and enable
- * wakeup events as appropriate.
- *
- * HIBERNATE Enter a low power device state appropriate for the hibernation
- * state (eg. ACPI S4) and enable wakeup events as appropriate.
- *
- * FREEZE Quiesce operations so that a consistent image can be saved;
- * but do NOT otherwise enter a low power device state, and do
- * NOT emit system wakeup events.
- *
- * PRETHAW Quiesce as if for FREEZE; additionally, prepare for restoring
- * the system from a snapshot taken after an earlier FREEZE.
- * Some drivers will need to reset their hardware state instead
- * of preserving it, to ensure that it's never mistaken for the
- * state which that earlier snapshot had set up.
- *
- * A minimally power-aware driver treats all messages as SUSPEND, fully
- * reinitializes its device during resume() -- whether or not it was reset
- * during the suspend/resume cycle -- and can't issue wakeup events.
- *
- * More power-aware drivers may also use low power states at runtime as
- * well as during system sleep states like PM_SUSPEND_STANDBY. They may
- * be able to use wakeup events to exit from runtime low-power states,
- * or from system low-power states such as standby or suspend-to-RAM.
- */
-
-#ifdef CONFIG_PM_SLEEP
-extern void device_pm_lock(void);
-extern int sysdev_resume(void);
-extern void device_power_up(pm_message_t state);
-extern void device_resume(pm_message_t state);
-
-extern void device_pm_unlock(void);
-extern int sysdev_suspend(pm_message_t state);
-extern int device_power_down(pm_message_t state);
-extern int device_suspend(pm_message_t state);
-extern int device_prepare_suspend(pm_message_t state);
-
-extern void __suspend_report_result(const char *function, void *fn, int ret);
-
-#define suspend_report_result(fn, ret) \
- do { \
- __suspend_report_result(__func__, fn, ret); \
- } while (0)
-
-#else /* !CONFIG_PM_SLEEP */
-
-#define device_pm_lock() do {} while (0)
-#define device_pm_unlock() do {} while (0)
-
-static inline int device_suspend(pm_message_t state)
-{
- return 0;
-}
-
-#define suspend_report_result(fn, ret) do {} while (0)
-
-#endif /* !CONFIG_PM_SLEEP */
-
-/* How to reorder dpm_list after device_move() */
-enum dpm_order {
- DPM_ORDER_NONE,
- DPM_ORDER_DEV_AFTER_PARENT,
- DPM_ORDER_PARENT_BEFORE_DEV,
- DPM_ORDER_DEV_LAST,
-};
-
-/*
- * Global Power Management flags
- * Used to keep APM and ACPI from both being active
- */
-extern unsigned int pm_flags;
-
-#define PM_APM 1
-#define PM_ACPI 2
-
-#endif /* _LINUX_PM_H */
diff --git a/target/linux/realtek/files/include/linux/usb_uWiFi.h b/target/linux/realtek/files/include/linux/usb_uWiFi.h
deleted file mode 100644
index e63b2b70e..000000000
--- a/target/linux/realtek/files/include/linux/usb_uWiFi.h
+++ /dev/null
@@ -1,1568 +0,0 @@
-#ifndef __LINUX_USB_H
-#define __LINUX_USB_H
-
-#include <linux/mod_devicetable.h>
-#include <linux/usb/ch9.h>
-
-#define USB_MAJOR 180
-#define USB_DEVICE_MAJOR 189
-
-
-#ifdef __KERNEL__
-
-#include <linux/errno.h> /* for -ENODEV */
-#include <linux/delay.h> /* for mdelay() */
-#include <linux/interrupt.h> /* for in_interrupt() */
-#include <linux/list.h> /* for struct list_head */
-#include <linux/kref.h> /* for struct kref */
-#include <linux/device.h> /* for struct device */
-#include <linux/fs.h> /* for struct file_operations */
-#include <linux/completion.h> /* for struct completion */
-#include <linux/sched.h> /* for current && schedule_timeout */
-#include <linux/mutex.h> /* for struct mutex */
-
-struct usb_device;
-struct usb_driver;
-struct wusb_dev;
-
-/*-------------------------------------------------------------------------*/
-
-/*
- * Host-side wrappers for standard USB descriptors ... these are parsed
- * from the data provided by devices. Parsing turns them from a flat
- * sequence of descriptors into a hierarchy:
- *
- * - devices have one (usually) or more configs;
- * - configs have one (often) or more interfaces;
- * - interfaces have one (usually) or more settings;
- * - each interface setting has zero or (usually) more endpoints.
- *
- * And there might be other descriptors mixed in with those.
- *
- * Devices may also have class-specific or vendor-specific descriptors.
- */
-
-struct ep_device;
-
-/**
- * struct usb_host_endpoint - host-side endpoint descriptor and queue
- * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder
- * @urb_list: urbs queued to this endpoint; maintained by usbcore
- * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH)
- * with one or more transfer descriptors (TDs) per urb
- * @ep_dev: ep_device for sysfs info
- * @extra: descriptors following this endpoint in the configuration
- * @extralen: how many bytes of "extra" are valid
- * @enabled: URBs may be submitted to this endpoint
- *
- * USB requests are always queued to a given endpoint, identified by a
- * descriptor within an active interface in a given USB configuration.
- */
-struct usb_host_endpoint {
- struct usb_endpoint_descriptor desc;
- struct list_head urb_list;
- void *hcpriv;
- struct ep_device *ep_dev; /* For sysfs info */
-
- unsigned char *extra; /* Extra descriptors */
- int extralen;
- int enabled;
-};
-
-/* host-side wrapper for one interface setting's parsed descriptors */
-struct usb_host_interface {
- struct usb_interface_descriptor desc;
-
- /* array of desc.bNumEndpoint endpoints associated with this
- * interface setting. these will be in no particular order.
- */
- struct usb_host_endpoint *endpoint;
-
- char *string; /* iInterface string, if present */
- unsigned char *extra; /* Extra descriptors */
- int extralen;
-};
-
-enum usb_interface_condition {
- USB_INTERFACE_UNBOUND = 0,
- USB_INTERFACE_BINDING,
- USB_INTERFACE_BOUND,
- USB_INTERFACE_UNBINDING,
-};
-
-/**
- * struct usb_interface - what usb device drivers talk to
- * @altsetting: array of interface structures, one for each alternate
- * setting that may be selected. Each one includes a set of
- * endpoint configurations. They will be in no particular order.
- * @cur_altsetting: the current altsetting.
- * @num_altsetting: number of altsettings defined.
- * @intf_assoc: interface association descriptor
- * @minor: the minor number assigned to this interface, if this
- * interface is bound to a driver that uses the USB major number.
- * If this interface does not use the USB major, this field should
- * be unused. The driver should set this value in the probe()
- * function of the driver, after it has been assigned a minor
- * number from the USB core by calling usb_register_dev().
- * @condition: binding state of the interface: not bound, binding
- * (in probe()), bound to a driver, or unbinding (in disconnect())
- * @sysfs_files_created: sysfs attributes exist
- * @ep_devs_created: endpoint child pseudo-devices exist
- * @unregistering: flag set when the interface is being unregistered
- * @needs_remote_wakeup: flag set when the driver requires remote-wakeup
- * capability during autosuspend.
- * @needs_altsetting0: flag set when a set-interface request for altsetting 0
- * has been deferred.
- * @needs_binding: flag set when the driver should be re-probed or unbound
- * following a reset or suspend operation it doesn't support.
- * @dev: driver model's view of this device
- * @usb_dev: if an interface is bound to the USB major, this will point
- * to the sysfs representation for that device.
- * @pm_usage_cnt: PM usage counter for this interface
- * @reset_ws: Used for scheduling resets from atomic context.
- * @reset_running: set to 1 if the interface is currently running a
- * queued reset so that usb_cancel_queued_reset() doesn't try to
- * remove from the workqueue when running inside the worker
- * thread. See __usb_queue_reset_device().
- *
- * USB device drivers attach to interfaces on a physical device. Each
- * interface encapsulates a single high level function, such as feeding
- * an audio stream to a speaker or reporting a change in a volume control.
- * Many USB devices only have one interface. The protocol used to talk to
- * an interface's endpoints can be defined in a usb "class" specification,
- * or by a product's vendor. The (default) control endpoint is part of
- * every interface, but is never listed among the interface's descriptors.
- *
- * The driver that is bound to the interface can use standard driver model
- * calls such as dev_get_drvdata() on the dev member of this structure.
- *
- * Each interface may have alternate settings. The initial configuration
- * of a device sets altsetting 0, but the device driver can change
- * that setting using usb_set_interface(). Alternate settings are often
- * used to control the use of periodic endpoints, such as by having
- * different endpoints use different amounts of reserved USB bandwidth.
- * All standards-conformant USB devices that use isochronous endpoints
- * will use them in non-default settings.
- *
- * The USB specification says that alternate setting numbers must run from
- * 0 to one less than the total number of alternate settings. But some
- * devices manage to mess this up, and the structures aren't necessarily
- * stored in numerical order anyhow. Use usb_altnum_to_altsetting() to
- * look up an alternate setting in the altsetting array based on its number.
- */
-struct usb_interface {
- /* array of alternate settings for this interface,
- * stored in no particular order */
- struct usb_host_interface *altsetting;
-
- struct usb_host_interface *cur_altsetting; /* the currently
- * active alternate setting */
- unsigned num_altsetting; /* number of alternate settings */
-
- /* If there is an interface association descriptor then it will list
- * the associated interfaces */
- struct usb_interface_assoc_descriptor *intf_assoc;
-
- int minor; /* minor number this interface is
- * bound to */
- enum usb_interface_condition condition; /* state of binding */
- unsigned sysfs_files_created:1; /* the sysfs attributes exist */
- unsigned ep_devs_created:1; /* endpoint "devices" exist */
- unsigned unregistering:1; /* unregistration is in progress */
- unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
- unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */
- unsigned needs_binding:1; /* needs delayed unbind/rebind */
- unsigned reset_running:1;
- unsigned resetting_device:1; /* true: bandwidth alloc after reset */
-
- struct device dev; /* interface specific device info */
- struct device *usb_dev;
- atomic_t pm_usage_cnt; /* usage counter for autosuspend */
- struct work_struct reset_ws; /* for resets in atomic context */
-};
-#define to_usb_interface(d) container_of(d, struct usb_interface, dev)
-#define interface_to_usbdev(intf) \
- container_of(intf->dev.parent, struct usb_device, dev)
-
-static inline void *usb_get_intfdata(struct usb_interface *intf)
-{
- return dev_get_drvdata(&intf->dev);
-}
-
-static inline void usb_set_intfdata(struct usb_interface *intf, void *data)
-{
- dev_set_drvdata(&intf->dev, data);
-}
-
-struct usb_interface *usb_get_intf(struct usb_interface *intf);
-void usb_put_intf(struct usb_interface *intf);
-
-/* this maximum is arbitrary */
-#define USB_MAXINTERFACES 32
-#define USB_MAXIADS USB_MAXINTERFACES/2
-
-/**
- * struct usb_interface_cache - long-term representation of a device interface
- * @num_altsetting: number of altsettings defined.
- * @ref: reference counter.
- * @altsetting: variable-length array of interface structures, one for
- * each alternate setting that may be selected. Each one includes a
- * set of endpoint configurations. They will be in no particular order.
- *
- * These structures persist for the lifetime of a usb_device, unlike
- * struct usb_interface (which persists only as long as its configuration
- * is installed). The altsetting arrays can be accessed through these
- * structures at any time, permitting comparison of configurations and
- * providing support for the /proc/bus/usb/devices pseudo-file.
- */
-struct usb_interface_cache {
- unsigned num_altsetting; /* number of alternate settings */
- struct kref ref; /* reference counter */
-
- /* variable-length array of alternate settings for this interface,
- * stored in no particular order */
- struct usb_host_interface altsetting[0];
-};
-#define ref_to_usb_interface_cache(r) \
- container_of(r, struct usb_interface_cache, ref)
-#define altsetting_to_usb_interface_cache(a) \
- container_of(a, struct usb_interface_cache, altsetting[0])
-
-/**
- * struct usb_host_config - representation of a device's configuration
- * @desc: the device's configuration descriptor.
- * @string: pointer to the cached version of the iConfiguration string, if
- * present for this configuration.
- * @intf_assoc: list of any interface association descriptors in this config
- * @interface: array of pointers to usb_interface structures, one for each
- * interface in the configuration. The number of interfaces is stored
- * in desc.bNumInterfaces. These pointers are valid only while the
- * the configuration is active.
- * @intf_cache: array of pointers to usb_interface_cache structures, one
- * for each interface in the configuration. These structures exist
- * for the entire life of the device.
- * @extra: pointer to buffer containing all extra descriptors associated
- * with this configuration (those preceding the first interface
- * descriptor).
- * @extralen: length of the extra descriptors buffer.
- *
- * USB devices may have multiple configurations, but only one can be active
- * at any time. Each encapsulates a different operational environment;
- * for example, a dual-speed device would have separate configurations for
- * full-speed and high-speed operation. The number of configurations
- * available is stored in the device descriptor as bNumConfigurations.
- *
- * A configuration can contain multiple interfaces. Each corresponds to
- * a different function of the USB device, and all are available whenever
- * the configuration is active. The USB standard says that interfaces
- * are supposed to be numbered from 0 to desc.bNumInterfaces-1, but a lot
- * of devices get this wrong. In addition, the interface array is not
- * guaranteed to be sorted in numerical order. Use usb_ifnum_to_if() to
- * look up an interface entry based on its number.
- *
- * Device drivers should not attempt to activate configurations. The choice
- * of which configuration to install is a policy decision based on such
- * considerations as available power, functionality provided, and the user's
- * desires (expressed through userspace tools). However, drivers can call
- * usb_reset_configuration() to reinitialize the current configuration and
- * all its interfaces.
- */
-struct usb_host_config {
- struct usb_config_descriptor desc;
-
- char *string; /* iConfiguration string, if present */
-
- /* List of any Interface Association Descriptors in this
- * configuration. */
- struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS];
-
- /* the interfaces associated with this configuration,
- * stored in no particular order */
- struct usb_interface *interface[USB_MAXINTERFACES];
-
- /* Interface information available even when this is not the
- * active configuration */
- struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];
-
- unsigned char *extra; /* Extra descriptors */
- int extralen;
-};
-
-int __usb_get_extra_descriptor(char *buffer, unsigned size,
- unsigned char type, void **ptr);
-#define usb_get_extra_descriptor(ifpoint, type, ptr) \
- __usb_get_extra_descriptor((ifpoint)->extra, \
- (ifpoint)->extralen, \
- type, (void **)ptr)
-
-/* ----------------------------------------------------------------------- */
-
-/* USB device number allocation bitmap */
-struct usb_devmap {
- unsigned long devicemap[128 / (8*sizeof(unsigned long))];
-};
-
-/*
- * Allocated per bus (tree of devices) we have:
- */
-struct usb_bus {
- struct device *controller; /* host/master side hardware */
- int busnum; /* Bus number (in order of reg) */
- const char *bus_name; /* stable id (PCI slot_name etc) */
- u8 uses_dma; /* Does the host controller use DMA? */
- u8 otg_port; /* 0, or number of OTG/HNP port */
- unsigned is_b_host:1; /* true during some HNP roleswitches */
- unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */
- unsigned sg_tablesize; /* 0 or largest number of sg list entries */
-
- int devnum_next; /* Next open device number in
- * round-robin allocation */
-
- struct usb_devmap devmap; /* device address allocation map */
- struct usb_device *root_hub; /* Root hub */
- struct usb_bus *hs_companion; /* Companion EHCI bus, if any */
- struct list_head bus_list; /* list of busses */
-
- int bandwidth_allocated; /* on this bus: how much of the time
- * reserved for periodic (intr/iso)
- * requests is used, on average?
- * Units: microseconds/frame.
- * Limits: Full/low speed reserve 90%,
- * while high speed reserves 80%.
- */
- int bandwidth_int_reqs; /* number of Interrupt requests */
- int bandwidth_isoc_reqs; /* number of Isoc. requests */
-
-#ifdef CONFIG_USB_DEVICEFS
- struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */
-#endif
- struct device *dev; /* device for this bus */
-
-#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
- struct mon_bus *mon_bus; /* non-null when associated */
- int monitored; /* non-zero when monitored */
-#endif
-};
-
-/* ----------------------------------------------------------------------- */
-
-/* This is arbitrary.
- * From USB 2.0 spec Table 11-13, offset 7, a hub can
- * have up to 255 ports. The most yet reported is 10.
- *
- * Current Wireless USB host hardware (Intel i1480 for example) allows
- * up to 22 devices to connect. Upcoming hardware might raise that
- * limit. Because the arrays need to add a bit for hub status data, we
- * do 31, so plus one evens out to four bytes.
- */
-#define USB_MAXCHILDREN (31)
-
-struct usb_tt;
-
-/**
- * struct usb_device - kernel's representation of a USB device
- * @devnum: device number; address on a USB bus
- * @devpath: device ID string for use in messages (e.g., /port/...)
- * @state: device state: configured, not attached, etc.
- * @speed: device speed: high/full/low (or error)
- * @tt: Transaction Translator info; used with low/full speed dev, highspeed hub
- * @ttport: device port on that tt hub
- * @toggle: one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints
- * @parent: our hub, unless we're the root
- * @bus: bus we're part of
- * @ep0: endpoint 0 data (default control pipe)
- * @dev: generic device interface
- * @descriptor: USB device descriptor
- * @config: all of the device's configs
- * @actconfig: the active configuration
- * @ep_in: array of IN endpoints
- * @ep_out: array of OUT endpoints
- * @rawdescriptors: raw descriptors for each config
- * @bus_mA: Current available from the bus
- * @portnum: parent port number (origin 1)
- * @level: number of USB hub ancestors
- * @can_submit: URBs may be submitted
- * @persist_enabled: USB_PERSIST enabled for this device
- * @have_langid: whether string_langid is valid
- * @authorized: policy has said we can use it;
- * (user space) policy determines if we authorize this device to be
- * used or not. By default, wired USB devices are authorized.
- * WUSB devices are not, until we authorize them from user space.
- * FIXME -- complete doc
- * @authenticated: Crypto authentication passed
- * @wusb: device is Wireless USB
- * @string_langid: language ID for strings
- * @product: iProduct string, if present (static)
- * @manufacturer: iManufacturer string, if present (static)
- * @serial: iSerialNumber string, if present (static)
- * @filelist: usbfs files that are open to this device
- * @usb_classdev: USB class device that was created for usbfs device
- * access from userspace
- * @usbfs_dentry: usbfs dentry entry for the device
- * @maxchild: number of ports if hub
- * @children: child devices - USB devices that are attached to this hub
- * @quirks: quirks of the whole device
- * @urbnum: number of URBs submitted for the whole device
- * @active_duration: total time device is not suspended
- * @last_busy: time of last use
- * @autosuspend_delay: in jiffies
- * @connect_time: time device was first connected
- * @auto_pm: autosuspend/resume in progress
- * @do_remote_wakeup: remote wakeup should be enabled
- * @reset_resume: needs reset instead of resume
- * @autosuspend_disabled: autosuspend disabled by the user
- * @wusb_dev: if this is a Wireless USB device, link to the WUSB
- * specific data for the device.
- *
- * Notes:
- * Usbcore drivers should not set usbdev->state directly. Instead use
- * usb_set_device_state().
- */
-struct usb_device {
- int devnum;
- char devpath [16];
- enum usb_device_state state;
- enum usb_device_speed speed;
-
- struct usb_tt *tt;
- int ttport;
-
- unsigned int toggle[2];
-
- struct usb_device *parent;
- struct usb_bus *bus;
- struct usb_host_endpoint ep0;
-
- struct device dev;
-
- struct usb_device_descriptor descriptor;
- struct usb_host_config *config;
-
- struct usb_host_config *actconfig;
- struct usb_host_endpoint *ep_in[16];
- struct usb_host_endpoint *ep_out[16];
-
- char **rawdescriptors;
-
- unsigned short bus_mA;
- u8 portnum;
- u8 level;
-
- unsigned can_submit:1;
- unsigned persist_enabled:1;
- unsigned have_langid:1;
- unsigned authorized:1;
- unsigned authenticated:1;
- unsigned wusb:1;
- int string_langid;
-
- /* static strings from the device */
- char *product;
- char *manufacturer;
- char *serial;
-
- struct list_head filelist;
-#ifdef CONFIG_USB_DEVICE_CLASS
- struct device *usb_classdev;
-#endif
-#ifdef CONFIG_USB_DEVICEFS
- struct dentry *usbfs_dentry;
-#endif
-
- int maxchild;
- struct usb_device *children[USB_MAXCHILDREN];
-
- u32 quirks;
- atomic_t urbnum;
-
- unsigned long active_duration;
-
-#ifdef CONFIG_PM
- unsigned long last_busy;
- int autosuspend_delay;
- unsigned long connect_time;
-
- unsigned do_remote_wakeup:1;
- unsigned reset_resume:1;
- unsigned autosuspend_disabled:1;
-#endif
- struct wusb_dev *wusb_dev;
-};
-#define to_usb_device(d) container_of(d, struct usb_device, dev)
-
-extern struct usb_device *usb_get_dev(struct usb_device *dev);
-extern void usb_put_dev(struct usb_device *dev);
-
-/* USB device locking */
-#define usb_lock_device(udev) device_lock(&(udev)->dev)
-#define usb_unlock_device(udev) device_unlock(&(udev)->dev)
-#define usb_trylock_device(udev) device_trylock(&(udev)->dev)
-extern int usb_lock_device_for_reset(struct usb_device *udev,
- const struct usb_interface *iface);
-
-/* USB port reset for device reinitialization */
-extern int usb_reset_device(struct usb_device *dev);
-extern void usb_queue_reset_device(struct usb_interface *dev);
-
-
-/* USB autosuspend and autoresume */
-#ifdef CONFIG_USB_SUSPEND
-extern void usb_enable_autosuspend(struct usb_device *udev);
-extern void usb_disable_autosuspend(struct usb_device *udev);
-
-extern int usb_autopm_get_interface(struct usb_interface *intf);
-extern void usb_autopm_put_interface(struct usb_interface *intf);
-extern int usb_autopm_get_interface_async(struct usb_interface *intf);
-extern void usb_autopm_put_interface_async(struct usb_interface *intf);
-extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
-extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
-
-static inline void usb_mark_last_busy(struct usb_device *udev)
-{
- udev->last_busy = jiffies;
-}
-
-#else
-
-static inline int usb_enable_autosuspend(struct usb_device *udev)
-{ return 0; }
-static inline int usb_disable_autosuspend(struct usb_device *udev)
-{ return 0; }
-
-static inline int usb_autopm_get_interface(struct usb_interface *intf)
-{ return 0; }
-static inline int usb_autopm_get_interface_async(struct usb_interface *intf)
-{ return 0; }
-
-static inline void usb_autopm_put_interface(struct usb_interface *intf)
-{ }
-static inline void usb_autopm_put_interface_async(struct usb_interface *intf)
-{ }
-static inline void usb_autopm_get_interface_no_resume(
- struct usb_interface *intf)
-{ }
-static inline void usb_autopm_put_interface_no_suspend(
- struct usb_interface *intf)
-{ }
-static inline void usb_mark_last_busy(struct usb_device *udev)
-{ }
-#endif
-
-/*-------------------------------------------------------------------------*/
-
-/* for drivers using iso endpoints */
-extern int usb_get_current_frame_number(struct usb_device *usb_dev);
-
-/* used these for multi-interface device registration */
-extern int usb_driver_claim_interface(struct usb_driver *driver,
- struct usb_interface *iface, void *priv);
-
-/**
- * usb_interface_claimed - returns true iff an interface is claimed
- * @iface: the interface being checked
- *
- * Returns true (nonzero) iff the interface is claimed, else false (zero).
- * Callers must own the driver model's usb bus readlock. So driver
- * probe() entries don't need extra locking, but other call contexts
- * may need to explicitly claim that lock.
- *
- */
-static inline int usb_interface_claimed(struct usb_interface *iface)
-{
- return (iface->dev.driver != NULL);
-}
-
-extern void usb_driver_release_interface(struct usb_driver *driver,
- struct usb_interface *iface);
-const struct usb_device_id *usb_match_id(struct usb_interface *interface,
- const struct usb_device_id *id);
-extern int usb_match_one_id(struct usb_interface *interface,
- const struct usb_device_id *id);
-
-extern struct usb_interface *usb_find_interface(struct usb_driver *drv,
- int minor);
-extern struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev,
- unsigned ifnum);
-extern struct usb_host_interface *usb_altnum_to_altsetting(
- const struct usb_interface *intf, unsigned int altnum);
-extern struct usb_host_interface *usb_find_alt_setting(
- struct usb_host_config *config,
- unsigned int iface_num,
- unsigned int alt_num);
-
-
-/**
- * usb_make_path - returns stable device path in the usb tree
- * @dev: the device whose path is being constructed
- * @buf: where to put the string
- * @size: how big is "buf"?
- *
- * Returns length of the string (> 0) or negative if size was too small.
- *
- * This identifier is intended to be "stable", reflecting physical paths in
- * hardware such as physical bus addresses for host controllers or ports on
- * USB hubs. That makes it stay the same until systems are physically
- * reconfigured, by re-cabling a tree of USB devices or by moving USB host
- * controllers. Adding and removing devices, including virtual root hubs
- * in host controller driver modules, does not change these path identifers;
- * neither does rebooting or re-enumerating. These are more useful identifiers
- * than changeable ("unstable") ones like bus numbers or device addresses.
- *
- * With a partial exception for devices connected to USB 2.0 root hubs, these
- * identifiers are also predictable. So long as the device tree isn't changed,
- * plugging any USB device into a given hub port always gives it the same path.
- * Because of the use of "companion" controllers, devices connected to ports on
- * USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are
- * high speed, and a different one if they are full or low speed.
- */
-static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
-{
- int actual;
- actual = snprintf(buf, size, "usb-%s-%s", dev->bus->bus_name,
- dev->devpath);
- return (actual >= (int)size) ? -1 : actual;
-}
-
-/*-------------------------------------------------------------------------*/
-
-#define USB_DEVICE_ID_MATCH_DEVICE \
- (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
-#define USB_DEVICE_ID_MATCH_DEV_RANGE \
- (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
-#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
- (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
-#define USB_DEVICE_ID_MATCH_DEV_INFO \
- (USB_DEVICE_ID_MATCH_DEV_CLASS | \
- USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \
- USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
-#define USB_DEVICE_ID_MATCH_INT_INFO \
- (USB_DEVICE_ID_MATCH_INT_CLASS | \
- USB_DEVICE_ID_MATCH_INT_SUBCLASS | \
- USB_DEVICE_ID_MATCH_INT_PROTOCOL)
-
-/**
- * USB_DEVICE - macro used to describe a specific usb device
- * @vend: the 16 bit USB Vendor ID
- * @prod: the 16 bit USB Product ID
- *
- * This macro is used to create a struct usb_device_id that matches a
- * specific device.
- */
-#define USB_DEVICE(vend,prod) \
- .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
- .idVendor = (vend), \
- .idProduct = (prod)
-/**
- * USB_DEVICE_VER - describe a specific usb device with a version range
- * @vend: the 16 bit USB Vendor ID
- * @prod: the 16 bit USB Product ID
- * @lo: the bcdDevice_lo value
- * @hi: the bcdDevice_hi value
- *
- * This macro is used to create a struct usb_device_id that matches a
- * specific device, with a version range.
- */
-#define USB_DEVICE_VER(vend, prod, lo, hi) \
- .match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \
- .idVendor = (vend), \
- .idProduct = (prod), \
- .bcdDevice_lo = (lo), \
- .bcdDevice_hi = (hi)
-
-/**
- * USB_DEVICE_INTERFACE_PROTOCOL - describe a usb device with a specific interface protocol
- * @vend: the 16 bit USB Vendor ID
- * @prod: the 16 bit USB Product ID
- * @pr: bInterfaceProtocol value
- *
- * This macro is used to create a struct usb_device_id that matches a
- * specific interface protocol of devices.
- */
-#define USB_DEVICE_INTERFACE_PROTOCOL(vend, prod, pr) \
- .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
- USB_DEVICE_ID_MATCH_INT_PROTOCOL, \
- .idVendor = (vend), \
- .idProduct = (prod), \
- .bInterfaceProtocol = (pr)
-
-/**
- * USB_DEVICE_INFO - macro used to describe a class of usb devices
- * @cl: bDeviceClass value
- * @sc: bDeviceSubClass value
- * @pr: bDeviceProtocol value
- *
- * This macro is used to create a struct usb_device_id that matches a
- * specific class of devices.
- */
-#define USB_DEVICE_INFO(cl, sc, pr) \
- .match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, \
- .bDeviceClass = (cl), \
- .bDeviceSubClass = (sc), \
- .bDeviceProtocol = (pr)
-
-/**
- * USB_INTERFACE_INFO - macro used to describe a class of usb interfaces
- * @cl: bInterfaceClass value
- * @sc: bInterfaceSubClass value
- * @pr: bInterfaceProtocol value
- *
- * This macro is used to create a struct usb_device_id that matches a
- * specific class of interfaces.
- */
-#define USB_INTERFACE_INFO(cl, sc, pr) \
- .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \
- .bInterfaceClass = (cl), \
- .bInterfaceSubClass = (sc), \
- .bInterfaceProtocol = (pr)
-
-/**
- * USB_DEVICE_AND_INTERFACE_INFO - describe a specific usb device with a class of usb interfaces
- * @vend: the 16 bit USB Vendor ID
- * @prod: the 16 bit USB Product ID
- * @cl: bInterfaceClass value
- * @sc: bInterfaceSubClass value
- * @pr: bInterfaceProtocol value
- *
- * This macro is used to create a struct usb_device_id that matches a
- * specific device with a specific class of interfaces.
- *
- * This is especially useful when explicitly matching devices that have
- * vendor specific bDeviceClass values, but standards-compliant interfaces.
- */
-#define USB_DEVICE_AND_INTERFACE_INFO(vend, prod, cl, sc, pr) \
- .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
- | USB_DEVICE_ID_MATCH_DEVICE, \
- .idVendor = (vend), \
- .idProduct = (prod), \
- .bInterfaceClass = (cl), \
- .bInterfaceSubClass = (sc), \
- .bInterfaceProtocol = (pr)
-
-/* ----------------------------------------------------------------------- */
-
-/* Stuff for dynamic usb ids */
-struct usb_dynids {
- spinlock_t lock;
- struct list_head list;
-};
-
-struct usb_dynid {
- struct list_head node;
- struct usb_device_id id;
-};
-
-extern ssize_t usb_store_new_id(struct usb_dynids *dynids,
- struct device_driver *driver,
- const char *buf, size_t count);
-
-/**
- * struct usbdrv_wrap - wrapper for driver-model structure
- * @driver: The driver-model core driver structure.
- * @for_devices: Non-zero for device drivers, 0 for interface drivers.
- */
-struct usbdrv_wrap {
- struct device_driver driver;
- int for_devices;
-};
-
-/**
- * struct usb_driver - identifies USB interface driver to usbcore
- * @name: The driver name should be unique among USB drivers,
- * and should normally be the same as the module name.
- * @probe: Called to see if the driver is willing to manage a particular
- * interface on a device. If it is, probe returns zero and uses
- * usb_set_intfdata() to associate driver-specific data with the
- * interface. It may also use usb_set_interface() to specify the
- * appropriate altsetting. If unwilling to manage the interface,
- * return -ENODEV, if genuine IO errors occured, an appropriate
- * negative errno value.
- * @disconnect: Called when the interface is no longer accessible, usually
- * because its device has been (or is being) disconnected or the
- * driver module is being unloaded.
- * @ioctl: Used for drivers that want to talk to userspace through
- * the "usbfs" filesystem. This lets devices provide ways to
- * expose information to user space regardless of where they
- * do (or don't) show up otherwise in the filesystem.
- * @suspend: Called when the device is going to be suspended by the system.
- * @resume: Called when the device is being resumed by the system.
- * @reset_resume: Called when the suspended device has been reset instead
- * of being resumed.
- * @pre_reset: Called by usb_reset_device() when the device
- * is about to be reset.
- * @post_reset: Called by usb_reset_device() after the device
- * has been reset
- * @id_table: USB drivers use ID table to support hotplugging.
- * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set
- * or your driver's probe function will never get called.
- * @dynids: used internally to hold the list of dynamically added device
- * ids for this driver.
- * @drvwrap: Driver-model core structure wrapper.
- * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be
- * added to this driver by preventing the sysfs file from being created.
- * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
- * for interfaces bound to this driver.
- * @soft_unbind: if set to 1, the USB core will not kill URBs and disable
- * endpoints before calling the driver's disconnect method.
- *
- * USB interface drivers must provide a name, probe() and disconnect()
- * methods, and an id_table. Other driver fields are optional.
- *
- * The id_table is used in hotplugging. It holds a set of descriptors,
- * and specialized data may be associated with each entry. That table
- * is used by both user and kernel mode hotplugging support.
- *
- * The probe() and disconnect() methods are called in a context where
- * they can sleep, but they should avoid abusing the privilege. Most
- * work to connect to a device should be done when the device is opened,
- * and undone at the last close. The disconnect code needs to address
- * concurrency issues with respect to open() and close() methods, as
- * well as forcing all pending I/O requests to complete (by unlinking
- * them as necessary, and blocking until the unlinks complete).
- */
-struct usb_driver {
- const char *name;
-
- int (*probe) (struct usb_interface *intf,
- const struct usb_device_id *id);
-
- void (*disconnect) (struct usb_interface *intf);
-
- int (*ioctl) (struct usb_interface *intf, unsigned int code,
- void *buf);
-
- int (*suspend) (struct usb_interface *intf, pm_message_t message);
- int (*resume) (struct usb_interface *intf);
- int (*reset_resume)(struct usb_interface *intf);
-
- int (*pre_reset)(struct usb_interface *intf);
- int (*post_reset)(struct usb_interface *intf);
-
- const struct usb_device_id *id_table;
-
- struct usb_dynids dynids;
- struct usbdrv_wrap drvwrap;
- unsigned int no_dynamic_id:1;
- unsigned int supports_autosuspend:1;
- unsigned int soft_unbind:1;
-};
-#define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
-
-/**
- * struct usb_device_driver - identifies USB device driver to usbcore
- * @name: The driver name should be unique among USB drivers,
- * and should normally be the same as the module name.
- * @probe: Called to see if the driver is willing to manage a particular
- * device. If it is, probe returns zero and uses dev_set_drvdata()
- * to associate driver-specific data with the device. If unwilling
- * to manage the device, return a negative errno value.
- * @disconnect: Called when the device is no longer accessible, usually
- * because it has been (or is being) disconnected or the driver's
- * module is being unloaded.
- * @suspend: Called when the device is going to be suspended by the system.
- * @resume: Called when the device is being resumed by the system.
- * @drvwrap: Driver-model core structure wrapper.
- * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
- * for devices bound to this driver.
- *
- * USB drivers must provide all the fields listed above except drvwrap.
- */
-struct usb_device_driver {
- const char *name;
-
- int (*probe) (struct usb_device *udev);
- void (*disconnect) (struct usb_device *udev);
-
- int (*suspend) (struct usb_device *udev, pm_message_t message);
- int (*resume) (struct usb_device *udev, pm_message_t message);
- struct usbdrv_wrap drvwrap;
- unsigned int supports_autosuspend:1;
-};
-#define to_usb_device_driver(d) container_of(d, struct usb_device_driver, \
- drvwrap.driver)
-
-extern struct bus_type usb_bus_type;
-
-/**
- * struct usb_class_driver - identifies a USB driver that wants to use the USB major number
- * @name: the usb class device name for this driver. Will show up in sysfs.
- * @fops: pointer to the struct file_operations of this driver.
- * @minor_base: the start of the minor range for this driver.
- *
- * This structure is used for the usb_register_dev() and
- * usb_unregister_dev() functions, to consolidate a number of the
- * parameters used for them.
- */
-struct usb_class_driver {
- char *name;
- const struct file_operations *fops;
- int minor_base;
-};
-
-/*
- * use these in module_init()/module_exit()
- * and don't forget MODULE_DEVICE_TABLE(usb, ...)
- */
-extern int usb_register_driver(struct usb_driver *, struct module *,
- const char *);
-static inline int usb_register(struct usb_driver *driver)
-{
- return usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
-}
-extern void usb_deregister(struct usb_driver *);
-
-extern int usb_register_device_driver(struct usb_device_driver *,
- struct module *);
-extern void usb_deregister_device_driver(struct usb_device_driver *);
-
-extern int usb_register_dev(struct usb_interface *intf,
- struct usb_class_driver *class_driver);
-extern void usb_deregister_dev(struct usb_interface *intf,
- struct usb_class_driver *class_driver);
-
-extern int usb_disabled(void);
-
-/* ----------------------------------------------------------------------- */
-
-/*
- * URB support, for asynchronous request completions
- */
-
-/*
- * urb->transfer_flags:
- *
- * Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb().
- */
-#define URB_SHORT_NOT_OK 0x0001 /* report short reads as errors */
-#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame
- * ignored */
-#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */
-#define URB_NO_SETUP_DMA_MAP 0x0008 /* urb->setup_dma valid on submit */
-#define URB_NO_FSBR 0x0020 /* UHCI-specific */
-#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */
-#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt
- * needed */
-#define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */
-
-/* The following flags are used internally by usbcore and HCDs */
-#define URB_DIR_IN 0x0200 /* Transfer from device to host */
-#define URB_DIR_OUT 0
-#define URB_DIR_MASK URB_DIR_IN
-
-#define URB_DMA_MAP_SINGLE 0x00010000 /* Non-scatter-gather mapping */
-#define URB_DMA_MAP_PAGE 0x00020000 /* HCD-unsupported S-G */
-#define URB_DMA_MAP_SG 0x00040000 /* HCD-supported S-G */
-#define URB_MAP_LOCAL 0x00080000 /* HCD-local-memory mapping */
-#define URB_SETUP_MAP_SINGLE 0x00100000 /* Setup packet DMA mapped */
-#define URB_SETUP_MAP_LOCAL 0x00200000 /* HCD-local setup packet */
-#define URB_DMA_SG_COMBINED 0x00400000 /* S-G entries were combined */
-
-struct usb_iso_packet_descriptor {
- unsigned int offset;
- unsigned int length; /* expected length */
- unsigned int actual_length;
- int status;
-};
-
-struct urb;
-
-struct usb_anchor {
- struct list_head urb_list;
- wait_queue_head_t wait;
- spinlock_t lock;
- unsigned int poisoned:1;
-};
-
-static inline void init_usb_anchor(struct usb_anchor *anchor)
-{
- INIT_LIST_HEAD(&anchor->urb_list);
- init_waitqueue_head(&anchor->wait);
- spin_lock_init(&anchor->lock);
-}
-
-typedef void (*usb_complete_t)(struct urb *);
-
-/**
- * struct urb - USB Request Block
- * @urb_list: For use by current owner of the URB.
- * @anchor_list: membership in the list of an anchor
- * @anchor: to anchor URBs to a common mooring
- * @ep: Points to the endpoint's data structure. Will eventually
- * replace @pipe.
- * @pipe: Holds endpoint number, direction, type, and more.
- * Create these values with the eight macros available;
- * usb_{snd,rcv}TYPEpipe(dev,endpoint), where the TYPE is "ctrl"
- * (control), "bulk", "int" (interrupt), or "iso" (isochronous).
- * For example usb_sndbulkpipe() or usb_rcvintpipe(). Endpoint
- * numbers range from zero to fifteen. Note that "in" endpoint two
- * is a different endpoint (and pipe) from "out" endpoint two.
- * The current configuration controls the existence, type, and
- * maximum packet size of any given endpoint.
- * @dev: Identifies the USB device to perform the request.
- * @status: This is read in non-iso completion functions to get the
- * status of the particular request. ISO requests only use it
- * to tell whether the URB was unlinked; detailed status for
- * each frame is in the fields of the iso_frame-desc.
- * @transfer_flags: A variety of flags may be used to affect how URB
- * submission, unlinking, or operation are handled. Different
- * kinds of URB can use different flags.
- * @transfer_buffer: This identifies the buffer to (or from) which
- * the I/O request will be performed (unless URB_NO_TRANSFER_DMA_MAP
- * is set). This buffer must be suitable for DMA; allocate it with
- * kmalloc() or equivalent. For transfers to "in" endpoints, contents
- * of this buffer will be modified. This buffer is used for the data
- * stage of control transfers.
- * @transfer_dma: When transfer_flags includes URB_NO_TRANSFER_DMA_MAP,
- * the device driver is saying that it provided this DMA address,
- * which the host controller driver should use in preference to the
- * transfer_buffer.
- * @transfer_buffer_length: How big is transfer_buffer. The transfer may
- * be broken up into chunks according to the current maximum packet
- * size for the endpoint, which is a function of the configuration
- * and is encoded in the pipe. When the length is zero, neither
- * transfer_buffer nor transfer_dma is used.
- * @actual_length: This is read in non-iso completion functions, and
- * it tells how many bytes (out of transfer_buffer_length) were
- * transferred. It will normally be the same as requested, unless
- * either an error was reported or a short read was performed.
- * The URB_SHORT_NOT_OK transfer flag may be used to make such
- * short reads be reported as errors.
- * @setup_packet: Only used for control transfers, this points to eight bytes
- * of setup data. Control transfers always start by sending this data
- * to the device. Then transfer_buffer is read or written, if needed.
- * @setup_dma: For control transfers with URB_NO_SETUP_DMA_MAP set, the
- * device driver has provided this DMA address for the setup packet.
- * The host controller driver should use this in preference to
- * setup_packet.
- * @start_frame: Returns the initial frame for isochronous transfers.
- * @number_of_packets: Lists the number of ISO transfer buffers.
- * @interval: Specifies the polling interval for interrupt or isochronous
- * transfers. The units are frames (milliseconds) for for full and low
- * speed devices, and microframes (1/8 millisecond) for highspeed ones.
- * @error_count: Returns the number of ISO transfers that reported errors.
- * @context: For use in completion functions. This normally points to
- * request-specific driver context.
- * @complete: Completion handler. This URB is passed as the parameter to the
- * completion function. The completion function may then do what
- * it likes with the URB, including resubmitting or freeing it.
- * @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to
- * collect the transfer status for each buffer.
- *
- * This structure identifies USB transfer requests. URBs must be allocated by
- * calling usb_alloc_urb() and freed with a call to usb_free_urb().
- * Initialization may be done using various usb_fill_*_urb() functions. URBs
- * are submitted using usb_submit_urb(), and pending requests may be canceled
- * using usb_unlink_urb() or usb_kill_urb().
- *
- * Data Transfer Buffers:
- *
- * Normally drivers provide I/O buffers allocated with kmalloc() or otherwise
- * taken from the general page pool. That is provided by transfer_buffer
- * (control requests also use setup_packet), and host controller drivers
- * perform a dma mapping (and unmapping) for each buffer transferred. Those
- * mapping operations can be expensive on some platforms (perhaps using a dma
- * bounce buffer or talking to an IOMMU),
- * although they're cheap on commodity x86 and ppc hardware.
- *
- * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags,
- * which tell the host controller driver that no such mapping is needed since
- * the device driver is DMA-aware. For example, a device driver might
- * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map().
- * When these transfer flags are provided, host controller drivers will
- * attempt to use the dma addresses found in the transfer_dma and/or
- * setup_dma fields rather than determining a dma address themselves. (Note
- * that transfer_buffer and setup_packet must still be set because not all
- * host controllers use DMA, nor do virtual root hubs).
- *
- * Initialization:
- *
- * All URBs submitted must initialize the dev, pipe, transfer_flags (may be
- * zero), and complete fields. All URBs must also initialize
- * transfer_buffer and transfer_buffer_length. They may provide the
- * URB_SHORT_NOT_OK transfer flag, indicating that short reads are
- * to be treated as errors; that flag is invalid for write requests.
- *
- * Bulk URBs may
- * use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers
- * should always terminate with a short packet, even if it means adding an
- * extra zero length packet.
- *
- * Control URBs must provide a setup_packet. The setup_packet and
- * transfer_buffer may each be mapped for DMA or not, independently of
- * the other. The transfer_flags bits URB_NO_TRANSFER_DMA_MAP and
- * URB_NO_SETUP_DMA_MAP indicate which buffers have already been mapped.
- * URB_NO_SETUP_DMA_MAP is ignored for non-control URBs.
- *
- * Interrupt URBs must provide an interval, saying how often (in milliseconds
- * or, for highspeed devices, 125 microsecond units)
- * to poll for transfers. After the URB has been submitted, the interval
- * field reflects how the transfer was actually scheduled.
- * The polling interval may be more frequent than requested.
- * For example, some controllers have a maximum interval of 32 milliseconds,
- * while others support intervals of up to 1024 milliseconds.
- * Isochronous URBs also have transfer intervals. (Note that for isochronous
- * endpoints, as well as high speed interrupt endpoints, the encoding of
- * the transfer interval in the endpoint descriptor is logarithmic.
- * Device drivers must convert that value to linear units themselves.)
- *
- * Isochronous URBs normally use the URB_ISO_ASAP transfer flag, telling
- * the host controller to schedule the transfer as soon as bandwidth
- * utilization allows, and then set start_frame to reflect the actual frame
- * selected during submission. Otherwise drivers must specify the start_frame
- * and handle the case where the transfer can't begin then. However, drivers
- * won't know how bandwidth is currently allocated, and while they can
- * find the current frame using usb_get_current_frame_number () they can't
- * know the range for that frame number. (Ranges for frame counter values
- * are HC-specific, and can go from 256 to 65536 frames from "now".)
- *
- * Isochronous URBs have a different data transfer model, in part because
- * the quality of service is only "best effort". Callers provide specially
- * allocated URBs, with number_of_packets worth of iso_frame_desc structures
- * at the end. Each such packet is an individual ISO transfer. Isochronous
- * URBs are normally queued, submitted by drivers to arrange that
- * transfers are at least double buffered, and then explicitly resubmitted
- * in completion handlers, so
- * that data (such as audio or video) streams at as constant a rate as the
- * host controller scheduler can support.
- *
- * Completion Callbacks:
- *
- * The completion callback is made in_interrupt(), and one of the first
- * things that a completion handler should do is check the status field.
- * The status field is provided for all URBs. It is used to report
- * unlinked URBs, and status for all non-ISO transfers. It should not
- * be examined before the URB is returned to the completion handler.
- *
- * The context field is normally used to link URBs back to the relevant
- * driver or request state.
- *
- * When the completion callback is invoked for non-isochronous URBs, the
- * actual_length field tells how many bytes were transferred. This field
- * is updated even when the URB terminated with an error or was unlinked.
- *
- * ISO transfer status is reported in the status and actual_length fields
- * of the iso_frame_desc array, and the number of errors is reported in
- * error_count. Completion callbacks for ISO transfers will normally
- * (re)submit URBs to ensure a constant transfer rate.
- *
- * Note that even fields marked "public" should not be touched by the driver
- * when the urb is owned by the hcd, that is, since the call to
- * usb_submit_urb() till the entry into the completion routine.
- */
-struct urb {
- /* private: usb core and host controller only fields in the urb */
- struct kref kref; /* reference count of the URB */
- void *hcpriv; /* private data for host controller */
- atomic_t use_count; /* concurrent submissions counter */
- atomic_t reject; /* submissions will fail */
- int unlinked; /* unlink error code */
-
- /* public: documented fields in the urb that can be used by drivers */
- struct list_head urb_list; /* list head for use by the urb's
- * current owner */
- struct list_head anchor_list; /* the URB may be anchored */
- struct usb_anchor *anchor;
- struct usb_device *dev; /* (in) pointer to associated device */
- struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */
- unsigned int pipe; /* (in) pipe information */
- int status; /* (return) non-ISO status */
- unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/
- void *transfer_buffer; /* (in) associated data buffer */
- dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */
- struct scatterlist *sg; /* (in) scatter gather buffer list */
- int num_sgs; /* (in) number of entries in the sg list */
- u32 transfer_buffer_length; /* (in) data buffer length */
- u32 actual_length; /* (return) actual transfer length */
- unsigned char *setup_packet; /* (in) setup packet (control only) */
- dma_addr_t setup_dma; /* (in) dma addr for setup_packet */
- int start_frame; /* (modify) start frame (ISO) */
- int number_of_packets; /* (in) number of ISO packets */
- int interval; /* (modify) transfer interval
- * (INT/ISO) */
- int error_count; /* (return) number of ISO errors */
- void *context; /* (in) context for completion */
- usb_complete_t complete; /* (in) completion routine */
- struct usb_iso_packet_descriptor iso_frame_desc[0];
- /* (in) ISO ONLY */
-};
-
-/* ----------------------------------------------------------------------- */
-
-/**
- * usb_fill_control_urb - initializes a control urb
- * @urb: pointer to the urb to initialize.
- * @dev: pointer to the struct usb_device for this urb.
- * @pipe: the endpoint pipe
- * @setup_packet: pointer to the setup_packet buffer
- * @transfer_buffer: pointer to the transfer buffer
- * @buffer_length: length of the transfer buffer
- * @complete_fn: pointer to the usb_complete_t function
- * @context: what to set the urb context to.
- *
- * Initializes a control urb with the proper information needed to submit
- * it to a device.
- */
-static inline void usb_fill_control_urb(struct urb *urb,
- struct usb_device *dev,
- unsigned int pipe,
- unsigned char *setup_packet,
- void *transfer_buffer,
- int buffer_length,
- usb_complete_t complete_fn,
- void *context)
-{
- urb->dev = dev;
- urb->pipe = pipe;
- urb->setup_packet = setup_packet;
- urb->transfer_buffer = transfer_buffer;
- urb->transfer_buffer_length = buffer_length;
- urb->complete = complete_fn;
- urb->context = context;
-}
-
-/**
- * usb_fill_bulk_urb - macro to help initialize a bulk urb
- * @urb: pointer to the urb to initialize.
- * @dev: pointer to the struct usb_device for this urb.
- * @pipe: the endpoint pipe
- * @transfer_buffer: pointer to the transfer buffer
- * @buffer_length: length of the transfer buffer
- * @complete_fn: pointer to the usb_complete_t function
- * @context: what to set the urb context to.
- *
- * Initializes a bulk urb with the proper information needed to submit it
- * to a device.
- */
-static inline void usb_fill_bulk_urb(struct urb *urb,
- struct usb_device *dev,
- unsigned int pipe,
- void *transfer_buffer,
- int buffer_length,
- usb_complete_t complete_fn,
- void *context)
-{
- urb->dev = dev;
- urb->pipe = pipe;
- urb->transfer_buffer = transfer_buffer;
- urb->transfer_buffer_length = buffer_length;
- urb->complete = complete_fn;
- urb->context = context;
-}
-
-/**
- * usb_fill_int_urb - macro to help initialize a interrupt urb
- * @urb: pointer to the urb to initialize.
- * @dev: pointer to the struct usb_device for this urb.
- * @pipe: the endpoint pipe
- * @transfer_buffer: pointer to the transfer buffer
- * @buffer_length: length of the transfer buffer
- * @complete_fn: pointer to the usb_complete_t function
- * @context: what to set the urb context to.
- * @interval: what to set the urb interval to, encoded like
- * the endpoint descriptor's bInterval value.
- *
- * Initializes a interrupt urb with the proper information needed to submit
- * it to a device.
- * Note that high speed interrupt endpoints use a logarithmic encoding of
- * the endpoint interval, and express polling intervals in microframes
- * (eight per millisecond) rather than in frames (one per millisecond).
- */
-static inline void usb_fill_int_urb(struct urb *urb,
- struct usb_device *dev,
- unsigned int pipe,
- void *transfer_buffer,
- int buffer_length,
- usb_complete_t complete_fn,
- void *context,
- int interval)
-{
- urb->dev = dev;
- urb->pipe = pipe;
- urb->transfer_buffer = transfer_buffer;
- urb->transfer_buffer_length = buffer_length;
- urb->complete = complete_fn;
- urb->context = context;
- if (dev->speed == USB_SPEED_HIGH)
- urb->interval = 1 << (interval - 1);
- else
- urb->interval = interval;
- urb->start_frame = -1;
-}
-
-extern void usb_init_urb(struct urb *urb);
-extern struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags);
-extern void usb_free_urb(struct urb *urb);
-#define usb_put_urb usb_free_urb
-extern struct urb *usb_get_urb(struct urb *urb);
-extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags);
-extern int usb_unlink_urb(struct urb *urb);
-extern void usb_kill_urb(struct urb *urb);
-extern void usb_poison_urb(struct urb *urb);
-extern void usb_unpoison_urb(struct urb *urb);
-extern void usb_kill_anchored_urbs(struct usb_anchor *anchor);
-extern void usb_poison_anchored_urbs(struct usb_anchor *anchor);
-extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor);
-extern void usb_unlink_anchored_urbs(struct usb_anchor *anchor);
-extern void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor);
-extern void usb_unanchor_urb(struct urb *urb);
-extern int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor,
- unsigned int timeout);
-extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor);
-extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor);
-extern int usb_anchor_empty(struct usb_anchor *anchor);
-
-/**
- * usb_urb_dir_in - check if an URB describes an IN transfer
- * @urb: URB to be checked
- *
- * Returns 1 if @urb describes an IN transfer (device-to-host),
- * otherwise 0.
- */
-static inline int usb_urb_dir_in(struct urb *urb)
-{
- return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_IN;
-}
-
-/**
- * usb_urb_dir_out - check if an URB describes an OUT transfer
- * @urb: URB to be checked
- *
- * Returns 1 if @urb describes an OUT transfer (host-to-device),
- * otherwise 0.
- */
-static inline int usb_urb_dir_out(struct urb *urb)
-{
- return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT;
-}
-
-void *usb_alloc_coherent(struct usb_device *dev, size_t size,
- gfp_t mem_flags, dma_addr_t *dma);
-void usb_free_coherent(struct usb_device *dev, size_t size,
- void *addr, dma_addr_t dma);
-
-/* Compatible macros while we switch over */
-static inline void *usb_buffer_alloc(struct usb_device *dev, size_t size,
- gfp_t mem_flags, dma_addr_t *dma)
-{
- return usb_alloc_coherent(dev, size, mem_flags, dma);
-}
-static inline void usb_buffer_free(struct usb_device *dev, size_t size,
- void *addr, dma_addr_t dma)
-{
- return usb_free_coherent(dev, size, addr, dma);
-}
-
-#if 0
-struct urb *usb_buffer_map(struct urb *urb);
-void usb_buffer_dmasync(struct urb *urb);
-void usb_buffer_unmap(struct urb *urb);
-#endif
-
-struct scatterlist;
-int usb_buffer_map_sg(const struct usb_device *dev, int is_in,
- struct scatterlist *sg, int nents);
-#if 0
-void usb_buffer_dmasync_sg(const struct usb_device *dev, int is_in,
- struct scatterlist *sg, int n_hw_ents);
-#endif
-void usb_buffer_unmap_sg(const struct usb_device *dev, int is_in,
- struct scatterlist *sg, int n_hw_ents);
-
-/*-------------------------------------------------------------------*
- * SYNCHRONOUS CALL SUPPORT *
- *-------------------------------------------------------------------*/
-
-extern int usb_control_msg(struct usb_device *dev, unsigned int pipe,
- __u8 request, __u8 requesttype, __u16 value, __u16 index,
- void *data, __u16 size, int timeout);
-extern int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
- void *data, int len, int *actual_length, int timeout);
-extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
- void *data, int len, int *actual_length,
- int timeout);
-
-/* wrappers around usb_control_msg() for the most common standard requests */
-extern int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
- unsigned char descindex, void *buf, int size);
-extern int usb_get_status(struct usb_device *dev,
- int type, int target, void *data);
-extern int usb_string(struct usb_device *dev, int index,
- char *buf, size_t size);
-
-/* wrappers that also update important state inside usbcore */
-extern int usb_clear_halt(struct usb_device *dev, int pipe);
-extern int usb_reset_configuration(struct usb_device *dev);
-extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
-extern void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr);
-
-/* this request isn't really synchronous, but it belongs with the others */
-extern int usb_driver_set_configuration(struct usb_device *udev, int config);
-
-/*
- * timeouts, in milliseconds, used for sending/receiving control messages
- * they typically complete within a few frames (msec) after they're issued
- * USB identifies 5 second timeouts, maybe more in a few cases, and a few
- * slow devices (like some MGE Ellipse UPSes) actually push that limit.
- */
-#define USB_CTRL_GET_TIMEOUT 5000
-#define USB_CTRL_SET_TIMEOUT 5000
-
-
-/**
- * struct usb_sg_request - support for scatter/gather I/O
- * @status: zero indicates success, else negative errno
- * @bytes: counts bytes transferred.
- *
- * These requests are initialized using usb_sg_init(), and then are used
- * as request handles passed to usb_sg_wait() or usb_sg_cancel(). Most
- * members of the request object aren't for driver access.
- *
- * The status and bytecount values are valid only after usb_sg_wait()
- * returns. If the status is zero, then the bytecount matches the total
- * from the request.
- *
- * After an error completion, drivers may need to clear a halt condition
- * on the endpoint.
- */
-struct usb_sg_request {
- int status;
- size_t bytes;
-
- /*
- * members below are private: to usbcore,
- * and are not provided for driver access!
- */
- spinlock_t lock;
-
- struct usb_device *dev;
- int pipe;
- struct scatterlist *sg;
- int nents;
-
- int entries;
- struct urb **urbs;
-
- int count;
- struct completion complete;
-};
-
-int usb_sg_init(
- struct usb_sg_request *io,
- struct usb_device *dev,
- unsigned pipe,
- unsigned period,
- struct scatterlist *sg,
- int nents,
- size_t length,
- gfp_t mem_flags
-);
-void usb_sg_cancel(struct usb_sg_request *io);
-void usb_sg_wait(struct usb_sg_request *io);
-
-
-/* ----------------------------------------------------------------------- */
-
-/*
- * For various legacy reasons, Linux has a small cookie that's paired with
- * a struct usb_device to identify an endpoint queue. Queue characteristics
- * are defined by the endpoint's descriptor. This cookie is called a "pipe",
- * an unsigned int encoded as:
- *
- * - direction: bit 7 (0 = Host-to-Device [Out],
- * 1 = Device-to-Host [In] ...
- * like endpoint bEndpointAddress)
- * - device address: bits 8-14 ... bit positions known to uhci-hcd
- * - endpoint: bits 15-18 ... bit positions known to uhci-hcd
- * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt,
- * 10 = control, 11 = bulk)
- *
- * Given the device address and endpoint descriptor, pipes are redundant.
- */
-
-/* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */
-/* (yet ... they're the values used by usbfs) */
-#define PIPE_ISOCHRONOUS 0
-#define PIPE_INTERRUPT 1
-#define PIPE_CONTROL 2
-#define PIPE_BULK 3
-
-#define usb_pipein(pipe) ((pipe) & USB_DIR_IN)
-#define usb_pipeout(pipe) (!usb_pipein(pipe))
-
-#define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f)
-#define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf)
-
-#define usb_pipetype(pipe) (((pipe) >> 30) & 3)
-#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
-#define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
-#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
-#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
-
-static inline unsigned int __create_pipe(struct usb_device *dev,
- unsigned int endpoint)
-{
- return (dev->devnum << 8) | (endpoint << 15);
-}
-
-/* Create various pipes... */
-#define usb_sndctrlpipe(dev,endpoint) \
- ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvctrlpipe(dev,endpoint) \
- ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-#define usb_sndisocpipe(dev,endpoint) \
- ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvisocpipe(dev,endpoint) \
- ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-#define usb_sndbulkpipe(dev,endpoint) \
- ((PIPE_BULK << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvbulkpipe(dev,endpoint) \
- ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-#define usb_sndintpipe(dev,endpoint) \
- ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvintpipe(dev,endpoint) \
- ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-
-/*-------------------------------------------------------------------------*/
-
-static inline __u16
-usb_maxpacket(struct usb_device *udev, int pipe, int is_out)
-{
- struct usb_host_endpoint *ep;
- unsigned epnum = usb_pipeendpoint(pipe);
-
- if (is_out) {
- WARN_ON(usb_pipein(pipe));
- ep = udev->ep_out[epnum];
- } else {
- WARN_ON(usb_pipeout(pipe));
- ep = udev->ep_in[epnum];
- }
- if (!ep)
- return 0;
-
- /* NOTE: only 0x07ff bits are for packet size... */
- return le16_to_cpu(ep->desc.wMaxPacketSize);
-}
-
-/* ----------------------------------------------------------------------- */
-
-/* Events from the usb core */
-#define USB_DEVICE_ADD 0x0001
-#define USB_DEVICE_REMOVE 0x0002
-#define USB_BUS_ADD 0x0003
-#define USB_BUS_REMOVE 0x0004
-extern void usb_register_notify(struct notifier_block *nb);
-extern void usb_unregister_notify(struct notifier_block *nb);
-
-#ifdef DEBUG
-#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \
- __FILE__ , ## arg)
-#else
-#define dbg(format, arg...) do {} while (0)
-#endif
-
-#define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \
- format "\n" , ## arg)
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch b/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
index 3c0f44cf4..abf2c625e 100644
--- a/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
+++ b/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
@@ -6119,15 +6119,6 @@
}
--- linux-2.6.30.9/drivers/staging/Kconfig 2009-10-05 18:38:08.000000000 +0300
+++ linux-2.6.30.9-rsdk/drivers/staging/Kconfig 2013-05-02 01:47:55.708226898 +0300
-@@ -41,6 +41,8 @@ config STAGING_EXCLUDE_BUILD
-
- if !STAGING_EXCLUDE_BUILD
-
-+source "drivers/staging/rtk_uWiFi/Kconfig"
-+
- source "drivers/staging/et131x/Kconfig"
-
- source "drivers/staging/slicoss/Kconfig"
@@ -85,6 +87,8 @@ source "drivers/staging/altpciechdma/Kco
source "drivers/staging/rtl8187se/Kconfig"
@@ -6139,15 +6130,6 @@
source "drivers/staging/mimio/Kconfig"
--- linux-2.6.30.9/drivers/staging/Makefile 2009-10-05 18:38:08.000000000 +0300
+++ linux-2.6.30.9-rsdk/drivers/staging/Makefile 2013-05-02 01:47:55.708226898 +0300
-@@ -2,7 +2,7 @@
-
- # fix for build system bug...
- obj-$(CONFIG_STAGING) += staging.o
--
-+obj-$(CONFIG_USB_UWIFI_HOST) += rtk_uWiFi/
- obj-$(CONFIG_ET131X) += et131x/
- obj-$(CONFIG_SLICOSS) += slicoss/
- obj-$(CONFIG_SXG) += sxg/
@@ -25,6 +25,7 @@ obj-$(CONFIG_ASUS_OLED) += asus_oled/
obj-$(CONFIG_PANEL) += panel/
obj-$(CONFIG_ALTERA_PCIE_CHDMA) += altpciechdma/
diff --git a/target/linux/realtek/patches-2.6.30/9993-Makefile-vmlinux-path.patch b/target/linux/realtek/patches-2.6.30/9993-Makefile-vmlinux-path.patch
new file mode 100644
index 000000000..3b91c9717
--- /dev/null
+++ b/target/linux/realtek/patches-2.6.30/9993-Makefile-vmlinux-path.patch
@@ -0,0 +1,14 @@
+--- a/Makefile 2009-10-05 18:38:08.000000000 +0300
++++ b/Makefile 2013-09-13 18:04:16.832665819 +0300
+@@ -696,7 +696,11 @@
+ vmlinux-init := $(head-y) $(init-y)
+ vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
+ vmlinux-all := $(vmlinux-init) $(vmlinux-main)
++ifneq ($(CONFIG_RTL_819X),)
++vmlinux-lds := arch/$(SRCARCH)/bsp/vmlinux.lds
++else
+ vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds
++endif
+ export KBUILD_VMLINUX_OBJS := $(vmlinux-all)
+
+ # Rule to link vmlinux - also used during CONFIG_KALLSYMS
diff --git a/target/linux/realtek/patches-2.6.30/9993-linux-Makefile-from-rsdk-3.2.4.patch b/target/linux/realtek/patches-2.6.30/9993-linux-Makefile-from-rsdk-3.2.4.patch
deleted file mode 100644
index fb0139d13..000000000
--- a/target/linux/realtek/patches-2.6.30/9993-linux-Makefile-from-rsdk-3.2.4.patch
+++ /dev/null
@@ -1,324 +0,0 @@
---- linux-2.6.30.9/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/Makefile 2013-05-02 01:47:49.297227417 +0300
-@@ -2,7 +2,7 @@
- PATCHLEVEL = 6
- SUBLEVEL = 30
- EXTRAVERSION = .9
--NAME = Man-Eating Seals of Antiquity
-+NAME = ON748BDD
-
- # *DOCUMENTATION*
- # To see a list of typical targets execute "make help"
-@@ -159,18 +159,6 @@
- export srctree objtree VPATH TOPDIR
-
-
--# SUBARCH tells the usermode build what the underlying arch is. That is set
--# first, and if a usermode build is happening, the "ARCH=um" on the command
--# line overrides the setting of ARCH below. If a native build is happening,
--# then ARCH is assigned, getting whatever value it gets normally, and
--# SUBARCH is subsequently ignored.
--
--SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-- -e s/arm.*/arm/ -e s/sa110/arm/ \
-- -e s/s390x/s390/ -e s/parisc64/parisc/ \
-- -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-- -e s/sh[234].*/sh/ )
--
- # Cross compiling and selecting different set of gcc/bin-utils
- # ---------------------------------------------------------------------------
- #
-@@ -189,41 +177,23 @@
- # Alternatively CROSS_COMPILE can be set in the environment.
- # Default value for CROSS_COMPILE is not to prefix executables
- # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
--export KBUILD_BUILDHOST := $(SUBARCH)
--ARCH ?= $(SUBARCH)
--CROSS_COMPILE ?=
--
--# Architecture as present in compile.h
--UTS_MACHINE := $(ARCH)
--SRCARCH := $(ARCH)
--
--# Additional ARCH settings for x86
--ifeq ($(ARCH),i386)
-- SRCARCH := x86
--endif
--ifeq ($(ARCH),x86_64)
-- SRCARCH := x86
--endif
-
--# Additional ARCH settings for sparc
--ifeq ($(ARCH),sparc64)
-- SRCARCH := sparc
--endif
-+ARCH := rlx
-+#ARCH := mips
-+UTS_MACHINE := $(ARCH)
-+SRCARCH := $(ARCH)
-+SUBARCH := $(ARCH)
-+ARCH_VMLINUX := arch/$(ARCH)/bsp/vmlinux.lds
-+#ARCH_VMLINUX := arch/$(ARCH)/kernel/vmlinux.lds
-
--# Additional ARCH settings for sh
--ifeq ($(ARCH),sh64)
-- SRCARCH := sh
--endif
-+CROSS_COMPILE ?= rsdk-linux-
-
--# Where to locate arch specific headers
--hdr-arch := $(SRCARCH)
--
--ifeq ($(ARCH),m68knommu)
-- hdr-arch := m68k
--endif
-+# Architecture as present in compile.h
-
- KCONFIG_CONFIG ?= .config
-
-+export KBUILD_BUILDHOST := $(ARCH)
-+
- # SHELL used by kbuild
- CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
- else if [ -x /bin/bash ]; then echo /bin/bash; \
-@@ -344,7 +314,7 @@
- # Needed to be compatible with the O= option
- LINUXINCLUDE := -Iinclude \
- $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \
-- -I$(srctree)/arch/$(hdr-arch)/include \
-+ -I$(srctree)/arch/$(ARCH)/include \
- -include include/linux/autoconf.h
-
- KBUILD_CPPFLAGS := -D__KERNEL__
-@@ -479,6 +449,19 @@
- net-y := net/
- libs-y := lib/
- core-y := usr/
-+
-+include .config
-+
-+ifeq ($(CONFIG_RTK_VOIP),y)
-+drivers-y += rtk_voip/
-+endif
-+ifeq ($(CONFIG_AUDIOCODES_VOIP),y)
-+drivers-y += acmw_lx/
-+endif
-+
-+ifeq ($(CONFIG_USB_UWIFI_HOST),y)
-+UWIFI_INCLUDED = 1
-+endif
- endif # KBUILD_EXTMOD
-
- ifeq ($(dot-config),1)
-@@ -499,6 +482,8 @@
- # we execute the config step to be sure to catch updated Kconfig files
- include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
- $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
-+
-+ictest-$(CONFIG_RTL_ICTEST) := ictestbsp/
- else
- # external modules needs include/linux/autoconf.h and include/config/auto.conf
- # but do not care if they are up-to-date. Use auto.conf to trigger the test
-@@ -651,7 +636,7 @@
-
- vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
- $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-- $(net-y) $(net-m) $(libs-y) $(libs-m)))
-+ $(net-y) $(net-m) $(ictest-y) $(libs-y) $(libs-m)))
-
- vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
- $(init-n) $(init-) \
-@@ -662,6 +647,7 @@
- core-y := $(patsubst %/, %/built-in.o, $(core-y))
- drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
- net-y := $(patsubst %/, %/built-in.o, $(net-y))
-+ictest-y := $(patsubst %/, %/built-in.o, $(ictest-y))
- libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
- libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
- libs-y := $(libs-y1) $(libs-y2)
-@@ -694,9 +680,9 @@
- # System.map is generated to document addresses of all kernel symbols
-
- vmlinux-init := $(head-y) $(init-y)
--vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
-+vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) $(ictest-y)
- vmlinux-all := $(vmlinux-init) $(vmlinux-main)
--vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds
-+vmlinux-lds := $(ARCH_VMLINUX)
- export KBUILD_VMLINUX_OBJS := $(vmlinux-all)
-
- # Rule to link vmlinux - also used during CONFIG_KALLSYMS
-@@ -976,7 +962,7 @@
- prepare2: prepare3 outputmakefile
-
- prepare1: prepare2 include/linux/version.h include/linux/utsrelease.h \
-- include/asm include/config/auto.conf
-+ include/asm include/config/auto.conf ictestbsp_link
- $(cmd_crmodverdir)
-
- archprepare: prepare1 scripts_basic
-@@ -985,8 +971,27 @@
- $(Q)$(MAKE) $(build)=.
- $(Q)$(MAKE) $(build)=. missing-syscalls
-
-+prepare_uWiFi:
-+ rm -f ./include/linux/pm.h
-+ rm -f ./include/linux/device.h
-+ rm -f ./include/linux/pm_runtime.h
-+ rm -f ./include/linux/usb.h
-+ifeq ($(UWIFI_INCLUDED),1)
-+ echo "<<<Apply uWiFi USB subsystem>>>"
-+ cp -p ./drivers/staging/rtk_uWiFi/rtk_uWiFi_4181.obj ./drivers/staging/rtk_uWiFi/uWiFi.o
-+ cp -p ./include/linux/device_uWiFi.h ./include/linux/device.h
-+ cp -p ./include/linux/pm_uWiFi.h ./include/linux/pm.h
-+ cp -p ./include/linux/pm_runtime_uWiFi.h ./include/linux/pm_runtime.h
-+ cp -p ./include/linux/usb_uWiFi.h ./include/linux/usb.h
-+else
-+ echo "<<<Apply Orig USB subsystem>>>"
-+ cp -p ./include/linux/device_sdk_orig.h ./include/linux/device.h
-+ cp -p ./include/linux/pm_sdk_orig.h ./include/linux/pm.h
-+ cp -p ./include/linux/usb_sdk_orig.h ./include/linux/usb.h
-+endif
-+
- # All the preparing..
--prepare: prepare0
-+prepare: prepare_uWiFi prepare0
-
- # Leave this as default for preprocessing vmlinux.lds.S, which is now
- # done in arch/$(ARCH)/kernel/Makefile
-@@ -1029,6 +1034,18 @@
- $(Q)$(check-symlink)
- $(Q)$(create-symlink)
-
-+define create-symlink-ictestbsp
-+ if [ ! -L ictestbsp ]; then \
-+ echo ' SYMLINK ictestbsp -> ../../../ICTest/bsp/'; \
-+ ln -fsn ../../../ICTest/bsp/ ictestbsp; \
-+ fi
-+endef
-+
-+ictestbsp_link: FORCE
-+ifeq ($(CONFIG_RTL_ICTEST),y)
-+ @$(create-symlink-ictestbsp)
-+endif
-+
- # Generate some files
- # ---------------------------------------------------------------------------
-
-@@ -1086,11 +1103,11 @@
- # Find out where the Kbuild file is located to support
- # arch/$(ARCH)/include/asm
- hdr-dir = $(strip \
-- $(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild), \
-- arch/$(hdr-arch)/include/asm, include/asm-$(hdr-arch)))
-+ $(if $(wildcard $(srctree)/arch/$(ARCH)/include/asm/Kbuild), \
-+ arch/$(ARCH)/include/asm, include/asm-$(ARCH)))
-
- # If we do an all arch process set dst to asm-$(hdr-arch)
--hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
-+hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(ARCH), dst=include/asm)
-
- PHONY += __headers
- __headers: include/linux/version.h scripts_basic FORCE
-@@ -1103,7 +1120,7 @@
- PHONY += headers_install
- headers_install: __headers
- $(if $(wildcard $(srctree)/$(hdr-dir)/Kbuild),, \
-- $(error Headers not exportable for the $(SRCARCH) architecture))
-+ $(error Headers not exportable for the $(ARCH) architecture))
- $(Q)$(MAKE) $(hdr-inst)=include
- $(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst)
-
-@@ -1180,11 +1197,8 @@
-
- modules modules_install: FORCE
- @echo
-- @echo "The present kernel configuration has modules disabled."
-- @echo "Type 'make config' and enable loadable module support."
-- @echo "Then build a kernel with module support enabled."
-+ @echo "modules disabled in current config, skipping ..."
- @echo
-- @exit 1
-
- endif # CONFIG_MODULES
-
-@@ -1216,7 +1230,7 @@
-
- PHONY += $(clean-dirs) clean archclean
- $(clean-dirs):
-- $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
-+ - - - $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
-
- clean: archclean $(clean-dirs)
- $(call cmd,rmdirs)
-@@ -1227,6 +1241,8 @@
- -o -name '*.symtypes' -o -name 'modules.order' \
- -o -name 'Module.markers' -o -name '.tmp_*.o.*' \) \
- -type f -print | xargs rm -f
-+ rm -f ./arch/rlx/bsp/*.o
-+ rm -f ./arch/rlx/bsp/.*.cmd
-
- # mrproper - Delete all generated files, including .config
- #
-@@ -1269,9 +1285,9 @@
- # Brief documentation of the typical targets used
- # ---------------------------------------------------------------------------
-
--boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
-+boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig)
- boards := $(notdir $(boards))
--board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
-+board-dirs := $(dir $(wildcard $(srctree)/arch/$(ARCH)/configs/*/*_defconfig))
- board-dirs := $(sort $(notdir $(board-dirs:/=)))
-
- help:
-@@ -1317,9 +1333,9 @@
- @echo 'Documentation targets:'
- @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
- @echo ''
-- @echo 'Architecture specific targets ($(SRCARCH)):'
-+ @echo 'Architecture specific targets ($(ARCH)):'
- @$(if $(archhelp),$(archhelp),\
-- echo ' No architecture specific help defined for $(SRCARCH)')
-+ echo ' No architecture specific help defined for $(ARCH)')
- @echo ''
- @$(if $(boards), \
- $(foreach b, $(boards), \
-@@ -1345,10 +1361,10 @@
-
- help-boards: $(help-board-dirs)
-
--boards-per-dir = $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig))
-+boards-per-dir = $(notdir $(wildcard $(srctree)/arch/$(ARCH)/configs/$*/*_defconfig))
-
- $(help-board-dirs): help-%:
-- @echo 'Architecture specific targets ($(SRCARCH) $*):'
-+ @echo 'Architecture specific targets ($(ARCH) $*):'
- @$(if $(boards-per-dir), \
- $(foreach b, $(boards-per-dir), \
- printf " %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
-@@ -1419,7 +1435,7 @@
-
- PHONY += $(clean-dirs) clean
- $(clean-dirs):
-- $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
-+ - - - $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
-
- clean: rm-dirs := $(MODVERDIR)
- clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \
-@@ -1480,15 +1496,7 @@
-
- PHONY += checkstack kernelrelease kernelversion
-
--# UML needs a little special treatment here. It wants to use the host
--# toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone
--# else wants $(ARCH), including people doing cross-builds, which means
--# that $(SUBARCH) doesn't work here.
--ifeq ($(ARCH), um)
--CHECKSTACK_ARCH := $(SUBARCH)
--else
- CHECKSTACK_ARCH := $(ARCH)
--endif
- checkstack:
- $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
- $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)