Merge commit 'v2.6.29-rc1' into timers/urgent
This commit is contained in:
@@ -371,3 +371,5 @@ unifdef-y += xattr.h
|
||||
unifdef-y += xfrm.h
|
||||
|
||||
objhdr-y += version.h
|
||||
header-y += wimax.h
|
||||
header-y += wimax/
|
||||
|
@@ -131,22 +131,6 @@ extern int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity);
|
||||
*/
|
||||
void acpi_unregister_gsi (u32 gsi);
|
||||
|
||||
struct acpi_prt_entry {
|
||||
struct list_head node;
|
||||
struct acpi_pci_id id;
|
||||
u8 pin;
|
||||
struct {
|
||||
acpi_handle handle;
|
||||
u32 index;
|
||||
} link;
|
||||
u32 irq;
|
||||
};
|
||||
|
||||
struct acpi_prt_list {
|
||||
int count;
|
||||
struct list_head entries;
|
||||
};
|
||||
|
||||
struct pci_dev;
|
||||
|
||||
int acpi_pci_irq_enable (struct pci_dev *dev);
|
||||
@@ -270,6 +254,7 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n,
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
void __init acpi_no_s4_hw_signature(void);
|
||||
void __init acpi_old_suspend_ordering(void);
|
||||
void __init acpi_s4_no_nvs(void);
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
#else /* CONFIG_ACPI */
|
||||
|
||||
|
25
include/linux/async.h
Normal file
25
include/linux/async.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* async.h: Asynchronous function calls for boot performance
|
||||
*
|
||||
* (C) Copyright 2009 Intel Corporation
|
||||
* Author: Arjan van de Ven <arjan@linux.intel.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; version 2
|
||||
* of the License.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
typedef u64 async_cookie_t;
|
||||
typedef void (async_func_ptr) (void *data, async_cookie_t cookie);
|
||||
|
||||
extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data);
|
||||
extern async_cookie_t async_schedule_special(async_func_ptr *ptr, void *data, struct list_head *list);
|
||||
extern void async_synchronize_full(void);
|
||||
extern void async_synchronize_full_special(struct list_head *list);
|
||||
extern void async_synchronize_cookie(async_cookie_t cookie);
|
||||
extern void async_synchronize_cookie_special(async_cookie_t cookie, struct list_head *list);
|
||||
|
@@ -59,9 +59,7 @@ enum async_tx_flags {
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DMA_ENGINE
|
||||
void async_tx_issue_pending_all(void);
|
||||
enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
|
||||
void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx);
|
||||
#define async_tx_issue_pending_all dma_issue_pending_all
|
||||
#ifdef CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL
|
||||
#include <asm/async_tx.h>
|
||||
#else
|
||||
@@ -77,19 +75,6 @@ static inline void async_tx_issue_pending_all(void)
|
||||
do { } while (0);
|
||||
}
|
||||
|
||||
static inline enum dma_status
|
||||
dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
return DMA_SUCCESS;
|
||||
}
|
||||
|
||||
static inline void
|
||||
async_tx_run_dependencies(struct dma_async_tx_descriptor *tx,
|
||||
struct dma_chan *host_chan)
|
||||
{
|
||||
do { } while (0);
|
||||
}
|
||||
|
||||
static inline struct dma_chan *
|
||||
async_tx_find_channel(struct dma_async_tx_descriptor *depend_tx,
|
||||
enum dma_transaction_type tx_type, struct page **dst, int dst_count,
|
||||
|
39
include/linux/atmel-mci.h
Normal file
39
include/linux/atmel-mci.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef __LINUX_ATMEL_MCI_H
|
||||
#define __LINUX_ATMEL_MCI_H
|
||||
|
||||
#define ATMEL_MCI_MAX_NR_SLOTS 2
|
||||
|
||||
#include <linux/dw_dmac.h>
|
||||
|
||||
/**
|
||||
* struct mci_slot_pdata - board-specific per-slot configuration
|
||||
* @bus_width: Number of data lines wired up the slot
|
||||
* @detect_pin: GPIO pin wired to the card detect switch
|
||||
* @wp_pin: GPIO pin wired to the write protect sensor
|
||||
*
|
||||
* If a given slot is not present on the board, @bus_width should be
|
||||
* set to 0. The other fields are ignored in this case.
|
||||
*
|
||||
* Any pins that aren't available should be set to a negative value.
|
||||
*
|
||||
* Note that support for multiple slots is experimental -- some cards
|
||||
* might get upset if we don't get the clock management exactly right.
|
||||
* But in most cases, it should work just fine.
|
||||
*/
|
||||
struct mci_slot_pdata {
|
||||
unsigned int bus_width;
|
||||
int detect_pin;
|
||||
int wp_pin;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mci_platform_data - board-specific MMC/SDcard configuration
|
||||
* @dma_slave: DMA slave interface to use in data transfers.
|
||||
* @slot: Per-slot configuration data.
|
||||
*/
|
||||
struct mci_platform_data {
|
||||
struct dw_dma_slave dma_slave;
|
||||
struct mci_slot_pdata slot[ATMEL_MCI_MAX_NR_SLOTS];
|
||||
};
|
||||
|
||||
#endif /* __LINUX_ATMEL_MCI_H */
|
@@ -23,16 +23,16 @@
|
||||
#define AT_PLATFORM 15 /* string identifying CPU for optimizations */
|
||||
#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */
|
||||
#define AT_CLKTCK 17 /* frequency at which times() increments */
|
||||
|
||||
/* AT_* values 18 through 22 are reserved */
|
||||
#define AT_SECURE 23 /* secure mode boolean */
|
||||
|
||||
#define AT_BASE_PLATFORM 24 /* string identifying real platform, may
|
||||
* differ from AT_PLATFORM. */
|
||||
#define AT_RANDOM 25 /* address of 16 random bytes */
|
||||
|
||||
#define AT_EXECFN 31 /* filename of program */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define AT_VECTOR_SIZE_BASE 18 /* NEW_AUX_ENT entries in auxiliary table */
|
||||
#define AT_VECTOR_SIZE_BASE 19 /* NEW_AUX_ENT entries in auxiliary table */
|
||||
/* number of "#define AT_.*" above, minus {AT_NULL, AT_IGNORE, AT_NOTELF} */
|
||||
#endif
|
||||
|
||||
|
@@ -31,6 +31,10 @@ struct backlight_device;
|
||||
struct fb_info;
|
||||
|
||||
struct backlight_ops {
|
||||
unsigned int options;
|
||||
|
||||
#define BL_CORE_SUSPENDRESUME (1 << 0)
|
||||
|
||||
/* Notify the backlight driver some property has changed */
|
||||
int (*update_status)(struct backlight_device *);
|
||||
/* Return the current backlight brightness (accounting for power,
|
||||
@@ -51,7 +55,19 @@ struct backlight_properties {
|
||||
modes; 4: full off), see FB_BLANK_XXX */
|
||||
int power;
|
||||
/* FB Blanking active? (values as for power) */
|
||||
/* Due to be removed, please use (state & BL_CORE_FBBLANK) */
|
||||
int fb_blank;
|
||||
/* Flags used to signal drivers of state changes */
|
||||
/* Upper 4 bits are reserved for driver internal use */
|
||||
unsigned int state;
|
||||
|
||||
#define BL_CORE_SUSPENDED (1 << 0) /* backlight is suspended */
|
||||
#define BL_CORE_FBBLANK (1 << 1) /* backlight is under an fb blank event */
|
||||
#define BL_CORE_DRIVER4 (1 << 28) /* reserved for driver specific use */
|
||||
#define BL_CORE_DRIVER3 (1 << 29) /* reserved for driver specific use */
|
||||
#define BL_CORE_DRIVER2 (1 << 30) /* reserved for driver specific use */
|
||||
#define BL_CORE_DRIVER1 (1 << 31) /* reserved for driver specific use */
|
||||
|
||||
};
|
||||
|
||||
struct backlight_device {
|
||||
|
@@ -690,6 +690,8 @@ struct rq_map_data {
|
||||
struct page **pages;
|
||||
int page_order;
|
||||
int nr_entries;
|
||||
unsigned long offset;
|
||||
int null_mapped;
|
||||
};
|
||||
|
||||
struct req_iterator {
|
||||
|
@@ -171,7 +171,7 @@ void __wait_on_buffer(struct buffer_head *);
|
||||
wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
|
||||
int fsync_bdev(struct block_device *);
|
||||
struct super_block *freeze_bdev(struct block_device *);
|
||||
void thaw_bdev(struct block_device *, struct super_block *);
|
||||
int thaw_bdev(struct block_device *, struct super_block *);
|
||||
int fsync_super(struct super_block *);
|
||||
int fsync_no_super(struct block_device *);
|
||||
struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block,
|
||||
@@ -346,6 +346,15 @@ static inline int remove_inode_buffers(struct inode *inode) { return 1; }
|
||||
static inline int sync_mapping_buffers(struct address_space *mapping) { return 0; }
|
||||
static inline void invalidate_bdev(struct block_device *bdev) {}
|
||||
|
||||
static inline struct super_block *freeze_bdev(struct block_device *sb)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_BLOCK */
|
||||
#endif /* _LINUX_BUFFER_HEAD_H */
|
||||
|
@@ -19,7 +19,7 @@
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
#define CAN_VERSION "20081130"
|
||||
#define CAN_VERSION "20090105"
|
||||
|
||||
/* increment this number each time you change some user-space interface */
|
||||
#define CAN_ABI_VERSION "8"
|
||||
|
@@ -52,9 +52,9 @@ struct cgroup_subsys_state {
|
||||
* hierarchy structure */
|
||||
struct cgroup *cgroup;
|
||||
|
||||
/* State maintained by the cgroup system to allow
|
||||
* subsystems to be "busy". Should be accessed via css_get()
|
||||
* and css_put() */
|
||||
/* State maintained by the cgroup system to allow subsystems
|
||||
* to be "busy". Should be accessed via css_get(),
|
||||
* css_tryget() and and css_put(). */
|
||||
|
||||
atomic_t refcnt;
|
||||
|
||||
@@ -64,11 +64,14 @@ struct cgroup_subsys_state {
|
||||
/* bits in struct cgroup_subsys_state flags field */
|
||||
enum {
|
||||
CSS_ROOT, /* This CSS is the root of the subsystem */
|
||||
CSS_REMOVED, /* This CSS is dead */
|
||||
};
|
||||
|
||||
/*
|
||||
* Call css_get() to hold a reference on the cgroup;
|
||||
*
|
||||
* Call css_get() to hold a reference on the css; it can be used
|
||||
* for a reference obtained via:
|
||||
* - an existing ref-counted reference to the css
|
||||
* - task->cgroups for a locked task
|
||||
*/
|
||||
|
||||
static inline void css_get(struct cgroup_subsys_state *css)
|
||||
@@ -77,9 +80,32 @@ static inline void css_get(struct cgroup_subsys_state *css)
|
||||
if (!test_bit(CSS_ROOT, &css->flags))
|
||||
atomic_inc(&css->refcnt);
|
||||
}
|
||||
|
||||
static inline bool css_is_removed(struct cgroup_subsys_state *css)
|
||||
{
|
||||
return test_bit(CSS_REMOVED, &css->flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call css_tryget() to take a reference on a css if your existing
|
||||
* (known-valid) reference isn't already ref-counted. Returns false if
|
||||
* the css has been destroyed.
|
||||
*/
|
||||
|
||||
static inline bool css_tryget(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (test_bit(CSS_ROOT, &css->flags))
|
||||
return true;
|
||||
while (!atomic_inc_not_zero(&css->refcnt)) {
|
||||
if (test_bit(CSS_REMOVED, &css->flags))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* css_put() should be called to release a reference taken by
|
||||
* css_get()
|
||||
* css_get() or css_tryget()
|
||||
*/
|
||||
|
||||
extern void __css_put(struct cgroup_subsys_state *css);
|
||||
@@ -116,7 +142,7 @@ struct cgroup {
|
||||
struct list_head children; /* my children */
|
||||
|
||||
struct cgroup *parent; /* my parent */
|
||||
struct dentry *dentry; /* cgroup fs entry */
|
||||
struct dentry *dentry; /* cgroup fs entry, RCU protected */
|
||||
|
||||
/* Private pointers for each registered subsystem */
|
||||
struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
|
||||
@@ -145,6 +171,9 @@ struct cgroup {
|
||||
int pids_use_count;
|
||||
/* Length of the current tasks_pids array */
|
||||
int pids_length;
|
||||
|
||||
/* For RCU-protected deletion */
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
/* A css_set is a structure holding pointers to a set of
|
||||
@@ -337,9 +366,23 @@ struct cgroup_subsys {
|
||||
#define MAX_CGROUP_TYPE_NAMELEN 32
|
||||
const char *name;
|
||||
|
||||
/* Protected by RCU */
|
||||
struct cgroupfs_root *root;
|
||||
/*
|
||||
* Protects sibling/children links of cgroups in this
|
||||
* hierarchy, plus protects which hierarchy (or none) the
|
||||
* subsystem is a part of (i.e. root/sibling). To avoid
|
||||
* potential deadlocks, the following operations should not be
|
||||
* undertaken while holding any hierarchy_mutex:
|
||||
*
|
||||
* - allocating memory
|
||||
* - initiating hotplug events
|
||||
*/
|
||||
struct mutex hierarchy_mutex;
|
||||
|
||||
/*
|
||||
* Link to parent, and list entry in parent's children.
|
||||
* Protected by this->hierarchy_mutex and cgroup_lock()
|
||||
*/
|
||||
struct cgroupfs_root *root;
|
||||
struct list_head sibling;
|
||||
};
|
||||
|
||||
|
@@ -11,9 +11,19 @@
|
||||
/* The "volatile" is due to gcc bugs */
|
||||
#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
|
||||
/* This macro obfuscates arithmetic on a variable address so that gcc
|
||||
shouldn't recognize the original var, and make assumptions about it */
|
||||
/*
|
||||
* This macro obfuscates arithmetic on a variable address so that gcc
|
||||
* shouldn't recognize the original var, and make assumptions about it.
|
||||
*
|
||||
* This is needed because the C standard makes it undefined to do
|
||||
* pointer arithmetic on "objects" outside their boundaries and the
|
||||
* gcc optimizers assume this is the case. In particular they
|
||||
* assume such arithmetic does not wrap.
|
||||
*
|
||||
* A miscompilation has been observed because of this on PPC.
|
||||
* To work around it we hide the relationship of the pointer and the object
|
||||
* using this macro.
|
||||
*
|
||||
* Versions of the ppc64 compiler before 4.1 had a bug where use of
|
||||
* RELOC_HIDE could trash r30. The bug can be worked around by changing
|
||||
* the inline assembly constraint from =g to =r, in this particular
|
||||
|
@@ -80,8 +80,8 @@ struct cpufreq_real_policy {
|
||||
};
|
||||
|
||||
struct cpufreq_policy {
|
||||
cpumask_t cpus; /* CPUs requiring sw coordination */
|
||||
cpumask_t related_cpus; /* CPUs with any coordination */
|
||||
cpumask_var_t cpus; /* CPUs requiring sw coordination */
|
||||
cpumask_var_t related_cpus; /* CPUs with any coordination */
|
||||
unsigned int shared_type; /* ANY or ALL affected CPUs
|
||||
should set cpufreq */
|
||||
unsigned int cpu; /* cpu nr of registered CPU */
|
||||
|
@@ -20,8 +20,9 @@ extern int number_of_cpusets; /* How many cpusets are defined in system? */
|
||||
extern int cpuset_init_early(void);
|
||||
extern int cpuset_init(void);
|
||||
extern void cpuset_init_smp(void);
|
||||
extern void cpuset_cpus_allowed(struct task_struct *p, cpumask_t *mask);
|
||||
extern void cpuset_cpus_allowed_locked(struct task_struct *p, cpumask_t *mask);
|
||||
extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask);
|
||||
extern void cpuset_cpus_allowed_locked(struct task_struct *p,
|
||||
struct cpumask *mask);
|
||||
extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
|
||||
#define cpuset_current_mems_allowed (current->mems_allowed)
|
||||
void cpuset_init_current_mems_allowed(void);
|
||||
@@ -86,12 +87,13 @@ static inline int cpuset_init_early(void) { return 0; }
|
||||
static inline int cpuset_init(void) { return 0; }
|
||||
static inline void cpuset_init_smp(void) {}
|
||||
|
||||
static inline void cpuset_cpus_allowed(struct task_struct *p, cpumask_t *mask)
|
||||
static inline void cpuset_cpus_allowed(struct task_struct *p,
|
||||
struct cpumask *mask)
|
||||
{
|
||||
*mask = cpu_possible_map;
|
||||
}
|
||||
static inline void cpuset_cpus_allowed_locked(struct task_struct *p,
|
||||
cpumask_t *mask)
|
||||
struct cpumask *mask)
|
||||
{
|
||||
*mask = cpu_possible_map;
|
||||
}
|
||||
|
@@ -63,6 +63,8 @@ struct dentry *debugfs_create_x16(const char *name, mode_t mode,
|
||||
struct dentry *parent, u16 *value);
|
||||
struct dentry *debugfs_create_x32(const char *name, mode_t mode,
|
||||
struct dentry *parent, u32 *value);
|
||||
struct dentry *debugfs_create_size_t(const char *name, mode_t mode,
|
||||
struct dentry *parent, size_t *value);
|
||||
struct dentry *debugfs_create_bool(const char *name, mode_t mode,
|
||||
struct dentry *parent, u32 *value);
|
||||
|
||||
|
@@ -28,7 +28,6 @@
|
||||
#define BUS_ID_SIZE 20
|
||||
|
||||
struct device;
|
||||
struct device_private;
|
||||
struct device_driver;
|
||||
struct driver_private;
|
||||
struct class;
|
||||
@@ -366,10 +365,12 @@ struct device_dma_parameters {
|
||||
};
|
||||
|
||||
struct device {
|
||||
struct klist klist_children;
|
||||
struct klist_node knode_parent; /* node in sibling list */
|
||||
struct klist_node knode_driver;
|
||||
struct klist_node knode_bus;
|
||||
struct device *parent;
|
||||
|
||||
struct device_private *p;
|
||||
|
||||
struct kobject kobj;
|
||||
char bus_id[BUS_ID_SIZE]; /* position on parent bus */
|
||||
unsigned uevent_suppress:1;
|
||||
|
@@ -28,32 +28,6 @@
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
/**
|
||||
* enum dma_state - resource PNP/power management state
|
||||
* @DMA_RESOURCE_SUSPEND: DMA device going into low power state
|
||||
* @DMA_RESOURCE_RESUME: DMA device returning to full power
|
||||
* @DMA_RESOURCE_AVAILABLE: DMA device available to the system
|
||||
* @DMA_RESOURCE_REMOVED: DMA device removed from the system
|
||||
*/
|
||||
enum dma_state {
|
||||
DMA_RESOURCE_SUSPEND,
|
||||
DMA_RESOURCE_RESUME,
|
||||
DMA_RESOURCE_AVAILABLE,
|
||||
DMA_RESOURCE_REMOVED,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum dma_state_client - state of the channel in the client
|
||||
* @DMA_ACK: client would like to use, or was using this channel
|
||||
* @DMA_DUP: client has already seen this channel, or is not using this channel
|
||||
* @DMA_NAK: client does not want to see any more channels
|
||||
*/
|
||||
enum dma_state_client {
|
||||
DMA_ACK,
|
||||
DMA_DUP,
|
||||
DMA_NAK,
|
||||
};
|
||||
|
||||
/**
|
||||
* typedef dma_cookie_t - an opaque DMA cookie
|
||||
*
|
||||
@@ -89,23 +63,13 @@ enum dma_transaction_type {
|
||||
DMA_MEMSET,
|
||||
DMA_MEMCPY_CRC32C,
|
||||
DMA_INTERRUPT,
|
||||
DMA_PRIVATE,
|
||||
DMA_SLAVE,
|
||||
};
|
||||
|
||||
/* last transaction type for creation of the capabilities mask */
|
||||
#define DMA_TX_TYPE_END (DMA_SLAVE + 1)
|
||||
|
||||
/**
|
||||
* enum dma_slave_width - DMA slave register access width.
|
||||
* @DMA_SLAVE_WIDTH_8BIT: Do 8-bit slave register accesses
|
||||
* @DMA_SLAVE_WIDTH_16BIT: Do 16-bit slave register accesses
|
||||
* @DMA_SLAVE_WIDTH_32BIT: Do 32-bit slave register accesses
|
||||
*/
|
||||
enum dma_slave_width {
|
||||
DMA_SLAVE_WIDTH_8BIT,
|
||||
DMA_SLAVE_WIDTH_16BIT,
|
||||
DMA_SLAVE_WIDTH_32BIT,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum dma_ctrl_flags - DMA flags to augment operation preparation,
|
||||
@@ -131,32 +95,6 @@ enum dma_ctrl_flags {
|
||||
*/
|
||||
typedef struct { DECLARE_BITMAP(bits, DMA_TX_TYPE_END); } dma_cap_mask_t;
|
||||
|
||||
/**
|
||||
* struct dma_slave - Information about a DMA slave
|
||||
* @dev: device acting as DMA slave
|
||||
* @dma_dev: required DMA master device. If non-NULL, the client can not be
|
||||
* bound to other masters than this.
|
||||
* @tx_reg: physical address of data register used for
|
||||
* memory-to-peripheral transfers
|
||||
* @rx_reg: physical address of data register used for
|
||||
* peripheral-to-memory transfers
|
||||
* @reg_width: peripheral register width
|
||||
*
|
||||
* If dma_dev is non-NULL, the client can not be bound to other DMA
|
||||
* masters than the one corresponding to this device. The DMA master
|
||||
* driver may use this to determine if there is controller-specific
|
||||
* data wrapped around this struct. Drivers of platform code that sets
|
||||
* the dma_dev field must therefore make sure to use an appropriate
|
||||
* controller-specific dma slave structure wrapping this struct.
|
||||
*/
|
||||
struct dma_slave {
|
||||
struct device *dev;
|
||||
struct device *dma_dev;
|
||||
dma_addr_t tx_reg;
|
||||
dma_addr_t rx_reg;
|
||||
enum dma_slave_width reg_width;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dma_chan_percpu - the per-CPU part of struct dma_chan
|
||||
* @refcount: local_t used for open-coded "bigref" counting
|
||||
@@ -165,7 +103,6 @@ struct dma_slave {
|
||||
*/
|
||||
|
||||
struct dma_chan_percpu {
|
||||
local_t refcount;
|
||||
/* stats */
|
||||
unsigned long memcpy_count;
|
||||
unsigned long bytes_transferred;
|
||||
@@ -176,13 +113,14 @@ struct dma_chan_percpu {
|
||||
* @device: ptr to the dma device who supplies this channel, always !%NULL
|
||||
* @cookie: last cookie value returned to client
|
||||
* @chan_id: channel ID for sysfs
|
||||
* @class_dev: class device for sysfs
|
||||
* @dev: class device for sysfs
|
||||
* @refcount: kref, used in "bigref" slow-mode
|
||||
* @slow_ref: indicates that the DMA channel is free
|
||||
* @rcu: the DMA channel's RCU head
|
||||
* @device_node: used to add this to the device chan list
|
||||
* @local: per-cpu pointer to a struct dma_chan_percpu
|
||||
* @client-count: how many clients are using this channel
|
||||
* @table_count: number of appearances in the mem-to-mem allocation table
|
||||
*/
|
||||
struct dma_chan {
|
||||
struct dma_device *device;
|
||||
@@ -190,73 +128,47 @@ struct dma_chan {
|
||||
|
||||
/* sysfs */
|
||||
int chan_id;
|
||||
struct device dev;
|
||||
|
||||
struct kref refcount;
|
||||
int slow_ref;
|
||||
struct rcu_head rcu;
|
||||
struct dma_chan_dev *dev;
|
||||
|
||||
struct list_head device_node;
|
||||
struct dma_chan_percpu *local;
|
||||
int client_count;
|
||||
int table_count;
|
||||
};
|
||||
|
||||
#define to_dma_chan(p) container_of(p, struct dma_chan, dev)
|
||||
/**
|
||||
* struct dma_chan_dev - relate sysfs device node to backing channel device
|
||||
* @chan - driver channel device
|
||||
* @device - sysfs device
|
||||
* @dev_id - parent dma_device dev_id
|
||||
* @idr_ref - reference count to gate release of dma_device dev_id
|
||||
*/
|
||||
struct dma_chan_dev {
|
||||
struct dma_chan *chan;
|
||||
struct device device;
|
||||
int dev_id;
|
||||
atomic_t *idr_ref;
|
||||
};
|
||||
|
||||
static inline const char *dma_chan_name(struct dma_chan *chan)
|
||||
{
|
||||
return dev_name(&chan->dev->device);
|
||||
}
|
||||
|
||||
void dma_chan_cleanup(struct kref *kref);
|
||||
|
||||
static inline void dma_chan_get(struct dma_chan *chan)
|
||||
{
|
||||
if (unlikely(chan->slow_ref))
|
||||
kref_get(&chan->refcount);
|
||||
else {
|
||||
local_inc(&(per_cpu_ptr(chan->local, get_cpu())->refcount));
|
||||
put_cpu();
|
||||
}
|
||||
}
|
||||
|
||||
static inline void dma_chan_put(struct dma_chan *chan)
|
||||
{
|
||||
if (unlikely(chan->slow_ref))
|
||||
kref_put(&chan->refcount, dma_chan_cleanup);
|
||||
else {
|
||||
local_dec(&(per_cpu_ptr(chan->local, get_cpu())->refcount));
|
||||
put_cpu();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* typedef dma_event_callback - function pointer to a DMA event callback
|
||||
* For each channel added to the system this routine is called for each client.
|
||||
* If the client would like to use the channel it returns '1' to signal (ack)
|
||||
* the dmaengine core to take out a reference on the channel and its
|
||||
* corresponding device. A client must not 'ack' an available channel more
|
||||
* than once. When a channel is removed all clients are notified. If a client
|
||||
* is using the channel it must 'ack' the removal. A client must not 'ack' a
|
||||
* removed channel more than once.
|
||||
* @client - 'this' pointer for the client context
|
||||
* @chan - channel to be acted upon
|
||||
* @state - available or removed
|
||||
*/
|
||||
struct dma_client;
|
||||
typedef enum dma_state_client (*dma_event_callback) (struct dma_client *client,
|
||||
struct dma_chan *chan, enum dma_state state);
|
||||
|
||||
/**
|
||||
* struct dma_client - info on the entity making use of DMA services
|
||||
* @event_callback: func ptr to call when something happens
|
||||
* @cap_mask: only return channels that satisfy the requested capabilities
|
||||
* a value of zero corresponds to any capability
|
||||
* @slave: data for preparing slave transfer. Must be non-NULL iff the
|
||||
* DMA_SLAVE capability is requested.
|
||||
* @global_node: list_head for global dma_client_list
|
||||
* typedef dma_filter_fn - callback filter for dma_request_channel
|
||||
* @chan: channel to be reviewed
|
||||
* @filter_param: opaque parameter passed through dma_request_channel
|
||||
*
|
||||
* When this optional parameter is specified in a call to dma_request_channel a
|
||||
* suitable channel is passed to this routine for further dispositioning before
|
||||
* being returned. Where 'suitable' indicates a non-busy channel that
|
||||
* satisfies the given capability mask. It returns 'true' to indicate that the
|
||||
* channel is suitable.
|
||||
*/
|
||||
struct dma_client {
|
||||
dma_event_callback event_callback;
|
||||
dma_cap_mask_t cap_mask;
|
||||
struct dma_slave *slave;
|
||||
struct list_head global_node;
|
||||
};
|
||||
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
||||
|
||||
typedef void (*dma_async_tx_callback)(void *dma_async_param);
|
||||
/**
|
||||
@@ -323,14 +235,10 @@ struct dma_device {
|
||||
dma_cap_mask_t cap_mask;
|
||||
int max_xor;
|
||||
|
||||
struct kref refcount;
|
||||
struct completion done;
|
||||
|
||||
int dev_id;
|
||||
struct device *dev;
|
||||
|
||||
int (*device_alloc_chan_resources)(struct dma_chan *chan,
|
||||
struct dma_client *client);
|
||||
int (*device_alloc_chan_resources)(struct dma_chan *chan);
|
||||
void (*device_free_chan_resources)(struct dma_chan *chan);
|
||||
|
||||
struct dma_async_tx_descriptor *(*device_prep_dma_memcpy)(
|
||||
@@ -362,9 +270,8 @@ struct dma_device {
|
||||
|
||||
/* --- public DMA engine API --- */
|
||||
|
||||
void dma_async_client_register(struct dma_client *client);
|
||||
void dma_async_client_unregister(struct dma_client *client);
|
||||
void dma_async_client_chan_request(struct dma_client *client);
|
||||
void dmaengine_get(void);
|
||||
void dmaengine_put(void);
|
||||
dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
|
||||
void *dest, void *src, size_t len);
|
||||
dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
|
||||
@@ -406,6 +313,12 @@ __dma_cap_set(enum dma_transaction_type tx_type, dma_cap_mask_t *dstp)
|
||||
set_bit(tx_type, dstp->bits);
|
||||
}
|
||||
|
||||
#define dma_cap_zero(mask) __dma_cap_zero(&(mask))
|
||||
static inline void __dma_cap_zero(dma_cap_mask_t *dstp)
|
||||
{
|
||||
bitmap_zero(dstp->bits, DMA_TX_TYPE_END);
|
||||
}
|
||||
|
||||
#define dma_has_cap(tx, mask) __dma_has_cap((tx), &(mask))
|
||||
static inline int
|
||||
__dma_has_cap(enum dma_transaction_type tx_type, dma_cap_mask_t *srcp)
|
||||
@@ -475,11 +388,25 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie,
|
||||
}
|
||||
|
||||
enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie);
|
||||
#ifdef CONFIG_DMA_ENGINE
|
||||
enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
|
||||
#else
|
||||
static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
return DMA_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* --- DMA device --- */
|
||||
|
||||
int dma_async_device_register(struct dma_device *device);
|
||||
void dma_async_device_unregister(struct dma_device *device);
|
||||
void dma_run_dependencies(struct dma_async_tx_descriptor *tx);
|
||||
struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
|
||||
void dma_issue_pending_all(void);
|
||||
#define dma_request_channel(mask, x, y) __dma_request_channel(&(mask), x, y)
|
||||
struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, void *fn_param);
|
||||
void dma_release_channel(struct dma_chan *chan);
|
||||
|
||||
/* --- Helper iov-locking functions --- */
|
||||
|
||||
|
@@ -21,15 +21,35 @@ struct dw_dma_platform_data {
|
||||
unsigned int nr_channels;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum dw_dma_slave_width - DMA slave register access width.
|
||||
* @DMA_SLAVE_WIDTH_8BIT: Do 8-bit slave register accesses
|
||||
* @DMA_SLAVE_WIDTH_16BIT: Do 16-bit slave register accesses
|
||||
* @DMA_SLAVE_WIDTH_32BIT: Do 32-bit slave register accesses
|
||||
*/
|
||||
enum dw_dma_slave_width {
|
||||
DW_DMA_SLAVE_WIDTH_8BIT,
|
||||
DW_DMA_SLAVE_WIDTH_16BIT,
|
||||
DW_DMA_SLAVE_WIDTH_32BIT,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dw_dma_slave - Controller-specific information about a slave
|
||||
* @slave: Generic information about the slave
|
||||
* @ctl_lo: Platform-specific initializer for the CTL_LO register
|
||||
*
|
||||
* @dma_dev: required DMA master device
|
||||
* @tx_reg: physical address of data register used for
|
||||
* memory-to-peripheral transfers
|
||||
* @rx_reg: physical address of data register used for
|
||||
* peripheral-to-memory transfers
|
||||
* @reg_width: peripheral register width
|
||||
* @cfg_hi: Platform-specific initializer for the CFG_HI register
|
||||
* @cfg_lo: Platform-specific initializer for the CFG_LO register
|
||||
*/
|
||||
struct dw_dma_slave {
|
||||
struct dma_slave slave;
|
||||
struct device *dma_dev;
|
||||
dma_addr_t tx_reg;
|
||||
dma_addr_t rx_reg;
|
||||
enum dw_dma_slave_width reg_width;
|
||||
u32 cfg_hi;
|
||||
u32 cfg_lo;
|
||||
};
|
||||
@@ -54,9 +74,4 @@ struct dw_dma_slave {
|
||||
#define DWC_CFGL_HS_DST_POL (1 << 18) /* dst handshake active low */
|
||||
#define DWC_CFGL_HS_SRC_POL (1 << 19) /* src handshake active low */
|
||||
|
||||
static inline struct dw_dma_slave *to_dw_dma_slave(struct dma_slave *slave)
|
||||
{
|
||||
return container_of(slave, struct dw_dma_slave, slave);
|
||||
}
|
||||
|
||||
#endif /* DW_DMAC_H */
|
||||
|
@@ -194,6 +194,30 @@ struct ext2_group_desc
|
||||
#define EXT2_FL_USER_VISIBLE FS_FL_USER_VISIBLE /* User visible flags */
|
||||
#define EXT2_FL_USER_MODIFIABLE FS_FL_USER_MODIFIABLE /* User modifiable flags */
|
||||
|
||||
/* Flags that should be inherited by new inodes from their parent. */
|
||||
#define EXT2_FL_INHERITED (EXT2_SECRM_FL | EXT2_UNRM_FL | EXT2_COMPR_FL |\
|
||||
EXT2_SYNC_FL | EXT2_IMMUTABLE_FL | EXT2_APPEND_FL |\
|
||||
EXT2_NODUMP_FL | EXT2_NOATIME_FL | EXT2_COMPRBLK_FL|\
|
||||
EXT2_NOCOMP_FL | EXT2_JOURNAL_DATA_FL |\
|
||||
EXT2_NOTAIL_FL | EXT2_DIRSYNC_FL)
|
||||
|
||||
/* Flags that are appropriate for regular files (all but dir-specific ones). */
|
||||
#define EXT2_REG_FLMASK (~(EXT2_DIRSYNC_FL | EXT2_TOPDIR_FL))
|
||||
|
||||
/* Flags that are appropriate for non-directories/regular files. */
|
||||
#define EXT2_OTHER_FLMASK (EXT2_NODUMP_FL | EXT2_NOATIME_FL)
|
||||
|
||||
/* Mask out flags that are inappropriate for the given type of inode. */
|
||||
static inline __u32 ext2_mask_flags(umode_t mode, __u32 flags)
|
||||
{
|
||||
if (S_ISDIR(mode))
|
||||
return flags;
|
||||
else if (S_ISREG(mode))
|
||||
return flags & EXT2_REG_FLMASK;
|
||||
else
|
||||
return flags & EXT2_OTHER_FLMASK;
|
||||
}
|
||||
|
||||
/*
|
||||
* ioctl commands
|
||||
*/
|
||||
|
@@ -101,7 +101,7 @@ struct ext2_sb_info {
|
||||
struct percpu_counter s_freeblocks_counter;
|
||||
struct percpu_counter s_freeinodes_counter;
|
||||
struct percpu_counter s_dirs_counter;
|
||||
struct blockgroup_lock s_blockgroup_lock;
|
||||
struct blockgroup_lock *s_blockgroup_lock;
|
||||
/* root of the per fs reservation window tree */
|
||||
spinlock_t s_rsv_window_lock;
|
||||
struct rb_root s_rsv_window_root;
|
||||
@@ -111,7 +111,7 @@ struct ext2_sb_info {
|
||||
static inline spinlock_t *
|
||||
sb_bgl_lock(struct ext2_sb_info *sbi, unsigned int block_group)
|
||||
{
|
||||
return bgl_lock_ptr(&sbi->s_blockgroup_lock, block_group);
|
||||
return bgl_lock_ptr(sbi->s_blockgroup_lock, block_group);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_EXT2_FS_SB */
|
||||
|
@@ -178,6 +178,30 @@ struct ext3_group_desc
|
||||
#define EXT3_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
|
||||
#define EXT3_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
|
||||
|
||||
/* Flags that should be inherited by new inodes from their parent. */
|
||||
#define EXT3_FL_INHERITED (EXT3_SECRM_FL | EXT3_UNRM_FL | EXT3_COMPR_FL |\
|
||||
EXT3_SYNC_FL | EXT3_IMMUTABLE_FL | EXT3_APPEND_FL |\
|
||||
EXT3_NODUMP_FL | EXT3_NOATIME_FL | EXT3_COMPRBLK_FL|\
|
||||
EXT3_NOCOMPR_FL | EXT3_JOURNAL_DATA_FL |\
|
||||
EXT3_NOTAIL_FL | EXT3_DIRSYNC_FL)
|
||||
|
||||
/* Flags that are appropriate for regular files (all but dir-specific ones). */
|
||||
#define EXT3_REG_FLMASK (~(EXT3_DIRSYNC_FL | EXT3_TOPDIR_FL))
|
||||
|
||||
/* Flags that are appropriate for non-directories/regular files. */
|
||||
#define EXT3_OTHER_FLMASK (EXT3_NODUMP_FL | EXT3_NOATIME_FL)
|
||||
|
||||
/* Mask out flags that are inappropriate for the given type of inode. */
|
||||
static inline __u32 ext3_mask_flags(umode_t mode, __u32 flags)
|
||||
{
|
||||
if (S_ISDIR(mode))
|
||||
return flags;
|
||||
else if (S_ISREG(mode))
|
||||
return flags & EXT3_REG_FLMASK;
|
||||
else
|
||||
return flags & EXT3_OTHER_FLMASK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Inode dynamic state flags
|
||||
*/
|
||||
@@ -353,6 +377,13 @@ struct ext3_inode {
|
||||
#define EXT3_ERROR_FS 0x0002 /* Errors detected */
|
||||
#define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */
|
||||
|
||||
/*
|
||||
* Misc. filesystem flags
|
||||
*/
|
||||
#define EXT2_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */
|
||||
#define EXT2_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */
|
||||
#define EXT2_FLAGS_TEST_FILESYS 0x0004 /* to test development code */
|
||||
|
||||
/*
|
||||
* Mount flags
|
||||
*/
|
||||
@@ -489,7 +520,23 @@ struct ext3_super_block {
|
||||
__u16 s_reserved_word_pad;
|
||||
__le32 s_default_mount_opts;
|
||||
__le32 s_first_meta_bg; /* First metablock block group */
|
||||
__u32 s_reserved[190]; /* Padding to the end of the block */
|
||||
__le32 s_mkfs_time; /* When the filesystem was created */
|
||||
__le32 s_jnl_blocks[17]; /* Backup of the journal inode */
|
||||
/* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */
|
||||
/*150*/ __le32 s_blocks_count_hi; /* Blocks count */
|
||||
__le32 s_r_blocks_count_hi; /* Reserved blocks count */
|
||||
__le32 s_free_blocks_count_hi; /* Free blocks count */
|
||||
__le16 s_min_extra_isize; /* All inodes have at least # bytes */
|
||||
__le16 s_want_extra_isize; /* New inodes should reserve # bytes */
|
||||
__le32 s_flags; /* Miscellaneous flags */
|
||||
__le16 s_raid_stride; /* RAID stride */
|
||||
__le16 s_mmp_interval; /* # seconds to wait in MMP checking */
|
||||
__le64 s_mmp_block; /* Block for multi-mount protection */
|
||||
__le32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
|
||||
__u8 s_log_groups_per_flex; /* FLEX_BG group size */
|
||||
__u8 s_reserved_char_pad2;
|
||||
__le16 s_reserved_pad;
|
||||
__u32 s_reserved[162]; /* Padding to the end of the block */
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
@@ -694,6 +741,9 @@ static inline __le16 ext3_rec_len_to_disk(unsigned len)
|
||||
#define DX_HASH_LEGACY 0
|
||||
#define DX_HASH_HALF_MD4 1
|
||||
#define DX_HASH_TEA 2
|
||||
#define DX_HASH_LEGACY_UNSIGNED 3
|
||||
#define DX_HASH_HALF_MD4_UNSIGNED 4
|
||||
#define DX_HASH_TEA_UNSIGNED 5
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
@@ -57,10 +57,11 @@ struct ext3_sb_info {
|
||||
u32 s_next_generation;
|
||||
u32 s_hash_seed[4];
|
||||
int s_def_hash_version;
|
||||
int s_hash_unsigned; /* 3 if hash should be signed, 0 if not */
|
||||
struct percpu_counter s_freeblocks_counter;
|
||||
struct percpu_counter s_freeinodes_counter;
|
||||
struct percpu_counter s_dirs_counter;
|
||||
struct blockgroup_lock s_blockgroup_lock;
|
||||
struct blockgroup_lock *s_blockgroup_lock;
|
||||
|
||||
/* root of the per fs reservation window tree */
|
||||
spinlock_t s_rsv_window_lock;
|
||||
@@ -86,7 +87,7 @@ struct ext3_sb_info {
|
||||
static inline spinlock_t *
|
||||
sb_bgl_lock(struct ext3_sb_info *sbi, unsigned int block_group)
|
||||
{
|
||||
return bgl_lock_ptr(&sbi->s_blockgroup_lock, block_group);
|
||||
return bgl_lock_ptr(sbi->s_blockgroup_lock, block_group);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_EXT3_FS_SB */
|
||||
|
@@ -234,6 +234,8 @@ struct inodes_stat_t {
|
||||
#define BMAP_IOCTL 1 /* obsolete - kept for compatibility */
|
||||
#define FIBMAP _IO(0x00,1) /* bmap access */
|
||||
#define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */
|
||||
#define FIFREEZE _IOWR('X', 119, int) /* Freeze */
|
||||
#define FITHAW _IOWR('X', 120, int) /* Thaw */
|
||||
|
||||
#define FS_IOC_GETFLAGS _IOR('f', 1, long)
|
||||
#define FS_IOC_SETFLAGS _IOW('f', 2, long)
|
||||
@@ -565,6 +567,7 @@ struct address_space {
|
||||
struct block_device {
|
||||
dev_t bd_dev; /* not a kdev_t - it's a search key */
|
||||
struct inode * bd_inode; /* will die */
|
||||
struct super_block * bd_super;
|
||||
int bd_openers;
|
||||
struct mutex bd_mutex; /* open/close mutex */
|
||||
struct semaphore bd_mount_sem;
|
||||
@@ -590,6 +593,11 @@ struct block_device {
|
||||
* care to not mess up bd_private for that case.
|
||||
*/
|
||||
unsigned long bd_private;
|
||||
|
||||
/* The counter of freeze processes */
|
||||
int bd_fsfreeze_count;
|
||||
/* Mutex for freeze */
|
||||
struct mutex bd_fsfreeze_mutex;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1184,6 +1192,11 @@ struct super_block {
|
||||
* generic_show_options()
|
||||
*/
|
||||
char *s_options;
|
||||
|
||||
/*
|
||||
* storage for asynchronous operations
|
||||
*/
|
||||
struct list_head s_async_list;
|
||||
};
|
||||
|
||||
extern struct timespec current_fs_time(struct super_block *sb);
|
||||
@@ -1371,8 +1384,8 @@ struct super_operations {
|
||||
void (*put_super) (struct super_block *);
|
||||
void (*write_super) (struct super_block *);
|
||||
int (*sync_fs)(struct super_block *sb, int wait);
|
||||
void (*write_super_lockfs) (struct super_block *);
|
||||
void (*unlockfs) (struct super_block *);
|
||||
int (*freeze_fs) (struct super_block *);
|
||||
int (*unfreeze_fs) (struct super_block *);
|
||||
int (*statfs) (struct dentry *, struct kstatfs *);
|
||||
int (*remount_fs) (struct super_block *, int *, char *);
|
||||
void (*clear_inode) (struct inode *);
|
||||
@@ -1384,6 +1397,7 @@ struct super_operations {
|
||||
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
|
||||
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
|
||||
#endif
|
||||
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -393,11 +393,7 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
|
||||
#define I2C_CLASS_TV_ANALOG (1<<1) /* bttv + friends */
|
||||
#define I2C_CLASS_TV_DIGITAL (1<<2) /* dvb cards */
|
||||
#define I2C_CLASS_DDC (1<<3) /* DDC bus on graphics adapters */
|
||||
#define I2C_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */
|
||||
#define I2C_CLASS_CAM_DIGITAL (1<<5) /* most webcams */
|
||||
#define I2C_CLASS_SOUND (1<<6) /* sound devices */
|
||||
#define I2C_CLASS_SPD (1<<7) /* SPD EEPROMs and similar */
|
||||
#define I2C_CLASS_ALL (UINT_MAX) /* all of the above */
|
||||
|
||||
/* i2c_client_address_data is the struct for holding default client
|
||||
* addresses for a driver and for the parameters supplied on the
|
||||
|
@@ -115,6 +115,11 @@ extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
||||
extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
|
||||
u16 vlan_tci, int polling);
|
||||
extern int vlan_hwaccel_do_receive(struct sk_buff *skb);
|
||||
extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci, struct sk_buff *skb);
|
||||
extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci,
|
||||
struct napi_gro_fraginfo *info);
|
||||
|
||||
#else
|
||||
static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)
|
||||
@@ -140,6 +145,20 @@ static inline int vlan_hwaccel_do_receive(struct sk_buff *skb)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int vlan_gro_receive(struct napi_struct *napi,
|
||||
struct vlan_group *grp,
|
||||
unsigned int vlan_tci, struct sk_buff *skb)
|
||||
{
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
|
||||
static inline int vlan_gro_frags(struct napi_struct *napi,
|
||||
struct vlan_group *grp, unsigned int vlan_tci,
|
||||
struct napi_gro_fraginfo *info)
|
||||
{
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@@ -49,6 +49,7 @@ struct resource_list {
|
||||
#define IORESOURCE_SIZEALIGN 0x00020000 /* size indicates alignment */
|
||||
#define IORESOURCE_STARTALIGN 0x00040000 /* start field is alignment */
|
||||
|
||||
#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
|
||||
#define IORESOURCE_DISABLED 0x10000000
|
||||
#define IORESOURCE_UNSET 0x20000000
|
||||
#define IORESOURCE_AUTO 0x40000000
|
||||
@@ -133,13 +134,16 @@ static inline unsigned long resource_type(struct resource *res)
|
||||
}
|
||||
|
||||
/* Convenience shorthand with allocation */
|
||||
#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name))
|
||||
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
|
||||
#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name), 0)
|
||||
#define __request_mem_region(start,n,name, excl) __request_region(&iomem_resource, (start), (n), (name), excl)
|
||||
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0)
|
||||
#define request_mem_region_exclusive(start,n,name) \
|
||||
__request_region(&iomem_resource, (start), (n), (name), IORESOURCE_EXCLUSIVE)
|
||||
#define rename_region(region, newname) do { (region)->name = (newname); } while (0)
|
||||
|
||||
extern struct resource * __request_region(struct resource *,
|
||||
resource_size_t start,
|
||||
resource_size_t n, const char *name);
|
||||
resource_size_t n, const char *name, int relaxed);
|
||||
|
||||
/* Compatibility cruft */
|
||||
#define release_region(start,n) __release_region(&ioport_resource, (start), (n))
|
||||
@@ -175,6 +179,7 @@ extern struct resource * __devm_request_region(struct device *dev,
|
||||
extern void __devm_release_region(struct device *dev, struct resource *parent,
|
||||
resource_size_t start, resource_size_t n);
|
||||
extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size);
|
||||
extern int iomem_is_exclusive(u64 addr);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _LINUX_IOPORT_H */
|
||||
|
@@ -86,4 +86,6 @@ static inline int task_nice_ioclass(struct task_struct *task)
|
||||
*/
|
||||
extern int ioprio_best(unsigned short aprio, unsigned short bprio);
|
||||
|
||||
extern int set_task_ioprio(struct task_struct *task, int ioprio);
|
||||
|
||||
#endif
|
||||
|
@@ -542,6 +542,11 @@ struct transaction_s
|
||||
*/
|
||||
unsigned long t_expires;
|
||||
|
||||
/*
|
||||
* When this transaction started, in nanoseconds [no locking]
|
||||
*/
|
||||
ktime_t t_start_time;
|
||||
|
||||
/*
|
||||
* How many handles used this transaction? [t_handle_lock]
|
||||
*/
|
||||
@@ -798,8 +803,18 @@ struct journal_s
|
||||
struct buffer_head **j_wbuf;
|
||||
int j_wbufsize;
|
||||
|
||||
/*
|
||||
* this is the pid of the last person to run a synchronous operation
|
||||
* through the journal.
|
||||
*/
|
||||
pid_t j_last_sync_writer;
|
||||
|
||||
/*
|
||||
* the average amount of time in nanoseconds it takes to commit a
|
||||
* transaction to the disk. [j_state_lock]
|
||||
*/
|
||||
u64 j_average_commit_time;
|
||||
|
||||
/*
|
||||
* An opaque pointer to fs-private information. ext3 puts its
|
||||
* superblock pointer here
|
||||
|
@@ -637,6 +637,11 @@ struct transaction_s
|
||||
*/
|
||||
unsigned long t_expires;
|
||||
|
||||
/*
|
||||
* When this transaction started, in nanoseconds [no locking]
|
||||
*/
|
||||
ktime_t t_start_time;
|
||||
|
||||
/*
|
||||
* How many handles used this transaction? [t_handle_lock]
|
||||
*/
|
||||
@@ -682,6 +687,8 @@ jbd2_time_diff(unsigned long start, unsigned long end)
|
||||
return end + (MAX_JIFFY_OFFSET - start);
|
||||
}
|
||||
|
||||
#define JBD2_NR_BATCH 64
|
||||
|
||||
/**
|
||||
* struct journal_s - The journal_s type is the concrete type associated with
|
||||
* journal_t.
|
||||
@@ -825,6 +832,14 @@ struct journal_s
|
||||
/* Semaphore for locking against concurrent checkpoints */
|
||||
struct mutex j_checkpoint_mutex;
|
||||
|
||||
/*
|
||||
* List of buffer heads used by the checkpoint routine. This
|
||||
* was moved from jbd2_log_do_checkpoint() to reduce stack
|
||||
* usage. Access to this array is controlled by the
|
||||
* j_checkpoint_mutex. [j_checkpoint_mutex]
|
||||
*/
|
||||
struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH];
|
||||
|
||||
/*
|
||||
* Journal head: identifies the first unused block in the journal.
|
||||
* [j_state_lock]
|
||||
@@ -939,8 +954,26 @@ struct journal_s
|
||||
struct buffer_head **j_wbuf;
|
||||
int j_wbufsize;
|
||||
|
||||
/*
|
||||
* this is the pid of hte last person to run a synchronous operation
|
||||
* through the journal
|
||||
*/
|
||||
pid_t j_last_sync_writer;
|
||||
|
||||
/*
|
||||
* the average amount of time in nanoseconds it takes to commit a
|
||||
* transaction to disk. [j_state_lock]
|
||||
*/
|
||||
u64 j_average_commit_time;
|
||||
|
||||
/*
|
||||
* minimum and maximum times that we should wait for
|
||||
* additional filesystem operations to get batched into a
|
||||
* synchronous handle in microseconds
|
||||
*/
|
||||
u32 j_min_batch_time;
|
||||
u32 j_max_batch_time;
|
||||
|
||||
/* This function is called when a transaction is closed */
|
||||
void (*j_commit_callback)(journal_t *,
|
||||
transaction_t *);
|
||||
@@ -1102,7 +1135,6 @@ extern int jbd2_journal_set_features
|
||||
(journal_t *, unsigned long, unsigned long, unsigned long);
|
||||
extern void jbd2_journal_clear_features
|
||||
(journal_t *, unsigned long, unsigned long, unsigned long);
|
||||
extern int jbd2_journal_create (journal_t *);
|
||||
extern int jbd2_journal_load (journal_t *journal);
|
||||
extern int jbd2_journal_destroy (journal_t *);
|
||||
extern int jbd2_journal_recover (journal_t *journal);
|
||||
@@ -1177,8 +1209,8 @@ int jbd2_log_wait_commit(journal_t *journal, tid_t tid);
|
||||
int jbd2_log_do_checkpoint(journal_t *journal);
|
||||
|
||||
void __jbd2_log_wait_for_space(journal_t *journal);
|
||||
extern void __jbd2_journal_drop_transaction(journal_t *, transaction_t *);
|
||||
extern int jbd2_cleanup_journal_tail(journal_t *);
|
||||
extern void __jbd2_journal_drop_transaction(journal_t *, transaction_t *);
|
||||
extern int jbd2_cleanup_journal_tail(journal_t *);
|
||||
|
||||
/* Debugging code only: */
|
||||
|
||||
|
@@ -476,6 +476,12 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
|
||||
__val = __val < __min ? __min: __val; \
|
||||
__val > __max ? __max: __val; })
|
||||
|
||||
|
||||
/*
|
||||
* swap - swap value of @a and @b
|
||||
*/
|
||||
#define swap(a, b) ({ typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; })
|
||||
|
||||
/**
|
||||
* container_of - cast a member of a structure out to the containing structure
|
||||
* @ptr: the pointer to the member.
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#define __LINUX_PCA9532_H
|
||||
|
||||
#include <linux/leds.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
enum pca9532_state {
|
||||
PCA9532_OFF = 0x0,
|
||||
@@ -31,6 +32,7 @@ struct pca9532_led {
|
||||
struct i2c_client *client;
|
||||
char *name;
|
||||
struct led_classdev ldev;
|
||||
struct work_struct work;
|
||||
enum pca9532_type type;
|
||||
enum pca9532_state state;
|
||||
};
|
||||
|
@@ -32,7 +32,10 @@ struct led_classdev {
|
||||
int brightness;
|
||||
int flags;
|
||||
|
||||
/* Lower 16 bits reflect status */
|
||||
#define LED_SUSPENDED (1 << 0)
|
||||
/* Upper 16 bits reflect control information */
|
||||
#define LED_CORE_SUSPENDRESUME (1 << 16)
|
||||
|
||||
/* Set LED brightness level */
|
||||
/* Must not sleep, use a workqueue if needed */
|
||||
@@ -62,7 +65,7 @@ struct led_classdev {
|
||||
|
||||
extern int led_classdev_register(struct device *parent,
|
||||
struct led_classdev *led_cdev);
|
||||
extern void led_classdev_unregister(struct led_classdev *lcd);
|
||||
extern void led_classdev_unregister(struct led_classdev *led_cdev);
|
||||
extern void led_classdev_suspend(struct led_classdev *led_cdev);
|
||||
extern void led_classdev_resume(struct led_classdev *led_cdev);
|
||||
|
||||
|
@@ -239,6 +239,7 @@ enum {
|
||||
/* host set flags */
|
||||
ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */
|
||||
ATA_HOST_STARTED = (1 << 1), /* Host started */
|
||||
ATA_HOST_PARALLEL_SCAN = (1 << 2), /* Ports on this host can be scanned in parallel */
|
||||
|
||||
/* bits 24:31 of host->flags are reserved for LLD specific flags */
|
||||
|
||||
@@ -1518,6 +1519,7 @@ extern void sata_pmp_error_handler(struct ata_port *ap);
|
||||
|
||||
extern const struct ata_port_operations ata_sff_port_ops;
|
||||
extern const struct ata_port_operations ata_bmdma_port_ops;
|
||||
extern const struct ata_port_operations ata_bmdma32_port_ops;
|
||||
|
||||
/* PIO only, sg_tablesize and dma_boundary limits can be removed */
|
||||
#define ATA_PIO_SHT(drv_name) \
|
||||
@@ -1545,6 +1547,8 @@ extern void ata_sff_exec_command(struct ata_port *ap,
|
||||
const struct ata_taskfile *tf);
|
||||
extern unsigned int ata_sff_data_xfer(struct ata_device *dev,
|
||||
unsigned char *buf, unsigned int buflen, int rw);
|
||||
extern unsigned int ata_sff_data_xfer32(struct ata_device *dev,
|
||||
unsigned char *buf, unsigned int buflen, int rw);
|
||||
extern unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev,
|
||||
unsigned char *buf, unsigned int buflen, int rw);
|
||||
extern u8 ata_sff_irq_on(struct ata_port *ap);
|
||||
|
@@ -43,8 +43,8 @@ struct nlm_host {
|
||||
struct sockaddr_storage h_addr; /* peer address */
|
||||
size_t h_addrlen;
|
||||
struct sockaddr_storage h_srcaddr; /* our address (optional) */
|
||||
struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */
|
||||
char * h_name; /* remote hostname */
|
||||
struct rpc_clnt *h_rpcclnt; /* RPC client to talk to peer */
|
||||
char *h_name; /* remote hostname */
|
||||
u32 h_version; /* interface version */
|
||||
unsigned short h_proto; /* transport proto */
|
||||
unsigned short h_reclaiming : 1,
|
||||
@@ -64,21 +64,29 @@ struct nlm_host {
|
||||
spinlock_t h_lock;
|
||||
struct list_head h_granted; /* Locks in GRANTED state */
|
||||
struct list_head h_reclaim; /* Locks in RECLAIM state */
|
||||
struct nsm_handle * h_nsmhandle; /* NSM status handle */
|
||||
|
||||
char h_addrbuf[48], /* address eyecatchers */
|
||||
h_srcaddrbuf[48];
|
||||
struct nsm_handle *h_nsmhandle; /* NSM status handle */
|
||||
char *h_addrbuf; /* address eyecatcher */
|
||||
};
|
||||
|
||||
/*
|
||||
* The largest string sm_addrbuf should hold is a full-size IPv6 address
|
||||
* (no "::" anywhere) with a scope ID. The buffer size is computed to
|
||||
* hold eight groups of colon-separated four-hex-digit numbers, a
|
||||
* percent sign, a scope id (at most 32 bits, in decimal), and NUL.
|
||||
*/
|
||||
#define NSM_ADDRBUF ((8 * 4 + 7) + (1 + 10) + 1)
|
||||
|
||||
struct nsm_handle {
|
||||
struct list_head sm_link;
|
||||
atomic_t sm_count;
|
||||
char * sm_name;
|
||||
char *sm_mon_name;
|
||||
char *sm_name;
|
||||
struct sockaddr_storage sm_addr;
|
||||
size_t sm_addrlen;
|
||||
unsigned int sm_monitored : 1,
|
||||
sm_sticky : 1; /* don't unmonitor */
|
||||
char sm_addrbuf[48]; /* address eyecatcher */
|
||||
struct nsm_private sm_priv;
|
||||
char sm_addrbuf[NSM_ADDRBUF];
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -104,16 +112,6 @@ static inline struct sockaddr *nlm_srcaddr(const struct nlm_host *host)
|
||||
return (struct sockaddr *)&host->h_srcaddr;
|
||||
}
|
||||
|
||||
static inline struct sockaddr_in *nsm_addr_in(const struct nsm_handle *handle)
|
||||
{
|
||||
return (struct sockaddr_in *)&handle->sm_addr;
|
||||
}
|
||||
|
||||
static inline struct sockaddr *nsm_addr(const struct nsm_handle *handle)
|
||||
{
|
||||
return (struct sockaddr *)&handle->sm_addr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Map an fl_owner_t into a unique 32-bit "pid"
|
||||
*/
|
||||
@@ -197,6 +195,7 @@ extern struct svc_procedure nlmsvc_procedures4[];
|
||||
extern int nlmsvc_grace_period;
|
||||
extern unsigned long nlmsvc_timeout;
|
||||
extern int nsm_use_hostnames;
|
||||
extern int nsm_local_state;
|
||||
|
||||
/*
|
||||
* Lockd client functions
|
||||
@@ -231,10 +230,20 @@ void nlm_rebind_host(struct nlm_host *);
|
||||
struct nlm_host * nlm_get_host(struct nlm_host *);
|
||||
void nlm_release_host(struct nlm_host *);
|
||||
void nlm_shutdown_hosts(void);
|
||||
extern void nlm_host_rebooted(const struct sockaddr_in *, const char *,
|
||||
unsigned int, u32);
|
||||
void nsm_release(struct nsm_handle *);
|
||||
void nlm_host_rebooted(const struct nlm_reboot *);
|
||||
|
||||
/*
|
||||
* Host monitoring
|
||||
*/
|
||||
int nsm_monitor(const struct nlm_host *host);
|
||||
void nsm_unmonitor(const struct nlm_host *host);
|
||||
|
||||
struct nsm_handle *nsm_get_handle(const struct sockaddr *sap,
|
||||
const size_t salen,
|
||||
const char *hostname,
|
||||
const size_t hostname_len);
|
||||
struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info);
|
||||
void nsm_release(struct nsm_handle *nsm);
|
||||
|
||||
/*
|
||||
* This is used in garbage collection and resource reclaim
|
||||
@@ -282,16 +291,25 @@ static inline struct inode *nlmsvc_file_inode(struct nlm_file *file)
|
||||
static inline int __nlm_privileged_request4(const struct sockaddr *sap)
|
||||
{
|
||||
const struct sockaddr_in *sin = (struct sockaddr_in *)sap;
|
||||
return (sin->sin_addr.s_addr == htonl(INADDR_LOOPBACK)) &&
|
||||
(ntohs(sin->sin_port) < 1024);
|
||||
|
||||
if (ntohs(sin->sin_port) > 1023)
|
||||
return 0;
|
||||
|
||||
return ipv4_is_loopback(sin->sin_addr.s_addr);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
static inline int __nlm_privileged_request6(const struct sockaddr *sap)
|
||||
{
|
||||
const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap;
|
||||
return (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LOOPBACK) &&
|
||||
(ntohs(sin6->sin6_port) < 1024);
|
||||
|
||||
if (ntohs(sin6->sin6_port) > 1023)
|
||||
return 0;
|
||||
|
||||
if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_MAPPED)
|
||||
return ipv4_is_loopback(sin6->sin6_addr.s6_addr32[3]);
|
||||
|
||||
return ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LOOPBACK;
|
||||
}
|
||||
#else /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
static inline int __nlm_privileged_request6(const struct sockaddr *sap)
|
||||
|
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* linux/include/linux/lockd/sm_inter.h
|
||||
*
|
||||
* Declarations for the kernel statd client.
|
||||
*
|
||||
* Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
|
||||
*/
|
||||
|
||||
#ifndef LINUX_LOCKD_SM_INTER_H
|
||||
#define LINUX_LOCKD_SM_INTER_H
|
||||
|
||||
#define SM_PROGRAM 100024
|
||||
#define SM_VERSION 1
|
||||
#define SM_STAT 1
|
||||
#define SM_MON 2
|
||||
#define SM_UNMON 3
|
||||
#define SM_UNMON_ALL 4
|
||||
#define SM_SIMU_CRASH 5
|
||||
#define SM_NOTIFY 6
|
||||
|
||||
#define SM_MAXSTRLEN 1024
|
||||
#define SM_PRIV_SIZE 16
|
||||
|
||||
/*
|
||||
* Arguments for all calls to statd
|
||||
*/
|
||||
struct nsm_args {
|
||||
__be32 addr; /* remote address */
|
||||
u32 prog; /* RPC callback info */
|
||||
u32 vers;
|
||||
u32 proc;
|
||||
|
||||
char * mon_name;
|
||||
};
|
||||
|
||||
/*
|
||||
* Result returned by statd
|
||||
*/
|
||||
struct nsm_res {
|
||||
u32 status;
|
||||
u32 state;
|
||||
};
|
||||
|
||||
int nsm_monitor(struct nlm_host *);
|
||||
int nsm_unmonitor(struct nlm_host *);
|
||||
extern int nsm_local_state;
|
||||
|
||||
#endif /* LINUX_LOCKD_SM_INTER_H */
|
@@ -13,6 +13,13 @@
|
||||
#include <linux/nfs.h>
|
||||
#include <linux/sunrpc/xdr.h>
|
||||
|
||||
#define SM_MAXSTRLEN 1024
|
||||
#define SM_PRIV_SIZE 16
|
||||
|
||||
struct nsm_private {
|
||||
unsigned char data[SM_PRIV_SIZE];
|
||||
};
|
||||
|
||||
struct svc_rqst;
|
||||
|
||||
#define NLM_MAXCOOKIELEN 32
|
||||
@@ -77,10 +84,10 @@ struct nlm_res {
|
||||
* statd callback when client has rebooted
|
||||
*/
|
||||
struct nlm_reboot {
|
||||
char * mon;
|
||||
unsigned int len;
|
||||
u32 state;
|
||||
__be32 addr;
|
||||
char *mon;
|
||||
unsigned int len;
|
||||
u32 state;
|
||||
struct nsm_private priv;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -57,20 +57,21 @@
|
||||
#define FLG_L2DATA 14 /* channel use L2 DATA primitivs */
|
||||
#define FLG_ORIGIN 15 /* channel is on origin site */
|
||||
/* channel specific stuff */
|
||||
#define FLG_FILLEMPTY 16 /* fill fifo on first frame (empty) */
|
||||
/* arcofi specific */
|
||||
#define FLG_ARCOFI_TIMER 16
|
||||
#define FLG_ARCOFI_ERROR 17
|
||||
#define FLG_ARCOFI_TIMER 17
|
||||
#define FLG_ARCOFI_ERROR 18
|
||||
/* isar specific */
|
||||
#define FLG_INITIALIZED 16
|
||||
#define FLG_DLEETX 17
|
||||
#define FLG_LASTDLE 18
|
||||
#define FLG_FIRST 19
|
||||
#define FLG_LASTDATA 20
|
||||
#define FLG_NMD_DATA 21
|
||||
#define FLG_FTI_RUN 22
|
||||
#define FLG_LL_OK 23
|
||||
#define FLG_LL_CONN 24
|
||||
#define FLG_DTMFSEND 25
|
||||
#define FLG_INITIALIZED 17
|
||||
#define FLG_DLEETX 18
|
||||
#define FLG_LASTDLE 19
|
||||
#define FLG_FIRST 20
|
||||
#define FLG_LASTDATA 21
|
||||
#define FLG_NMD_DATA 22
|
||||
#define FLG_FTI_RUN 23
|
||||
#define FLG_LL_OK 24
|
||||
#define FLG_LL_CONN 25
|
||||
#define FLG_DTMFSEND 26
|
||||
|
||||
/* workq events */
|
||||
#define FLG_RECVQUEUE 30
|
||||
@@ -183,6 +184,7 @@ extern void queue_ch_frame(struct mISDNchannel *, u_int,
|
||||
extern int dchannel_senddata(struct dchannel *, struct sk_buff *);
|
||||
extern int bchannel_senddata(struct bchannel *, struct sk_buff *);
|
||||
extern void recv_Dchannel(struct dchannel *);
|
||||
extern void recv_Echannel(struct dchannel *, struct dchannel *);
|
||||
extern void recv_Bchannel(struct bchannel *);
|
||||
extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *);
|
||||
extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *);
|
||||
|
@@ -36,8 +36,8 @@
|
||||
* - should be incremented on every checkin
|
||||
*/
|
||||
#define MISDN_MAJOR_VERSION 1
|
||||
#define MISDN_MINOR_VERSION 0
|
||||
#define MISDN_RELEASE 19
|
||||
#define MISDN_MINOR_VERSION 1
|
||||
#define MISDN_RELEASE 20
|
||||
|
||||
/* primitives for information exchange
|
||||
* generell format
|
||||
@@ -80,6 +80,7 @@
|
||||
#define PH_DEACTIVATE_IND 0x0202
|
||||
#define PH_DEACTIVATE_CNF 0x4202
|
||||
#define PH_DATA_IND 0x2002
|
||||
#define PH_DATA_E_IND 0x3002
|
||||
#define MPH_ACTIVATE_IND 0x0502
|
||||
#define MPH_DEACTIVATE_IND 0x0602
|
||||
#define MPH_INFORMATION_IND 0x0702
|
||||
@@ -199,6 +200,18 @@
|
||||
#define ISDN_P_NT_S0 0x02
|
||||
#define ISDN_P_TE_E1 0x03
|
||||
#define ISDN_P_NT_E1 0x04
|
||||
#define ISDN_P_TE_UP0 0x05
|
||||
#define ISDN_P_NT_UP0 0x06
|
||||
|
||||
#define IS_ISDN_P_TE(p) ((p == ISDN_P_TE_S0) || (p == ISDN_P_TE_E1) || \
|
||||
(p == ISDN_P_TE_UP0) || (p == ISDN_P_LAPD_TE))
|
||||
#define IS_ISDN_P_NT(p) ((p == ISDN_P_NT_S0) || (p == ISDN_P_NT_E1) || \
|
||||
(p == ISDN_P_NT_UP0) || (p == ISDN_P_LAPD_NT))
|
||||
#define IS_ISDN_P_S0(p) ((p == ISDN_P_TE_S0) || (p == ISDN_P_NT_S0))
|
||||
#define IS_ISDN_P_E1(p) ((p == ISDN_P_TE_E1) || (p == ISDN_P_NT_E1))
|
||||
#define IS_ISDN_P_UP0(p) ((p == ISDN_P_TE_UP0) || (p == ISDN_P_NT_UP0))
|
||||
|
||||
|
||||
#define ISDN_P_LAPD_TE 0x10
|
||||
#define ISDN_P_LAPD_NT 0x11
|
||||
|
||||
@@ -255,16 +268,6 @@ struct sockaddr_mISDN {
|
||||
unsigned char tei;
|
||||
};
|
||||
|
||||
/* timer device ioctl */
|
||||
#define IMADDTIMER _IOR('I', 64, int)
|
||||
#define IMDELTIMER _IOR('I', 65, int)
|
||||
/* socket ioctls */
|
||||
#define IMGETVERSION _IOR('I', 66, int)
|
||||
#define IMGETCOUNT _IOR('I', 67, int)
|
||||
#define IMGETDEVINFO _IOR('I', 68, int)
|
||||
#define IMCTRLREQ _IOR('I', 69, int)
|
||||
#define IMCLEAR_L2 _IOR('I', 70, int)
|
||||
|
||||
struct mISDNversion {
|
||||
unsigned char major;
|
||||
unsigned char minor;
|
||||
@@ -281,6 +284,40 @@ struct mISDN_devinfo {
|
||||
char name[MISDN_MAX_IDLEN];
|
||||
};
|
||||
|
||||
struct mISDN_devrename {
|
||||
u_int id;
|
||||
char name[MISDN_MAX_IDLEN]; /* new name */
|
||||
};
|
||||
|
||||
/* MPH_INFORMATION_REQ payload */
|
||||
struct ph_info_ch {
|
||||
__u32 protocol;
|
||||
__u64 Flags;
|
||||
};
|
||||
|
||||
struct ph_info_dch {
|
||||
struct ph_info_ch ch;
|
||||
__u16 state;
|
||||
__u16 num_bch;
|
||||
};
|
||||
|
||||
struct ph_info {
|
||||
struct ph_info_dch dch;
|
||||
struct ph_info_ch bch[];
|
||||
};
|
||||
|
||||
/* timer device ioctl */
|
||||
#define IMADDTIMER _IOR('I', 64, int)
|
||||
#define IMDELTIMER _IOR('I', 65, int)
|
||||
|
||||
/* socket ioctls */
|
||||
#define IMGETVERSION _IOR('I', 66, int)
|
||||
#define IMGETCOUNT _IOR('I', 67, int)
|
||||
#define IMGETDEVINFO _IOR('I', 68, int)
|
||||
#define IMCTRLREQ _IOR('I', 69, int)
|
||||
#define IMCLEAR_L2 _IOR('I', 70, int)
|
||||
#define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename)
|
||||
|
||||
static inline int
|
||||
test_channelmap(u_int nr, u_char *map)
|
||||
{
|
||||
@@ -312,6 +349,8 @@ clear_channelmap(u_int nr, u_char *map)
|
||||
#define MISDN_CTRL_SETPEER 0x0040
|
||||
#define MISDN_CTRL_UNSETPEER 0x0080
|
||||
#define MISDN_CTRL_RX_OFF 0x0100
|
||||
#define MISDN_CTRL_FILL_EMPTY 0x0200
|
||||
#define MISDN_CTRL_GETPEER 0x0400
|
||||
#define MISDN_CTRL_HW_FEATURES_OP 0x2000
|
||||
#define MISDN_CTRL_HW_FEATURES 0x2001
|
||||
#define MISDN_CTRL_HFC_OP 0x4000
|
||||
@@ -362,6 +401,7 @@ struct mISDN_ctrl_req {
|
||||
#define DEBUG_L2_TEI 0x00100000
|
||||
#define DEBUG_L2_TEIFSM 0x00200000
|
||||
#define DEBUG_TIMER 0x01000000
|
||||
#define DEBUG_CLOCK 0x02000000
|
||||
|
||||
#define mISDN_HEAD_P(s) ((struct mISDNhead *)&s->cb[0])
|
||||
#define mISDN_HEAD_PRIM(s) (((struct mISDNhead *)&s->cb[0])->prim)
|
||||
@@ -375,6 +415,7 @@ struct mISDN_ctrl_req {
|
||||
struct mISDNchannel;
|
||||
struct mISDNdevice;
|
||||
struct mISDNstack;
|
||||
struct mISDNclock;
|
||||
|
||||
struct channel_req {
|
||||
u_int protocol;
|
||||
@@ -423,7 +464,6 @@ struct mISDN_sock {
|
||||
struct mISDNdevice {
|
||||
struct mISDNchannel D;
|
||||
u_int id;
|
||||
char name[MISDN_MAX_IDLEN];
|
||||
u_int Dprotocols;
|
||||
u_int Bprotocols;
|
||||
u_int nrbchan;
|
||||
@@ -452,6 +492,16 @@ struct mISDNstack {
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef int (clockctl_func_t)(void *, int);
|
||||
|
||||
struct mISDNclock {
|
||||
struct list_head list;
|
||||
char name[64];
|
||||
int pri;
|
||||
clockctl_func_t *ctl;
|
||||
void *priv;
|
||||
};
|
||||
|
||||
/* global alloc/queue functions */
|
||||
|
||||
static inline struct sk_buff *
|
||||
@@ -498,12 +548,23 @@ _queue_data(struct mISDNchannel *ch, u_int prim,
|
||||
|
||||
/* global register/unregister functions */
|
||||
|
||||
extern int mISDN_register_device(struct mISDNdevice *, char *name);
|
||||
extern int mISDN_register_device(struct mISDNdevice *,
|
||||
struct device *parent, char *name);
|
||||
extern void mISDN_unregister_device(struct mISDNdevice *);
|
||||
extern int mISDN_register_Bprotocol(struct Bprotocol *);
|
||||
extern void mISDN_unregister_Bprotocol(struct Bprotocol *);
|
||||
extern struct mISDNclock *mISDN_register_clock(char *, int, clockctl_func_t *,
|
||||
void *);
|
||||
extern void mISDN_unregister_clock(struct mISDNclock *);
|
||||
|
||||
static inline struct mISDNdevice *dev_to_mISDN(struct device *dev)
|
||||
{
|
||||
return dev_get_drvdata(dev);
|
||||
}
|
||||
|
||||
extern void set_channel_address(struct mISDNchannel *, u_int, u_int);
|
||||
extern void mISDN_clock_update(struct mISDNclock *, int, struct timeval *);
|
||||
extern unsigned short mISDN_clock_get(void);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* mISDNIF_H */
|
||||
|
@@ -13,6 +13,7 @@
|
||||
#define EFS_SUPER_MAGIC 0x414A53
|
||||
#define EXT2_SUPER_MAGIC 0xEF53
|
||||
#define EXT3_SUPER_MAGIC 0xEF53
|
||||
#define XENFS_SUPER_MAGIC 0xabba1974
|
||||
#define EXT4_SUPER_MAGIC 0xEF53
|
||||
#define HPFS_SUPER_MAGIC 0xf995e849
|
||||
#define ISOFS_SUPER_MAGIC 0x9660
|
||||
|
@@ -19,22 +19,45 @@
|
||||
|
||||
#ifndef _LINUX_MEMCONTROL_H
|
||||
#define _LINUX_MEMCONTROL_H
|
||||
|
||||
#include <linux/cgroup.h>
|
||||
struct mem_cgroup;
|
||||
struct page_cgroup;
|
||||
struct page;
|
||||
struct mm_struct;
|
||||
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
|
||||
/*
|
||||
* All "charge" functions with gfp_mask should use GFP_KERNEL or
|
||||
* (gfp_mask & GFP_RECLAIM_MASK). In current implementatin, memcg doesn't
|
||||
* alloc memory but reclaims memory from all available zones. So, "where I want
|
||||
* memory from" bits of gfp_mask has no meaning. So any bits of that field is
|
||||
* available but adding a rule is better. charge functions' gfp_mask should
|
||||
* be set to GFP_KERNEL or gfp_mask & GFP_RECLAIM_MASK for avoiding ambiguous
|
||||
* codes.
|
||||
* (Of course, if memcg does memory allocation in future, GFP_KERNEL is sane.)
|
||||
*/
|
||||
|
||||
extern int mem_cgroup_charge(struct page *page, struct mm_struct *mm,
|
||||
extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm,
|
||||
gfp_t gfp_mask);
|
||||
/* for swap handling */
|
||||
extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
|
||||
struct page *page, gfp_t mask, struct mem_cgroup **ptr);
|
||||
extern void mem_cgroup_commit_charge_swapin(struct page *page,
|
||||
struct mem_cgroup *ptr);
|
||||
extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr);
|
||||
|
||||
extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
|
||||
gfp_t gfp_mask);
|
||||
extern void mem_cgroup_move_lists(struct page *page, enum lru_list lru);
|
||||
extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru);
|
||||
extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru);
|
||||
extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
|
||||
extern void mem_cgroup_del_lru(struct page *page);
|
||||
extern void mem_cgroup_move_lists(struct page *page,
|
||||
enum lru_list from, enum lru_list to);
|
||||
extern void mem_cgroup_uncharge_page(struct page *page);
|
||||
extern void mem_cgroup_uncharge_cache_page(struct page *page);
|
||||
extern int mem_cgroup_shrink_usage(struct mm_struct *mm, gfp_t gfp_mask);
|
||||
extern int mem_cgroup_shrink_usage(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask);
|
||||
|
||||
extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
|
||||
struct list_head *dst,
|
||||
@@ -47,12 +70,20 @@ int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
|
||||
|
||||
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
|
||||
|
||||
#define mm_match_cgroup(mm, cgroup) \
|
||||
((cgroup) == mem_cgroup_from_task((mm)->owner))
|
||||
static inline
|
||||
int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
|
||||
{
|
||||
struct mem_cgroup *mem;
|
||||
rcu_read_lock();
|
||||
mem = mem_cgroup_from_task((mm)->owner);
|
||||
rcu_read_unlock();
|
||||
return cgroup == mem;
|
||||
}
|
||||
|
||||
extern int
|
||||
mem_cgroup_prepare_migration(struct page *page, struct page *newpage);
|
||||
extern void mem_cgroup_end_migration(struct page *page);
|
||||
mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr);
|
||||
extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
|
||||
struct page *oldpage, struct page *newpage);
|
||||
|
||||
/*
|
||||
* For memory reclaim.
|
||||
@@ -65,13 +96,32 @@ extern void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
|
||||
int priority);
|
||||
extern void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
|
||||
int priority);
|
||||
int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
|
||||
unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
|
||||
struct zone *zone,
|
||||
enum lru_list lru);
|
||||
struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
|
||||
struct zone *zone);
|
||||
struct zone_reclaim_stat*
|
||||
mem_cgroup_get_reclaim_stat_from_page(struct page *page);
|
||||
|
||||
extern long mem_cgroup_calc_reclaim(struct mem_cgroup *mem, struct zone *zone,
|
||||
int priority, enum lru_list lru);
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
|
||||
extern int do_swap_account;
|
||||
#endif
|
||||
|
||||
static inline bool mem_cgroup_disabled(void)
|
||||
{
|
||||
if (mem_cgroup_subsys.disabled)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
extern bool mem_cgroup_oom_called(struct task_struct *task);
|
||||
|
||||
#else /* CONFIG_CGROUP_MEM_RES_CTLR */
|
||||
static inline int mem_cgroup_charge(struct page *page,
|
||||
struct mem_cgroup;
|
||||
|
||||
static inline int mem_cgroup_newpage_charge(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask)
|
||||
{
|
||||
return 0;
|
||||
@@ -83,6 +133,21 @@ static inline int mem_cgroup_cache_charge(struct page *page,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
|
||||
struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_commit_charge_swapin(struct page *page,
|
||||
struct mem_cgroup *ptr)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_uncharge_page(struct page *page)
|
||||
{
|
||||
}
|
||||
@@ -91,12 +156,33 @@ static inline void mem_cgroup_uncharge_cache_page(struct page *page)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int mem_cgroup_shrink_usage(struct mm_struct *mm, gfp_t gfp_mask)
|
||||
static inline int mem_cgroup_shrink_usage(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_move_lists(struct page *page, bool active)
|
||||
static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_del_lru(struct page *page)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
static inline void
|
||||
mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -112,12 +198,14 @@ static inline int task_in_mem_cgroup(struct task_struct *task,
|
||||
}
|
||||
|
||||
static inline int
|
||||
mem_cgroup_prepare_migration(struct page *page, struct page *newpage)
|
||||
mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_end_migration(struct page *page)
|
||||
static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
|
||||
struct page *oldpage,
|
||||
struct page *newpage)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -146,12 +234,42 @@ static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
|
||||
{
|
||||
}
|
||||
|
||||
static inline long mem_cgroup_calc_reclaim(struct mem_cgroup *mem,
|
||||
struct zone *zone, int priority,
|
||||
enum lru_list lru)
|
||||
static inline bool mem_cgroup_disabled(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool mem_cgroup_oom_called(struct task_struct *task)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int
|
||||
mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
|
||||
enum lru_list lru)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static inline struct zone_reclaim_stat*
|
||||
mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct zone_reclaim_stat*
|
||||
mem_cgroup_get_reclaim_stat_from_page(struct page *page)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_CGROUP_MEM_CONT */
|
||||
|
||||
#endif /* _LINUX_MEMCONTROL_H */
|
||||
|
@@ -100,8 +100,8 @@ struct mspro_param_register {
|
||||
#define MEMSTICK_SYS_PAR8 0x40
|
||||
#define MEMSTICK_SYS_SERIAL 0x80
|
||||
|
||||
unsigned short data_count;
|
||||
unsigned int data_address;
|
||||
__be16 data_count;
|
||||
__be32 data_address;
|
||||
unsigned char tpc_param;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
@@ -13,6 +13,10 @@
|
||||
#ifndef __LINUX_MFD_WM8350_PMIC_H
|
||||
#define __LINUX_MFD_WM8350_PMIC_H
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
/*
|
||||
* Register values.
|
||||
*/
|
||||
@@ -700,6 +704,33 @@ struct wm8350;
|
||||
struct platform_device;
|
||||
struct regulator_init_data;
|
||||
|
||||
/*
|
||||
* WM8350 LED platform data
|
||||
*/
|
||||
struct wm8350_led_platform_data {
|
||||
const char *name;
|
||||
const char *default_trigger;
|
||||
int max_uA;
|
||||
};
|
||||
|
||||
struct wm8350_led {
|
||||
struct platform_device *pdev;
|
||||
struct mutex mutex;
|
||||
struct work_struct work;
|
||||
spinlock_t value_lock;
|
||||
enum led_brightness value;
|
||||
struct led_classdev cdev;
|
||||
int max_uA_index;
|
||||
int enabled;
|
||||
|
||||
struct regulator *isink;
|
||||
struct regulator_consumer_supply isink_consumer;
|
||||
struct regulator_init_data isink_init;
|
||||
struct regulator *dcdc;
|
||||
struct regulator_consumer_supply dcdc_consumer;
|
||||
struct regulator_init_data dcdc_init;
|
||||
};
|
||||
|
||||
struct wm8350_pmic {
|
||||
/* Number of regulators of each type on this device */
|
||||
int max_dcdc;
|
||||
@@ -717,10 +748,15 @@ struct wm8350_pmic {
|
||||
|
||||
/* regulator devices */
|
||||
struct platform_device *pdev[NUM_WM8350_REGULATORS];
|
||||
|
||||
/* LED devices */
|
||||
struct wm8350_led led[2];
|
||||
};
|
||||
|
||||
int wm8350_register_regulator(struct wm8350 *wm8350, int reg,
|
||||
struct regulator_init_data *initdata);
|
||||
int wm8350_register_led(struct wm8350 *wm8350, int lednum, int dcdc, int isink,
|
||||
struct wm8350_led_platform_data *pdata);
|
||||
|
||||
/*
|
||||
* Additional DCDC control not supported via regulator API
|
||||
|
@@ -56,19 +56,9 @@ extern unsigned long mmap_min_addr;
|
||||
|
||||
extern struct kmem_cache *vm_area_cachep;
|
||||
|
||||
/*
|
||||
* This struct defines the per-mm list of VMAs for uClinux. If CONFIG_MMU is
|
||||
* disabled, then there's a single shared list of VMAs maintained by the
|
||||
* system, and mm's subscribe to these individually
|
||||
*/
|
||||
struct vm_list_struct {
|
||||
struct vm_list_struct *next;
|
||||
struct vm_area_struct *vma;
|
||||
};
|
||||
|
||||
#ifndef CONFIG_MMU
|
||||
extern struct rb_root nommu_vma_tree;
|
||||
extern struct rw_semaphore nommu_vma_sem;
|
||||
extern struct rb_root nommu_region_tree;
|
||||
extern struct rw_semaphore nommu_region_sem;
|
||||
|
||||
extern unsigned int kobjsize(const void *objp);
|
||||
#endif
|
||||
@@ -1061,6 +1051,7 @@ extern void memmap_init_zone(unsigned long, int, unsigned long,
|
||||
unsigned long, enum memmap_context);
|
||||
extern void setup_per_zone_pages_min(void);
|
||||
extern void mem_init(void);
|
||||
extern void __init mmap_init(void);
|
||||
extern void show_mem(void);
|
||||
extern void si_meminfo(struct sysinfo * val);
|
||||
extern void si_meminfo_node(struct sysinfo *val, int nid);
|
||||
@@ -1072,6 +1063,9 @@ extern void setup_per_cpu_pageset(void);
|
||||
static inline void setup_per_cpu_pageset(void) {}
|
||||
#endif
|
||||
|
||||
/* nommu.c */
|
||||
extern atomic_t mmap_pages_allocated;
|
||||
|
||||
/* prio_tree.c */
|
||||
void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
|
||||
void vma_prio_tree_insert(struct vm_area_struct *, struct prio_tree_root *);
|
||||
|
@@ -28,6 +28,7 @@ add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l)
|
||||
{
|
||||
list_add(&page->lru, &zone->lru[l].list);
|
||||
__inc_zone_state(zone, NR_LRU_BASE + l);
|
||||
mem_cgroup_add_lru_list(page, l);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -35,6 +36,7 @@ del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l)
|
||||
{
|
||||
list_del(&page->lru);
|
||||
__dec_zone_state(zone, NR_LRU_BASE + l);
|
||||
mem_cgroup_del_lru_list(page, l);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -54,6 +56,7 @@ del_page_from_lru(struct zone *zone, struct page *page)
|
||||
l += page_is_file_cache(page);
|
||||
}
|
||||
__dec_zone_state(zone, NR_LRU_BASE + l);
|
||||
mem_cgroup_del_lru_list(page, l);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,23 +81,4 @@ static inline enum lru_list page_lru(struct page *page)
|
||||
return lru;
|
||||
}
|
||||
|
||||
/**
|
||||
* inactive_anon_is_low - check if anonymous pages need to be deactivated
|
||||
* @zone: zone to check
|
||||
*
|
||||
* Returns true if the zone does not have enough inactive anon pages,
|
||||
* meaning some active anon pages need to be deactivated.
|
||||
*/
|
||||
static inline int inactive_anon_is_low(struct zone *zone)
|
||||
{
|
||||
unsigned long active, inactive;
|
||||
|
||||
active = zone_page_state(zone, NR_ACTIVE_ANON);
|
||||
inactive = zone_page_state(zone, NR_INACTIVE_ANON);
|
||||
|
||||
if (inactive * zone->inactive_ratio < active)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@@ -96,6 +96,23 @@ struct page {
|
||||
#endif /* WANT_PAGE_VIRTUAL */
|
||||
};
|
||||
|
||||
/*
|
||||
* A region containing a mapping of a non-memory backed file under NOMMU
|
||||
* conditions. These are held in a global tree and are pinned by the VMAs that
|
||||
* map parts of them.
|
||||
*/
|
||||
struct vm_region {
|
||||
struct rb_node vm_rb; /* link in global region tree */
|
||||
unsigned long vm_flags; /* VMA vm_flags */
|
||||
unsigned long vm_start; /* start address of region */
|
||||
unsigned long vm_end; /* region initialised to here */
|
||||
unsigned long vm_top; /* region allocated to here */
|
||||
unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */
|
||||
struct file *vm_file; /* the backing file or NULL */
|
||||
|
||||
atomic_t vm_usage; /* region usage count */
|
||||
};
|
||||
|
||||
/*
|
||||
* This struct defines a memory VMM memory area. There is one of these
|
||||
* per VM-area/task. A VM area is any part of the process virtual memory
|
||||
@@ -152,7 +169,7 @@ struct vm_area_struct {
|
||||
unsigned long vm_truncate_count;/* truncate_count or restart_addr */
|
||||
|
||||
#ifndef CONFIG_MMU
|
||||
atomic_t vm_usage; /* refcount (VMAs shared if !MMU) */
|
||||
struct vm_region *vm_region; /* NOMMU mapping region */
|
||||
#endif
|
||||
#ifdef CONFIG_NUMA
|
||||
struct mempolicy *vm_policy; /* NUMA policy for the VMA */
|
||||
|
@@ -263,6 +263,19 @@ enum zone_type {
|
||||
#error ZONES_SHIFT -- too many zones configured adjust calculation
|
||||
#endif
|
||||
|
||||
struct zone_reclaim_stat {
|
||||
/*
|
||||
* The pageout code in vmscan.c keeps track of how many of the
|
||||
* mem/swap backed and file backed pages are refeferenced.
|
||||
* The higher the rotated/scanned ratio, the more valuable
|
||||
* that cache is.
|
||||
*
|
||||
* The anon LRU stats live in [0], file LRU stats in [1]
|
||||
*/
|
||||
unsigned long recent_rotated[2];
|
||||
unsigned long recent_scanned[2];
|
||||
};
|
||||
|
||||
struct zone {
|
||||
/* Fields commonly accessed by the page allocator */
|
||||
unsigned long pages_min, pages_low, pages_high;
|
||||
@@ -315,16 +328,7 @@ struct zone {
|
||||
unsigned long nr_scan;
|
||||
} lru[NR_LRU_LISTS];
|
||||
|
||||
/*
|
||||
* The pageout code in vmscan.c keeps track of how many of the
|
||||
* mem/swap backed and file backed pages are refeferenced.
|
||||
* The higher the rotated/scanned ratio, the more valuable
|
||||
* that cache is.
|
||||
*
|
||||
* The anon LRU stats live in [0], file LRU stats in [1]
|
||||
*/
|
||||
unsigned long recent_rotated[2];
|
||||
unsigned long recent_scanned[2];
|
||||
struct zone_reclaim_stat reclaim_stat;
|
||||
|
||||
unsigned long pages_scanned; /* since last reclaim */
|
||||
unsigned long flags; /* zone flags, see below */
|
||||
|
@@ -520,6 +520,7 @@ struct cfi_fixup {
|
||||
|
||||
#define CFI_MFR_AMD 0x0001
|
||||
#define CFI_MFR_ATMEL 0x001F
|
||||
#define CFI_MFR_SAMSUNG 0x00EC
|
||||
#define CFI_MFR_ST 0x0020 /* STMicroelectronics */
|
||||
|
||||
void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups);
|
||||
|
@@ -32,25 +32,25 @@
|
||||
#define _LINUX_FTL_H
|
||||
|
||||
typedef struct erase_unit_header_t {
|
||||
u_int8_t LinkTargetTuple[5];
|
||||
u_int8_t DataOrgTuple[10];
|
||||
u_int8_t NumTransferUnits;
|
||||
u_int32_t EraseCount;
|
||||
u_int16_t LogicalEUN;
|
||||
u_int8_t BlockSize;
|
||||
u_int8_t EraseUnitSize;
|
||||
u_int16_t FirstPhysicalEUN;
|
||||
u_int16_t NumEraseUnits;
|
||||
u_int32_t FormattedSize;
|
||||
u_int32_t FirstVMAddress;
|
||||
u_int16_t NumVMPages;
|
||||
u_int8_t Flags;
|
||||
u_int8_t Code;
|
||||
u_int32_t SerialNumber;
|
||||
u_int32_t AltEUHOffset;
|
||||
u_int32_t BAMOffset;
|
||||
u_int8_t Reserved[12];
|
||||
u_int8_t EndTuple[2];
|
||||
uint8_t LinkTargetTuple[5];
|
||||
uint8_t DataOrgTuple[10];
|
||||
uint8_t NumTransferUnits;
|
||||
uint32_t EraseCount;
|
||||
uint16_t LogicalEUN;
|
||||
uint8_t BlockSize;
|
||||
uint8_t EraseUnitSize;
|
||||
uint16_t FirstPhysicalEUN;
|
||||
uint16_t NumEraseUnits;
|
||||
uint32_t FormattedSize;
|
||||
uint32_t FirstVMAddress;
|
||||
uint16_t NumVMPages;
|
||||
uint8_t Flags;
|
||||
uint8_t Code;
|
||||
uint32_t SerialNumber;
|
||||
uint32_t AltEUHOffset;
|
||||
uint32_t BAMOffset;
|
||||
uint8_t Reserved[12];
|
||||
uint8_t EndTuple[2];
|
||||
} erase_unit_header_t;
|
||||
|
||||
/* Flags in erase_unit_header_t */
|
||||
|
@@ -223,6 +223,7 @@ struct map_info {
|
||||
must leave it enabled. */
|
||||
void (*set_vpp)(struct map_info *, int);
|
||||
|
||||
unsigned long pfow_base;
|
||||
unsigned long map_priv_1;
|
||||
unsigned long map_priv_2;
|
||||
void *fldrv_priv;
|
||||
|
@@ -15,6 +15,8 @@
|
||||
#include <linux/mtd/compatmac.h>
|
||||
#include <mtd/mtd-abi.h>
|
||||
|
||||
#include <asm/div64.h>
|
||||
|
||||
#define MTD_CHAR_MAJOR 90
|
||||
#define MTD_BLOCK_MAJOR 31
|
||||
#define MAX_MTD_DEVICES 32
|
||||
@@ -25,20 +27,20 @@
|
||||
#define MTD_ERASE_DONE 0x08
|
||||
#define MTD_ERASE_FAILED 0x10
|
||||
|
||||
#define MTD_FAIL_ADDR_UNKNOWN 0xffffffff
|
||||
#define MTD_FAIL_ADDR_UNKNOWN -1LL
|
||||
|
||||
/* If the erase fails, fail_addr might indicate exactly which block failed. If
|
||||
fail_addr = MTD_FAIL_ADDR_UNKNOWN, the failure was not at the device level or was not
|
||||
specific to any particular block. */
|
||||
struct erase_info {
|
||||
struct mtd_info *mtd;
|
||||
u_int32_t addr;
|
||||
u_int32_t len;
|
||||
u_int32_t fail_addr;
|
||||
uint64_t addr;
|
||||
uint64_t len;
|
||||
uint64_t fail_addr;
|
||||
u_long time;
|
||||
u_long retries;
|
||||
u_int dev;
|
||||
u_int cell;
|
||||
unsigned dev;
|
||||
unsigned cell;
|
||||
void (*callback) (struct erase_info *self);
|
||||
u_long priv;
|
||||
u_char state;
|
||||
@@ -46,9 +48,9 @@ struct erase_info {
|
||||
};
|
||||
|
||||
struct mtd_erase_region_info {
|
||||
u_int32_t offset; /* At which this region starts, from the beginning of the MTD */
|
||||
u_int32_t erasesize; /* For this region */
|
||||
u_int32_t numblocks; /* Number of blocks of erasesize in this region */
|
||||
uint64_t offset; /* At which this region starts, from the beginning of the MTD */
|
||||
uint32_t erasesize; /* For this region */
|
||||
uint32_t numblocks; /* Number of blocks of erasesize in this region */
|
||||
unsigned long *lockmap; /* If keeping bitmap of locks */
|
||||
};
|
||||
|
||||
@@ -83,7 +85,7 @@ typedef enum {
|
||||
* @datbuf: data buffer - if NULL only oob data are read/written
|
||||
* @oobbuf: oob data buffer
|
||||
*
|
||||
* Note, it is allowed to read more then one OOB area at one go, but not write.
|
||||
* Note, it is allowed to read more than one OOB area at one go, but not write.
|
||||
* The interface assumes that the OOB write requests program only one page's
|
||||
* OOB area.
|
||||
*/
|
||||
@@ -100,14 +102,14 @@ struct mtd_oob_ops {
|
||||
|
||||
struct mtd_info {
|
||||
u_char type;
|
||||
u_int32_t flags;
|
||||
u_int32_t size; // Total size of the MTD
|
||||
uint32_t flags;
|
||||
uint64_t size; // Total size of the MTD
|
||||
|
||||
/* "Major" erase size for the device. Naïve users may take this
|
||||
* to be the only erase size available, or may use the more detailed
|
||||
* information below if they desire
|
||||
*/
|
||||
u_int32_t erasesize;
|
||||
uint32_t erasesize;
|
||||
/* Minimal writable flash unit size. In case of NOR flash it is 1 (even
|
||||
* though individual bits can be cleared), in case of NAND flash it is
|
||||
* one NAND page (or half, or one-fourths of it), in case of ECC-ed NOR
|
||||
@@ -115,10 +117,20 @@ struct mtd_info {
|
||||
* Any driver registering a struct mtd_info must ensure a writesize of
|
||||
* 1 or larger.
|
||||
*/
|
||||
u_int32_t writesize;
|
||||
uint32_t writesize;
|
||||
|
||||
u_int32_t oobsize; // Amount of OOB data per block (e.g. 16)
|
||||
u_int32_t oobavail; // Available OOB bytes per block
|
||||
uint32_t oobsize; // Amount of OOB data per block (e.g. 16)
|
||||
uint32_t oobavail; // Available OOB bytes per block
|
||||
|
||||
/*
|
||||
* If erasesize is a power of 2 then the shift is stored in
|
||||
* erasesize_shift otherwise erasesize_shift is zero. Ditto writesize.
|
||||
*/
|
||||
unsigned int erasesize_shift;
|
||||
unsigned int writesize_shift;
|
||||
/* Masks based on erasesize_shift and writesize_shift */
|
||||
unsigned int erasesize_mask;
|
||||
unsigned int writesize_mask;
|
||||
|
||||
// Kernel-only stuff starts here.
|
||||
const char *name;
|
||||
@@ -190,8 +202,8 @@ struct mtd_info {
|
||||
void (*sync) (struct mtd_info *mtd);
|
||||
|
||||
/* Chip-supported device locking */
|
||||
int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len);
|
||||
int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len);
|
||||
int (*lock) (struct mtd_info *mtd, loff_t ofs, uint64_t len);
|
||||
int (*unlock) (struct mtd_info *mtd, loff_t ofs, uint64_t len);
|
||||
|
||||
/* Power Management functions */
|
||||
int (*suspend) (struct mtd_info *mtd);
|
||||
@@ -221,6 +233,35 @@ struct mtd_info {
|
||||
void (*put_device) (struct mtd_info *mtd);
|
||||
};
|
||||
|
||||
static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd)
|
||||
{
|
||||
if (mtd->erasesize_shift)
|
||||
return sz >> mtd->erasesize_shift;
|
||||
do_div(sz, mtd->erasesize);
|
||||
return sz;
|
||||
}
|
||||
|
||||
static inline uint32_t mtd_mod_by_eb(uint64_t sz, struct mtd_info *mtd)
|
||||
{
|
||||
if (mtd->erasesize_shift)
|
||||
return sz & mtd->erasesize_mask;
|
||||
return do_div(sz, mtd->erasesize);
|
||||
}
|
||||
|
||||
static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd)
|
||||
{
|
||||
if (mtd->writesize_shift)
|
||||
return sz >> mtd->writesize_shift;
|
||||
do_div(sz, mtd->writesize);
|
||||
return sz;
|
||||
}
|
||||
|
||||
static inline uint32_t mtd_mod_by_ws(uint64_t sz, struct mtd_info *mtd)
|
||||
{
|
||||
if (mtd->writesize_shift)
|
||||
return sz & mtd->writesize_mask;
|
||||
return do_div(sz, mtd->writesize);
|
||||
}
|
||||
|
||||
/* Kernel-side ioctl definitions */
|
||||
|
||||
|
@@ -335,17 +335,12 @@ struct nand_buffers {
|
||||
* @erase_cmd: [INTERN] erase command write function, selectable due to AND support
|
||||
* @scan_bbt: [REPLACEABLE] function to scan bad block table
|
||||
* @chip_delay: [BOARDSPECIFIC] chip dependent delay for transfering data from array to read regs (tR)
|
||||
* @wq: [INTERN] wait queue to sleep on if a NAND operation is in progress
|
||||
* @state: [INTERN] the current state of the NAND device
|
||||
* @oob_poi: poison value buffer
|
||||
* @page_shift: [INTERN] number of address bits in a page (column address bits)
|
||||
* @phys_erase_shift: [INTERN] number of address bits in a physical eraseblock
|
||||
* @bbt_erase_shift: [INTERN] number of address bits in a bbt entry
|
||||
* @chip_shift: [INTERN] number of address bits in one chip
|
||||
* @datbuf: [INTERN] internal buffer for one page + oob
|
||||
* @oobbuf: [INTERN] oob buffer for one eraseblock
|
||||
* @oobdirty: [INTERN] indicates that oob_buf must be reinitialized
|
||||
* @data_poi: [INTERN] pointer to a data buffer
|
||||
* @options: [BOARDSPECIFIC] various chip options. They can partly be set to inform nand_scan about
|
||||
* special functionality. See the defines for further explanation
|
||||
* @badblockpos: [INTERN] position of the bad block marker in the oob area
|
||||
@@ -399,7 +394,7 @@ struct nand_chip {
|
||||
int bbt_erase_shift;
|
||||
int chip_shift;
|
||||
int numchips;
|
||||
unsigned long chipsize;
|
||||
uint64_t chipsize;
|
||||
int pagemask;
|
||||
int pagebuf;
|
||||
int subpagesize;
|
||||
|
@@ -36,9 +36,9 @@
|
||||
|
||||
struct mtd_partition {
|
||||
char *name; /* identifier string */
|
||||
u_int32_t size; /* partition size */
|
||||
u_int32_t offset; /* offset within the master MTD space */
|
||||
u_int32_t mask_flags; /* master MTD flags to mask out for this partition */
|
||||
uint64_t size; /* partition size */
|
||||
uint64_t offset; /* offset within the master MTD space */
|
||||
uint32_t mask_flags; /* master MTD flags to mask out for this partition */
|
||||
struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/
|
||||
struct mtd_info **mtdp; /* pointer to store the MTD object */
|
||||
};
|
||||
|
159
include/linux/mtd/pfow.h
Normal file
159
include/linux/mtd/pfow.h
Normal file
@@ -0,0 +1,159 @@
|
||||
/* Primary function overlay window definitions
|
||||
* and service functions used by LPDDR chips
|
||||
*/
|
||||
#ifndef __LINUX_MTD_PFOW_H
|
||||
#define __LINUX_MTD_PFOW_H
|
||||
|
||||
#include <linux/mtd/qinfo.h>
|
||||
|
||||
/* PFOW registers addressing */
|
||||
/* Address of symbol "P" */
|
||||
#define PFOW_QUERY_STRING_P 0x0000
|
||||
/* Address of symbol "F" */
|
||||
#define PFOW_QUERY_STRING_F 0x0002
|
||||
/* Address of symbol "O" */
|
||||
#define PFOW_QUERY_STRING_O 0x0004
|
||||
/* Address of symbol "W" */
|
||||
#define PFOW_QUERY_STRING_W 0x0006
|
||||
/* Identification info for LPDDR chip */
|
||||
#define PFOW_MANUFACTURER_ID 0x0020
|
||||
#define PFOW_DEVICE_ID 0x0022
|
||||
/* Address in PFOW where prog buffer can can be found */
|
||||
#define PFOW_PROGRAM_BUFFER_OFFSET 0x0040
|
||||
/* Size of program buffer in words */
|
||||
#define PFOW_PROGRAM_BUFFER_SIZE 0x0042
|
||||
/* Address command code register */
|
||||
#define PFOW_COMMAND_CODE 0x0080
|
||||
/* command data register */
|
||||
#define PFOW_COMMAND_DATA 0x0084
|
||||
/* command address register lower address bits */
|
||||
#define PFOW_COMMAND_ADDRESS_L 0x0088
|
||||
/* command address register upper address bits */
|
||||
#define PFOW_COMMAND_ADDRESS_H 0x008a
|
||||
/* number of bytes to be proggrammed lower address bits */
|
||||
#define PFOW_DATA_COUNT_L 0x0090
|
||||
/* number of bytes to be proggrammed higher address bits */
|
||||
#define PFOW_DATA_COUNT_H 0x0092
|
||||
/* command execution register, the only possible value is 0x01 */
|
||||
#define PFOW_COMMAND_EXECUTE 0x00c0
|
||||
/* 0x01 should be written at this address to clear buffer */
|
||||
#define PFOW_CLEAR_PROGRAM_BUFFER 0x00c4
|
||||
/* device program/erase suspend register */
|
||||
#define PFOW_PROGRAM_ERASE_SUSPEND 0x00c8
|
||||
/* device status register */
|
||||
#define PFOW_DSR 0x00cc
|
||||
|
||||
/* LPDDR memory device command codes */
|
||||
/* They are possible values of PFOW command code register */
|
||||
#define LPDDR_WORD_PROGRAM 0x0041
|
||||
#define LPDDR_BUFF_PROGRAM 0x00E9
|
||||
#define LPDDR_BLOCK_ERASE 0x0020
|
||||
#define LPDDR_LOCK_BLOCK 0x0061
|
||||
#define LPDDR_UNLOCK_BLOCK 0x0062
|
||||
#define LPDDR_READ_BLOCK_LOCK_STATUS 0x0065
|
||||
#define LPDDR_INFO_QUERY 0x0098
|
||||
#define LPDDR_READ_OTP 0x0097
|
||||
#define LPDDR_PROG_OTP 0x00C0
|
||||
#define LPDDR_RESUME 0x00D0
|
||||
|
||||
/* Defines possible value of PFOW command execution register */
|
||||
#define LPDDR_START_EXECUTION 0x0001
|
||||
|
||||
/* Defines possible value of PFOW program/erase suspend register */
|
||||
#define LPDDR_SUSPEND 0x0001
|
||||
|
||||
/* Possible values of PFOW device status register */
|
||||
/* access R - read; RC read & clearable */
|
||||
#define DSR_DPS (1<<1) /* RC; device protect status
|
||||
* 0 - not protected 1 - locked */
|
||||
#define DSR_PSS (1<<2) /* R; program suspend status;
|
||||
* 0-prog in progress/completed,
|
||||
* 1- prog suspended */
|
||||
#define DSR_VPPS (1<<3) /* RC; 0-Vpp OK, * 1-Vpp low */
|
||||
#define DSR_PROGRAM_STATUS (1<<4) /* RC; 0-successful, 1-error */
|
||||
#define DSR_ERASE_STATUS (1<<5) /* RC; erase or blank check status;
|
||||
* 0-success erase/blank check,
|
||||
* 1 blank check error */
|
||||
#define DSR_ESS (1<<6) /* R; erase suspend status;
|
||||
* 0-erase in progress/complete,
|
||||
* 1 erase suspended */
|
||||
#define DSR_READY_STATUS (1<<7) /* R; Device status
|
||||
* 0-busy,
|
||||
* 1-ready */
|
||||
#define DSR_RPS (0x3<<8) /* RC; region program status
|
||||
* 00 - Success,
|
||||
* 01-re-program attempt in region with
|
||||
* object mode data,
|
||||
* 10-object mode program w attempt in
|
||||
* region with control mode data
|
||||
* 11-attempt to program invalid half
|
||||
* with 0x41 command */
|
||||
#define DSR_AOS (1<<12) /* RC; 1- AO related failure */
|
||||
#define DSR_AVAILABLE (1<<15) /* R; Device availbility
|
||||
* 1 - Device available
|
||||
* 0 - not available */
|
||||
|
||||
/* The superset of all possible error bits in DSR */
|
||||
#define DSR_ERR 0x133A
|
||||
|
||||
static inline void send_pfow_command(struct map_info *map,
|
||||
unsigned long cmd_code, unsigned long adr,
|
||||
unsigned long len, map_word *datum)
|
||||
{
|
||||
int bits_per_chip = map_bankwidth(map) * 8;
|
||||
int chipnum;
|
||||
struct lpddr_private *lpddr = map->fldrv_priv;
|
||||
chipnum = adr >> lpddr->chipshift;
|
||||
|
||||
map_write(map, CMD(cmd_code), map->pfow_base + PFOW_COMMAND_CODE);
|
||||
map_write(map, CMD(adr & ((1<<bits_per_chip) - 1)),
|
||||
map->pfow_base + PFOW_COMMAND_ADDRESS_L);
|
||||
map_write(map, CMD(adr>>bits_per_chip),
|
||||
map->pfow_base + PFOW_COMMAND_ADDRESS_H);
|
||||
if (len) {
|
||||
map_write(map, CMD(len & ((1<<bits_per_chip) - 1)),
|
||||
map->pfow_base + PFOW_DATA_COUNT_L);
|
||||
map_write(map, CMD(len>>bits_per_chip),
|
||||
map->pfow_base + PFOW_DATA_COUNT_H);
|
||||
}
|
||||
if (datum)
|
||||
map_write(map, *datum, map->pfow_base + PFOW_COMMAND_DATA);
|
||||
|
||||
/* Command execution start */
|
||||
map_write(map, CMD(LPDDR_START_EXECUTION),
|
||||
map->pfow_base + PFOW_COMMAND_EXECUTE);
|
||||
}
|
||||
|
||||
static inline void print_drs_error(unsigned dsr)
|
||||
{
|
||||
int prog_status = (dsr & DSR_RPS) >> 8;
|
||||
|
||||
if (!(dsr & DSR_AVAILABLE))
|
||||
printk(KERN_NOTICE"DSR.15: (0) Device not Available\n");
|
||||
if (prog_status & 0x03)
|
||||
printk(KERN_NOTICE"DSR.9,8: (11) Attempt to program invalid "
|
||||
"half with 41h command\n");
|
||||
else if (prog_status & 0x02)
|
||||
printk(KERN_NOTICE"DSR.9,8: (10) Object Mode Program attempt "
|
||||
"in region with Control Mode data\n");
|
||||
else if (prog_status & 0x01)
|
||||
printk(KERN_NOTICE"DSR.9,8: (01) Program attempt in region "
|
||||
"with Object Mode data\n");
|
||||
if (!(dsr & DSR_READY_STATUS))
|
||||
printk(KERN_NOTICE"DSR.7: (0) Device is Busy\n");
|
||||
if (dsr & DSR_ESS)
|
||||
printk(KERN_NOTICE"DSR.6: (1) Erase Suspended\n");
|
||||
if (dsr & DSR_ERASE_STATUS)
|
||||
printk(KERN_NOTICE"DSR.5: (1) Erase/Blank check error\n");
|
||||
if (dsr & DSR_PROGRAM_STATUS)
|
||||
printk(KERN_NOTICE"DSR.4: (1) Program Error\n");
|
||||
if (dsr & DSR_VPPS)
|
||||
printk(KERN_NOTICE"DSR.3: (1) Vpp low detect, operation "
|
||||
"aborted\n");
|
||||
if (dsr & DSR_PSS)
|
||||
printk(KERN_NOTICE"DSR.2: (1) Program suspended\n");
|
||||
if (dsr & DSR_DPS)
|
||||
printk(KERN_NOTICE"DSR.1: (1) Aborted Erase/Program attempt "
|
||||
"on locked block\n");
|
||||
}
|
||||
#endif /* __LINUX_MTD_PFOW_H */
|
@@ -24,6 +24,7 @@ struct physmap_flash_data {
|
||||
unsigned int width;
|
||||
void (*set_vpp)(struct map_info *, int);
|
||||
unsigned int nr_parts;
|
||||
unsigned int pfow_base;
|
||||
struct mtd_partition *parts;
|
||||
};
|
||||
|
||||
|
91
include/linux/mtd/qinfo.h
Normal file
91
include/linux/mtd/qinfo.h
Normal file
@@ -0,0 +1,91 @@
|
||||
#ifndef __LINUX_MTD_QINFO_H
|
||||
#define __LINUX_MTD_QINFO_H
|
||||
|
||||
#include <linux/mtd/map.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/flashchip.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
/* lpddr_private describes lpddr flash chip in memory map
|
||||
* @ManufactId - Chip Manufacture ID
|
||||
* @DevId - Chip Device ID
|
||||
* @qinfo - pointer to qinfo records describing the chip
|
||||
* @numchips - number of chips including virual RWW partitions
|
||||
* @chipshift - Chip/partiton size 2^chipshift
|
||||
* @chips - per-chip data structure
|
||||
*/
|
||||
struct lpddr_private {
|
||||
uint16_t ManufactId;
|
||||
uint16_t DevId;
|
||||
struct qinfo_chip *qinfo;
|
||||
int numchips;
|
||||
unsigned long chipshift;
|
||||
struct flchip chips[0];
|
||||
};
|
||||
|
||||
/* qinfo_query_info structure contains request information for
|
||||
* each qinfo record
|
||||
* @major - major number of qinfo record
|
||||
* @major - minor number of qinfo record
|
||||
* @id_str - descriptive string to access the record
|
||||
* @desc - detailed description for the qinfo record
|
||||
*/
|
||||
struct qinfo_query_info {
|
||||
uint8_t major;
|
||||
uint8_t minor;
|
||||
char *id_str;
|
||||
char *desc;
|
||||
};
|
||||
|
||||
/*
|
||||
* qinfo_chip structure contains necessary qinfo records data
|
||||
* @DevSizeShift - Device size 2^n bytes
|
||||
* @BufSizeShift - Program buffer size 2^n bytes
|
||||
* @TotalBlocksNum - Total number of blocks
|
||||
* @UniformBlockSizeShift - Uniform block size 2^UniformBlockSizeShift bytes
|
||||
* @HWPartsNum - Number of hardware partitions
|
||||
* @SuspEraseSupp - Suspend erase supported
|
||||
* @SingleWordProgTime - Single word program 2^SingleWordProgTime u-sec
|
||||
* @ProgBufferTime - Program buffer write 2^ProgBufferTime u-sec
|
||||
* @BlockEraseTime - Block erase 2^BlockEraseTime m-sec
|
||||
*/
|
||||
struct qinfo_chip {
|
||||
/* General device info */
|
||||
uint16_t DevSizeShift;
|
||||
uint16_t BufSizeShift;
|
||||
/* Erase block information */
|
||||
uint16_t TotalBlocksNum;
|
||||
uint16_t UniformBlockSizeShift;
|
||||
/* Partition information */
|
||||
uint16_t HWPartsNum;
|
||||
/* Optional features */
|
||||
uint16_t SuspEraseSupp;
|
||||
/* Operation typical time */
|
||||
uint16_t SingleWordProgTime;
|
||||
uint16_t ProgBufferTime;
|
||||
uint16_t BlockEraseTime;
|
||||
};
|
||||
|
||||
/* defines for fixup usage */
|
||||
#define LPDDR_MFR_ANY 0xffff
|
||||
#define LPDDR_ID_ANY 0xffff
|
||||
#define NUMONYX_MFGR_ID 0x0089
|
||||
#define R18_DEVICE_ID_1G 0x893c
|
||||
|
||||
static inline map_word lpddr_build_cmd(u_long cmd, struct map_info *map)
|
||||
{
|
||||
map_word val = { {0} };
|
||||
val.x[0] = cmd;
|
||||
return val;
|
||||
}
|
||||
|
||||
#define CMD(x) lpddr_build_cmd(x, map)
|
||||
#define CMDVAL(cmd) cmd.x[0]
|
||||
|
||||
struct mtd_info *lpddr_cmdset(struct map_info *);
|
||||
|
||||
#endif
|
||||
|
20
include/linux/mtd/sharpsl.h
Normal file
20
include/linux/mtd/sharpsl.h
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* SharpSL NAND support
|
||||
*
|
||||
* Copyright (C) 2008 Dmitry Baryshkov
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/nand_ecc.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
struct sharpsl_nand_platform_data {
|
||||
struct nand_bbt_descr *badblock_pattern;
|
||||
struct nand_ecclayout *ecc_layout;
|
||||
struct mtd_partition *partitions;
|
||||
unsigned int nr_partitions;
|
||||
};
|
@@ -87,7 +87,7 @@ struct ncp_objectname_ioctl
|
||||
#define NCP_AUTH_NDS 0x32
|
||||
int auth_type;
|
||||
size_t object_name_len;
|
||||
void __user * object_name; /* an userspace data, in most cases user name */
|
||||
void __user * object_name; /* a userspace data, in most cases user name */
|
||||
};
|
||||
|
||||
struct ncp_privatedata_ioctl
|
||||
|
@@ -1125,9 +1125,6 @@ struct softnet_data
|
||||
struct sk_buff *completion_queue;
|
||||
|
||||
struct napi_struct backlog;
|
||||
#ifdef CONFIG_NET_DMA
|
||||
struct dma_chan *net_dma;
|
||||
#endif
|
||||
};
|
||||
|
||||
DECLARE_PER_CPU(struct softnet_data,softnet_data);
|
||||
@@ -1373,8 +1370,14 @@ extern int netif_rx_ni(struct sk_buff *skb);
|
||||
#define HAVE_NETIF_RECEIVE_SKB 1
|
||||
extern int netif_receive_skb(struct sk_buff *skb);
|
||||
extern void napi_gro_flush(struct napi_struct *napi);
|
||||
extern int dev_gro_receive(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
extern int napi_gro_receive(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
extern void napi_reuse_skb(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi,
|
||||
struct napi_gro_fraginfo *info);
|
||||
extern int napi_gro_frags(struct napi_struct *napi,
|
||||
struct napi_gro_fraginfo *info);
|
||||
extern void netif_nit_deliver(struct sk_buff *skb);
|
||||
|
@@ -88,6 +88,8 @@
|
||||
#define NFS4_ACE_GENERIC_EXECUTE 0x001200A0
|
||||
#define NFS4_ACE_MASK_ALL 0x001F01FF
|
||||
|
||||
#define NFS4_MAX_UINT64 (~(u64)0)
|
||||
|
||||
enum nfs4_acl_whotype {
|
||||
NFS4_ACL_WHO_NAMED = 0,
|
||||
NFS4_ACL_WHO_OWNER,
|
||||
|
@@ -23,7 +23,6 @@
|
||||
/*
|
||||
* nfsd version
|
||||
*/
|
||||
#define NFSD_VERSION "0.5"
|
||||
#define NFSD_SUPPORTED_MINOR_VERSION 0
|
||||
|
||||
/*
|
||||
|
@@ -68,6 +68,10 @@ struct nfs_fhbase_old {
|
||||
* 1 - 4 byte user specified identifier
|
||||
* 2 - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
|
||||
* 3 - 4 byte device id, encoded for user-space, 4 byte inode number
|
||||
* 4 - 4 byte inode number and 4 byte uuid
|
||||
* 5 - 8 byte uuid
|
||||
* 6 - 16 byte uuid
|
||||
* 7 - 8 byte inode number and 16 byte uuid
|
||||
*
|
||||
* The fileid_type identified how the file within the filesystem is encoded.
|
||||
* This is (will be) passed to, and set by, the underlying filesystem if it supports
|
||||
|
18
include/linux/nwpserial.h
Normal file
18
include/linux/nwpserial.h
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Serial Port driver for a NWP uart device
|
||||
*
|
||||
* Copyright (C) 2008 IBM Corp., Benjamin Krill <ben@codiert.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
*/
|
||||
#ifndef _NWPSERIAL_H
|
||||
#define _NWPSERIAL_H
|
||||
|
||||
int nwpserial_register_port(struct uart_port *port);
|
||||
void nwpserial_unregister_port(int line);
|
||||
|
||||
#endif /* _NWPSERIAL_H */
|
@@ -164,4 +164,22 @@ void oprofile_put_buff(unsigned long *buf, unsigned int start,
|
||||
unsigned long oprofile_get_cpu_buffer_size(void);
|
||||
void oprofile_cpu_buffer_inc_smpl_lost(void);
|
||||
|
||||
/* cpu buffer functions */
|
||||
|
||||
struct op_sample;
|
||||
|
||||
struct op_entry {
|
||||
struct ring_buffer_event *event;
|
||||
struct op_sample *sample;
|
||||
unsigned long irq_flags;
|
||||
unsigned long size;
|
||||
unsigned long *data;
|
||||
};
|
||||
|
||||
void oprofile_write_reserve(struct op_entry *entry,
|
||||
struct pt_regs * const regs,
|
||||
unsigned long pc, int code, int size);
|
||||
int oprofile_add_data(struct op_entry *entry, unsigned long val);
|
||||
int oprofile_write_commit(struct op_entry *entry);
|
||||
|
||||
#endif /* OPROFILE_H */
|
||||
|
7
include/linux/oxu210hp.h
Normal file
7
include/linux/oxu210hp.h
Normal file
@@ -0,0 +1,7 @@
|
||||
/* platform data for the OXU210HP HCD */
|
||||
|
||||
struct oxu210hp_platform_data {
|
||||
unsigned int bus16:1;
|
||||
unsigned int use_hcd_otg:1;
|
||||
unsigned int use_hcd_sph:1;
|
||||
};
|
@@ -26,10 +26,6 @@ enum {
|
||||
PCG_LOCK, /* page cgroup is locked */
|
||||
PCG_CACHE, /* charged as cache */
|
||||
PCG_USED, /* this object is in use. */
|
||||
/* flags for LRU placement */
|
||||
PCG_ACTIVE, /* page is active in this cgroup */
|
||||
PCG_FILE, /* page is file system backed */
|
||||
PCG_UNEVICTABLE, /* page is unevictableable */
|
||||
};
|
||||
|
||||
#define TESTPCGFLAG(uname, lname) \
|
||||
@@ -50,19 +46,6 @@ TESTPCGFLAG(Cache, CACHE)
|
||||
TESTPCGFLAG(Used, USED)
|
||||
CLEARPCGFLAG(Used, USED)
|
||||
|
||||
/* LRU management flags (from global-lru definition) */
|
||||
TESTPCGFLAG(File, FILE)
|
||||
SETPCGFLAG(File, FILE)
|
||||
CLEARPCGFLAG(File, FILE)
|
||||
|
||||
TESTPCGFLAG(Active, ACTIVE)
|
||||
SETPCGFLAG(Active, ACTIVE)
|
||||
CLEARPCGFLAG(Active, ACTIVE)
|
||||
|
||||
TESTPCGFLAG(Unevictable, UNEVICTABLE)
|
||||
SETPCGFLAG(Unevictable, UNEVICTABLE)
|
||||
CLEARPCGFLAG(Unevictable, UNEVICTABLE)
|
||||
|
||||
static inline int page_cgroup_nid(struct page_cgroup *pc)
|
||||
{
|
||||
return page_to_nid(pc->page);
|
||||
@@ -104,5 +87,40 @@ static inline void page_cgroup_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
|
||||
#include <linux/swap.h>
|
||||
extern struct mem_cgroup *
|
||||
swap_cgroup_record(swp_entry_t ent, struct mem_cgroup *mem);
|
||||
extern struct mem_cgroup *lookup_swap_cgroup(swp_entry_t ent);
|
||||
extern int swap_cgroup_swapon(int type, unsigned long max_pages);
|
||||
extern void swap_cgroup_swapoff(int type);
|
||||
#else
|
||||
#include <linux/swap.h>
|
||||
|
||||
static inline
|
||||
struct mem_cgroup *swap_cgroup_record(swp_entry_t ent, struct mem_cgroup *mem)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline
|
||||
struct mem_cgroup *lookup_swap_cgroup(swp_entry_t ent)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int
|
||||
swap_cgroup_swapon(int type, unsigned long max_pages)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void swap_cgroup_swapoff(int type)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -8,6 +8,8 @@
|
||||
#ifndef _PCI_ACPI_H_
|
||||
#define _PCI_ACPI_H_
|
||||
|
||||
#include <linux/acpi.h>
|
||||
|
||||
#define OSC_QUERY_TYPE 0
|
||||
#define OSC_SUPPORT_TYPE 1
|
||||
#define OSC_CONTROL_TYPE 2
|
||||
@@ -48,15 +50,7 @@
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
extern acpi_status pci_osc_control_set(acpi_handle handle, u32 flags);
|
||||
extern acpi_status __pci_osc_support_set(u32 flags, const char *hid);
|
||||
static inline acpi_status pci_osc_support_set(u32 flags)
|
||||
{
|
||||
return __pci_osc_support_set(flags, PCI_ROOT_HID_STRING);
|
||||
}
|
||||
static inline acpi_status pcie_osc_support_set(u32 flags)
|
||||
{
|
||||
return __pci_osc_support_set(flags, PCI_EXPRESS_ROOT_HID_STRING);
|
||||
}
|
||||
int pci_acpi_osc_support(acpi_handle handle, u32 flags);
|
||||
static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
|
||||
{
|
||||
/* Find root host bridge */
|
||||
@@ -66,6 +60,15 @@ static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
|
||||
return acpi_get_pci_rootbridge_handle(pci_domain_nr(pdev->bus),
|
||||
pdev->bus->number);
|
||||
}
|
||||
|
||||
static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus)
|
||||
{
|
||||
int seg = pci_domain_nr(pbus), busnr = pbus->number;
|
||||
struct pci_dev *bridge = pbus->self;
|
||||
if (bridge)
|
||||
return DEVICE_ACPI_HANDLE(&(bridge->dev));
|
||||
return acpi_get_pci_rootbridge_handle(seg, busnr);
|
||||
}
|
||||
#else
|
||||
#if !defined(AE_ERROR)
|
||||
typedef u32 acpi_status;
|
||||
@@ -73,8 +76,6 @@ typedef u32 acpi_status;
|
||||
#endif
|
||||
static inline acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
|
||||
{return AE_ERROR;}
|
||||
static inline acpi_status pci_osc_support_set(u32 flags) {return AE_ERROR;}
|
||||
static inline acpi_status pcie_osc_support_set(u32 flags) {return AE_ERROR;}
|
||||
static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
|
||||
{ return NULL; }
|
||||
#endif
|
||||
|
@@ -82,7 +82,30 @@ enum pci_mmap_state {
|
||||
#define PCI_DMA_FROMDEVICE 2
|
||||
#define PCI_DMA_NONE 3
|
||||
|
||||
#define DEVICE_COUNT_RESOURCE 12
|
||||
/*
|
||||
* For PCI devices, the region numbers are assigned this way:
|
||||
*/
|
||||
enum {
|
||||
/* #0-5: standard PCI resources */
|
||||
PCI_STD_RESOURCES,
|
||||
PCI_STD_RESOURCE_END = 5,
|
||||
|
||||
/* #6: expansion ROM resource */
|
||||
PCI_ROM_RESOURCE,
|
||||
|
||||
/* resources assigned to buses behind the bridge */
|
||||
#define PCI_BRIDGE_RESOURCE_NUM 4
|
||||
|
||||
PCI_BRIDGE_RESOURCES,
|
||||
PCI_BRIDGE_RESOURCE_END = PCI_BRIDGE_RESOURCES +
|
||||
PCI_BRIDGE_RESOURCE_NUM - 1,
|
||||
|
||||
/* total resources associated with a PCI device */
|
||||
PCI_NUM_RESOURCES,
|
||||
|
||||
/* preserve this for compatibility */
|
||||
DEVICE_COUNT_RESOURCE
|
||||
};
|
||||
|
||||
typedef int __bitwise pci_power_t;
|
||||
|
||||
@@ -274,18 +297,6 @@ static inline void pci_add_saved_cap(struct pci_dev *pci_dev,
|
||||
hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
|
||||
}
|
||||
|
||||
/*
|
||||
* For PCI devices, the region numbers are assigned this way:
|
||||
*
|
||||
* 0-5 standard PCI regions
|
||||
* 6 expansion ROM
|
||||
* 7-10 bridges: address space assigned to buses behind the bridge
|
||||
*/
|
||||
|
||||
#define PCI_ROM_RESOURCE 6
|
||||
#define PCI_BRIDGE_RESOURCES 7
|
||||
#define PCI_NUM_RESOURCES 11
|
||||
|
||||
#ifndef PCI_BUS_NUM_RESOURCES
|
||||
#define PCI_BUS_NUM_RESOURCES 16
|
||||
#endif
|
||||
@@ -325,6 +336,15 @@ struct pci_bus {
|
||||
#define pci_bus_b(n) list_entry(n, struct pci_bus, node)
|
||||
#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
|
||||
{
|
||||
return pci_dev->msi_enabled || pci_dev->msix_enabled;
|
||||
}
|
||||
#else
|
||||
static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Error values that may be returned by PCI functions.
|
||||
*/
|
||||
@@ -532,7 +552,9 @@ int __must_check pci_bus_add_device(struct pci_dev *dev);
|
||||
void pci_read_bridge_bases(struct pci_bus *child);
|
||||
struct resource *pci_find_parent_resource(const struct pci_dev *dev,
|
||||
struct resource *res);
|
||||
u8 pci_swizzle_interrupt_pin(struct pci_dev *dev, u8 pin);
|
||||
int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
|
||||
u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp);
|
||||
extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
|
||||
extern void pci_dev_put(struct pci_dev *dev);
|
||||
extern void pci_remove_bus(struct pci_bus *b);
|
||||
@@ -629,6 +651,7 @@ static inline int pci_is_managed(struct pci_dev *pdev)
|
||||
|
||||
void pci_disable_device(struct pci_dev *dev);
|
||||
void pci_set_master(struct pci_dev *dev);
|
||||
void pci_clear_master(struct pci_dev *dev);
|
||||
int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
|
||||
#define HAVE_PCI_SET_MWI
|
||||
int __must_check pci_set_mwi(struct pci_dev *dev);
|
||||
@@ -647,7 +670,7 @@ int pcie_get_readrq(struct pci_dev *dev);
|
||||
int pcie_set_readrq(struct pci_dev *dev, int rq);
|
||||
int pci_reset_function(struct pci_dev *dev);
|
||||
int pci_execute_reset_function(struct pci_dev *dev);
|
||||
void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
|
||||
void pci_update_resource(struct pci_dev *dev, int resno);
|
||||
int __must_check pci_assign_resource(struct pci_dev *dev, int i);
|
||||
int pci_select_bars(struct pci_dev *dev, unsigned long flags);
|
||||
|
||||
@@ -674,6 +697,11 @@ int pci_back_from_sleep(struct pci_dev *dev);
|
||||
/* Functions for PCI Hotplug drivers to use */
|
||||
int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
|
||||
|
||||
/* Vital product data routines */
|
||||
ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
|
||||
ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
|
||||
int pci_vpd_truncate(struct pci_dev *dev, size_t size);
|
||||
|
||||
/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */
|
||||
void pci_bus_assign_resources(struct pci_bus *bus);
|
||||
void pci_bus_size_bridges(struct pci_bus *bus);
|
||||
@@ -686,10 +714,13 @@ void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
|
||||
int (*)(struct pci_dev *, u8, u8));
|
||||
#define HAVE_PCI_REQ_REGIONS 2
|
||||
int __must_check pci_request_regions(struct pci_dev *, const char *);
|
||||
int __must_check pci_request_regions_exclusive(struct pci_dev *, const char *);
|
||||
void pci_release_regions(struct pci_dev *);
|
||||
int __must_check pci_request_region(struct pci_dev *, int, const char *);
|
||||
int __must_check pci_request_region_exclusive(struct pci_dev *, int, const char *);
|
||||
void pci_release_region(struct pci_dev *, int);
|
||||
int pci_request_selected_regions(struct pci_dev *, int, const char *);
|
||||
int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
|
||||
void pci_release_selected_regions(struct pci_dev *, int);
|
||||
|
||||
/* drivers/pci/bus.c */
|
||||
@@ -779,6 +810,10 @@ static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev)
|
||||
|
||||
static inline void pci_restore_msi_state(struct pci_dev *dev)
|
||||
{ }
|
||||
static inline int pci_msi_enabled(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
extern int pci_enable_msi(struct pci_dev *dev);
|
||||
extern void pci_msi_shutdown(struct pci_dev *dev);
|
||||
@@ -789,6 +824,16 @@ extern void pci_msix_shutdown(struct pci_dev *dev);
|
||||
extern void pci_disable_msix(struct pci_dev *dev);
|
||||
extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
|
||||
extern void pci_restore_msi_state(struct pci_dev *dev);
|
||||
extern int pci_msi_enabled(void);
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_PCIEASPM
|
||||
static inline int pcie_aspm_enabled(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
extern int pcie_aspm_enabled(void);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HT_IRQ
|
||||
@@ -1140,20 +1185,9 @@ static inline void pci_mmcfg_early_init(void) { }
|
||||
static inline void pci_mmcfg_late_init(void) { }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAS_IOMEM
|
||||
static inline void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
|
||||
{
|
||||
/*
|
||||
* Make sure the BAR is actually a memory resource, not an IO resource
|
||||
*/
|
||||
if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
|
||||
WARN_ON(1);
|
||||
return NULL;
|
||||
}
|
||||
return ioremap_nocache(pci_resource_start(pdev, bar),
|
||||
pci_resource_len(pdev, bar));
|
||||
}
|
||||
#endif
|
||||
int pci_ext_cfg_avail(struct pci_dev *dev);
|
||||
|
||||
void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* LINUX_PCI_H */
|
||||
|
@@ -223,11 +223,12 @@ struct hotplug_params {
|
||||
#ifdef CONFIG_ACPI
|
||||
#include <acpi/acpi.h>
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/actypes.h>
|
||||
extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
|
||||
struct hotplug_params *hpp);
|
||||
int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags);
|
||||
int acpi_root_bridge(acpi_handle handle);
|
||||
int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle);
|
||||
int acpi_pci_detect_ejectable(struct pci_bus *pbus);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@@ -210,6 +210,7 @@
|
||||
#define PCI_CAP_ID_AGP3 0x0E /* AGP Target PCI-PCI bridge */
|
||||
#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
|
||||
#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */
|
||||
#define PCI_CAP_ID_AF 0x13 /* PCI Advanced Features */
|
||||
#define PCI_CAP_LIST_NEXT 1 /* Next capability in the list */
|
||||
#define PCI_CAP_FLAGS 2 /* Capability defined flags (16 bits) */
|
||||
#define PCI_CAP_SIZEOF 4
|
||||
@@ -316,6 +317,17 @@
|
||||
#define PCI_CHSWP_EXT 0x40 /* ENUM# status - extraction */
|
||||
#define PCI_CHSWP_INS 0x80 /* ENUM# status - insertion */
|
||||
|
||||
/* PCI Advanced Feature registers */
|
||||
|
||||
#define PCI_AF_LENGTH 2
|
||||
#define PCI_AF_CAP 3
|
||||
#define PCI_AF_CAP_TP 0x01
|
||||
#define PCI_AF_CAP_FLR 0x02
|
||||
#define PCI_AF_CTRL 4
|
||||
#define PCI_AF_CTRL_FLR 0x01
|
||||
#define PCI_AF_STATUS 5
|
||||
#define PCI_AF_STATUS_TP 0x01
|
||||
|
||||
/* PCI-X registers */
|
||||
|
||||
#define PCI_X_CMD 2 /* Modes & Features */
|
||||
@@ -399,20 +411,70 @@
|
||||
#define PCI_EXP_DEVSTA_AUXPD 0x10 /* AUX Power Detected */
|
||||
#define PCI_EXP_DEVSTA_TRPND 0x20 /* Transactions Pending */
|
||||
#define PCI_EXP_LNKCAP 12 /* Link Capabilities */
|
||||
#define PCI_EXP_LNKCAP_ASPMS 0xc00 /* ASPM Support */
|
||||
#define PCI_EXP_LNKCAP_L0SEL 0x7000 /* L0s Exit Latency */
|
||||
#define PCI_EXP_LNKCAP_L1EL 0x38000 /* L1 Exit Latency */
|
||||
#define PCI_EXP_LNKCAP_CLKPM 0x40000 /* L1 Clock Power Management */
|
||||
#define PCI_EXP_LNKCAP_SLS 0x0000000f /* Supported Link Speeds */
|
||||
#define PCI_EXP_LNKCAP_MLW 0x000003f0 /* Maximum Link Width */
|
||||
#define PCI_EXP_LNKCAP_ASPMS 0x00000c00 /* ASPM Support */
|
||||
#define PCI_EXP_LNKCAP_L0SEL 0x00007000 /* L0s Exit Latency */
|
||||
#define PCI_EXP_LNKCAP_L1EL 0x00038000 /* L1 Exit Latency */
|
||||
#define PCI_EXP_LNKCAP_CLKPM 0x00040000 /* L1 Clock Power Management */
|
||||
#define PCI_EXP_LNKCAP_SDERC 0x00080000 /* Suprise Down Error Reporting Capable */
|
||||
#define PCI_EXP_LNKCAP_DLLLARC 0x00100000 /* Data Link Layer Link Active Reporting Capable */
|
||||
#define PCI_EXP_LNKCAP_LBNC 0x00200000 /* Link Bandwidth Notification Capability */
|
||||
#define PCI_EXP_LNKCAP_PN 0xff000000 /* Port Number */
|
||||
#define PCI_EXP_LNKCTL 16 /* Link Control */
|
||||
#define PCI_EXP_LNKCTL_RL 0x20 /* Retrain Link */
|
||||
#define PCI_EXP_LNKCTL_CCC 0x40 /* Common Clock COnfiguration */
|
||||
#define PCI_EXP_LNKCTL_ASPMC 0x0003 /* ASPM Control */
|
||||
#define PCI_EXP_LNKCTL_RCB 0x0008 /* Read Completion Boundary */
|
||||
#define PCI_EXP_LNKCTL_LD 0x0010 /* Link Disable */
|
||||
#define PCI_EXP_LNKCTL_RL 0x0020 /* Retrain Link */
|
||||
#define PCI_EXP_LNKCTL_CCC 0x0040 /* Common Clock Configuration */
|
||||
#define PCI_EXP_LNKCTL_ES 0x0080 /* Extended Synch */
|
||||
#define PCI_EXP_LNKCTL_CLKREQ_EN 0x100 /* Enable clkreq */
|
||||
#define PCI_EXP_LNKCTL_HAWD 0x0200 /* Hardware Autonomous Width Disable */
|
||||
#define PCI_EXP_LNKCTL_LBMIE 0x0400 /* Link Bandwidth Management Interrupt Enable */
|
||||
#define PCI_EXP_LNKCTL_LABIE 0x0800 /* Lnk Autonomous Bandwidth Interrupt Enable */
|
||||
#define PCI_EXP_LNKSTA 18 /* Link Status */
|
||||
#define PCI_EXP_LNKSTA_LT 0x800 /* Link Training */
|
||||
#define PCI_EXP_LNKSTA_CLS 0x000f /* Current Link Speed */
|
||||
#define PCI_EXP_LNKSTA_NLW 0x03f0 /* Nogotiated Link Width */
|
||||
#define PCI_EXP_LNKSTA_LT 0x0800 /* Link Training */
|
||||
#define PCI_EXP_LNKSTA_SLC 0x1000 /* Slot Clock Configuration */
|
||||
#define PCI_EXP_LNKSTA_DLLLA 0x2000 /* Data Link Layer Link Active */
|
||||
#define PCI_EXP_LNKSTA_LBMS 0x4000 /* Link Bandwidth Management Status */
|
||||
#define PCI_EXP_LNKSTA_LABS 0x8000 /* Link Autonomous Bandwidth Status */
|
||||
#define PCI_EXP_SLTCAP 20 /* Slot Capabilities */
|
||||
#define PCI_EXP_SLTCAP_ABP 0x00000001 /* Attention Button Present */
|
||||
#define PCI_EXP_SLTCAP_PCP 0x00000002 /* Power Controller Present */
|
||||
#define PCI_EXP_SLTCAP_MRLSP 0x00000004 /* MRL Sensor Present */
|
||||
#define PCI_EXP_SLTCAP_AIP 0x00000008 /* Attention Indicator Present */
|
||||
#define PCI_EXP_SLTCAP_PIP 0x00000010 /* Power Indicator Present */
|
||||
#define PCI_EXP_SLTCAP_HPS 0x00000020 /* Hot-Plug Surprise */
|
||||
#define PCI_EXP_SLTCAP_HPC 0x00000040 /* Hot-Plug Capable */
|
||||
#define PCI_EXP_SLTCAP_SPLV 0x00007f80 /* Slot Power Limit Value */
|
||||
#define PCI_EXP_SLTCAP_SPLS 0x00018000 /* Slot Power Limit Scale */
|
||||
#define PCI_EXP_SLTCAP_EIP 0x00020000 /* Electromechanical Interlock Present */
|
||||
#define PCI_EXP_SLTCAP_NCCS 0x00040000 /* No Command Completed Support */
|
||||
#define PCI_EXP_SLTCAP_PSN 0xfff80000 /* Physical Slot Number */
|
||||
#define PCI_EXP_SLTCTL 24 /* Slot Control */
|
||||
#define PCI_EXP_SLTCTL_ABPE 0x0001 /* Attention Button Pressed Enable */
|
||||
#define PCI_EXP_SLTCTL_PFDE 0x0002 /* Power Fault Detected Enable */
|
||||
#define PCI_EXP_SLTCTL_MRLSCE 0x0004 /* MRL Sensor Changed Enable */
|
||||
#define PCI_EXP_SLTCTL_PDCE 0x0008 /* Presence Detect Changed Enable */
|
||||
#define PCI_EXP_SLTCTL_CCIE 0x0010 /* Command Completed Interrupt Enable */
|
||||
#define PCI_EXP_SLTCTL_HPIE 0x0020 /* Hot-Plug Interrupt Enable */
|
||||
#define PCI_EXP_SLTCTL_AIC 0x00c0 /* Attention Indicator Control */
|
||||
#define PCI_EXP_SLTCTL_PIC 0x0300 /* Power Indicator Control */
|
||||
#define PCI_EXP_SLTCTL_PCC 0x0400 /* Power Controller Control */
|
||||
#define PCI_EXP_SLTCTL_EIC 0x0800 /* Electromechanical Interlock Control */
|
||||
#define PCI_EXP_SLTCTL_DLLSCE 0x1000 /* Data Link Layer State Changed Enable */
|
||||
#define PCI_EXP_SLTSTA 26 /* Slot Status */
|
||||
#define PCI_EXP_SLTSTA_ABP 0x0001 /* Attention Button Pressed */
|
||||
#define PCI_EXP_SLTSTA_PFD 0x0002 /* Power Fault Detected */
|
||||
#define PCI_EXP_SLTSTA_MRLSC 0x0004 /* MRL Sensor Changed */
|
||||
#define PCI_EXP_SLTSTA_PDC 0x0008 /* Presence Detect Changed */
|
||||
#define PCI_EXP_SLTSTA_CC 0x0010 /* Command Completed */
|
||||
#define PCI_EXP_SLTSTA_MRLSS 0x0020 /* MRL Sensor State */
|
||||
#define PCI_EXP_SLTSTA_PDS 0x0040 /* Presence Detect State */
|
||||
#define PCI_EXP_SLTSTA_EIS 0x0080 /* Electromechanical Interlock Status */
|
||||
#define PCI_EXP_SLTSTA_DLLSC 0x0100 /* Data Link Layer State Changed */
|
||||
#define PCI_EXP_RTCTL 28 /* Root Control */
|
||||
#define PCI_EXP_RTCTL_SECEE 0x01 /* System Error on Correctable Error */
|
||||
#define PCI_EXP_RTCTL_SENFEE 0x02 /* System Error on Non-Fatal Error */
|
||||
|
@@ -122,6 +122,24 @@ int next_pidmap(struct pid_namespace *pid_ns, int last);
|
||||
extern struct pid *alloc_pid(struct pid_namespace *ns);
|
||||
extern void free_pid(struct pid *pid);
|
||||
|
||||
/*
|
||||
* ns_of_pid() returns the pid namespace in which the specified pid was
|
||||
* allocated.
|
||||
*
|
||||
* NOTE:
|
||||
* ns_of_pid() is expected to be called for a process (task) that has
|
||||
* an attached 'struct pid' (see attach_pid(), detach_pid()) i.e @pid
|
||||
* is expected to be non-NULL. If @pid is NULL, caller should handle
|
||||
* the resulting NULL pid-ns.
|
||||
*/
|
||||
static inline struct pid_namespace *ns_of_pid(struct pid *pid)
|
||||
{
|
||||
struct pid_namespace *ns = NULL;
|
||||
if (pid)
|
||||
ns = pid->numbers[pid->level].ns;
|
||||
return ns;
|
||||
}
|
||||
|
||||
/*
|
||||
* the helpers to get the pid's id seen from different namespaces
|
||||
*
|
||||
|
@@ -79,11 +79,7 @@ static inline void zap_pid_ns_processes(struct pid_namespace *ns)
|
||||
}
|
||||
#endif /* CONFIG_PID_NS */
|
||||
|
||||
static inline struct pid_namespace *task_active_pid_ns(struct task_struct *tsk)
|
||||
{
|
||||
return tsk->nsproxy->pid_ns;
|
||||
}
|
||||
|
||||
extern struct pid_namespace *task_active_pid_ns(struct task_struct *tsk);
|
||||
void pidhash_init(void);
|
||||
void pidmap_init(void);
|
||||
|
||||
|
@@ -2,14 +2,12 @@
|
||||
* Name : qnx4_fs.h
|
||||
* Author : Richard Frowijn
|
||||
* Function : qnx4 global filesystem definitions
|
||||
* Version : 1.0.2
|
||||
* Last modified : 2000-01-31
|
||||
*
|
||||
* History : 23-03-1998 created
|
||||
*/
|
||||
#ifndef _LINUX_QNX4_FS_H
|
||||
#define _LINUX_QNX4_FS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/qnxtypes.h>
|
||||
#include <linux/magic.h>
|
||||
|
||||
|
@@ -2,9 +2,6 @@
|
||||
* Name : qnxtypes.h
|
||||
* Author : Richard Frowijn
|
||||
* Function : standard qnx types
|
||||
* Version : 1.0.2
|
||||
* Last modified : 2000-01-06
|
||||
*
|
||||
* History : 22-03-1998 created
|
||||
*
|
||||
*/
|
||||
@@ -12,6 +9,8 @@
|
||||
#ifndef _QNX4TYPES_H
|
||||
#define _QNX4TYPES_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
typedef __le16 qnx4_nxtnt_t;
|
||||
typedef __u8 qnx4_ftype_t;
|
||||
|
||||
|
@@ -137,6 +137,9 @@ struct mddev_s
|
||||
struct gendisk *gendisk;
|
||||
|
||||
struct kobject kobj;
|
||||
int hold_active;
|
||||
#define UNTIL_IOCTL 1
|
||||
#define UNTIL_STOP 2
|
||||
|
||||
/* Superblock information */
|
||||
int major_version,
|
||||
@@ -215,6 +218,9 @@ struct mddev_s
|
||||
#define MD_RECOVERY_FROZEN 9
|
||||
|
||||
unsigned long recovery;
|
||||
int recovery_disabled; /* if we detect that recovery
|
||||
* will always fail, set this
|
||||
* so we don't loop trying */
|
||||
|
||||
int in_sync; /* know to not need resync */
|
||||
struct mutex reconfig_mutex;
|
||||
@@ -244,6 +250,9 @@ struct mddev_s
|
||||
struct sysfs_dirent *sysfs_state; /* handle for 'array_state'
|
||||
* file in sysfs.
|
||||
*/
|
||||
struct sysfs_dirent *sysfs_action; /* handle for 'sync_action' */
|
||||
|
||||
struct work_struct del_work; /* used for delayed sysfs removal */
|
||||
|
||||
spinlock_t write_lock;
|
||||
wait_queue_head_t sb_wait; /* for waiting on superblock updates */
|
||||
@@ -334,17 +343,14 @@ static inline char * mdname (mddev_t * mddev)
|
||||
* iterates through some rdev ringlist. It's safe to remove the
|
||||
* current 'rdev'. Dont touch 'tmp' though.
|
||||
*/
|
||||
#define rdev_for_each_list(rdev, tmp, list) \
|
||||
\
|
||||
for ((tmp) = (list).next; \
|
||||
(rdev) = (list_entry((tmp), mdk_rdev_t, same_set)), \
|
||||
(tmp) = (tmp)->next, (tmp)->prev != &(list) \
|
||||
; )
|
||||
#define rdev_for_each_list(rdev, tmp, head) \
|
||||
list_for_each_entry_safe(rdev, tmp, head, same_set)
|
||||
|
||||
/*
|
||||
* iterates through the 'same array disks' ringlist
|
||||
*/
|
||||
#define rdev_for_each(rdev, tmp, mddev) \
|
||||
rdev_for_each_list(rdev, tmp, (mddev)->disks)
|
||||
list_for_each_entry_safe(rdev, tmp, &((mddev)->disks), same_set)
|
||||
|
||||
#define rdev_for_each_rcu(rdev, mddev) \
|
||||
list_for_each_entry_rcu(rdev, &((mddev)->disks), same_set)
|
||||
|
@@ -194,6 +194,8 @@ static inline __u64 md_event(mdp_super_t *sb) {
|
||||
return (ev<<32)| sb->events_lo;
|
||||
}
|
||||
|
||||
#define MD_SUPERBLOCK_1_TIME_SEC_MASK ((1ULL<<40) - 1)
|
||||
|
||||
/*
|
||||
* The version-1 superblock :
|
||||
* All numeric fields are little-endian.
|
||||
|
@@ -5,9 +5,9 @@
|
||||
|
||||
struct strip_zone
|
||||
{
|
||||
sector_t zone_offset; /* Zone offset in md_dev */
|
||||
sector_t dev_offset; /* Zone offset in real dev */
|
||||
sector_t size; /* Zone size */
|
||||
sector_t zone_start; /* Zone offset in md_dev (in sectors) */
|
||||
sector_t dev_start; /* Zone offset in real dev (in sectors) */
|
||||
sector_t sectors; /* Zone size in sectors */
|
||||
int nb_dev; /* # of devices attached to the zone */
|
||||
mdk_rdev_t **dev; /* Devices attached to the zone */
|
||||
};
|
||||
@@ -19,8 +19,8 @@ struct raid0_private_data
|
||||
mdk_rdev_t **devlist; /* lists of rdevs, pointed to by strip_zone->dev */
|
||||
int nr_strip_zones;
|
||||
|
||||
sector_t hash_spacing;
|
||||
int preshift; /* shift this before divide by hash_spacing */
|
||||
sector_t spacing;
|
||||
int sector_shift; /* shift this before divide by spacing */
|
||||
};
|
||||
|
||||
typedef struct raid0_private_data raid0_conf_t;
|
||||
|
@@ -140,10 +140,10 @@ extern void rb_insert_color(struct rb_node *, struct rb_root *);
|
||||
extern void rb_erase(struct rb_node *, struct rb_root *);
|
||||
|
||||
/* Find logical next and previous nodes in a tree */
|
||||
extern struct rb_node *rb_next(struct rb_node *);
|
||||
extern struct rb_node *rb_prev(struct rb_node *);
|
||||
extern struct rb_node *rb_first(struct rb_root *);
|
||||
extern struct rb_node *rb_last(struct rb_root *);
|
||||
extern struct rb_node *rb_next(const struct rb_node *);
|
||||
extern struct rb_node *rb_prev(const struct rb_node *);
|
||||
extern struct rb_node *rb_first(const struct rb_root *);
|
||||
extern struct rb_node *rb_last(const struct rb_root *);
|
||||
|
||||
/* Fast replacement of a single node without remove/rebalance/add/rebalance */
|
||||
extern void rb_replace_node(struct rb_node *victim, struct rb_node *new,
|
||||
|
@@ -104,10 +104,10 @@ struct regulator;
|
||||
/**
|
||||
* struct regulator_bulk_data - Data used for bulk regulator operations.
|
||||
*
|
||||
* @supply The name of the supply. Initialised by the user before
|
||||
* using the bulk regulator APIs.
|
||||
* @consumer The regulator consumer for the supply. This will be managed
|
||||
* by the bulk API.
|
||||
* @supply: The name of the supply. Initialised by the user before
|
||||
* using the bulk regulator APIs.
|
||||
* @consumer: The regulator consumer for the supply. This will be managed
|
||||
* by the bulk API.
|
||||
*
|
||||
* The regulator APIs provide a series of regulator_bulk_() API calls as
|
||||
* a convenience to consumers which require multiple supplies. This
|
||||
|
@@ -24,7 +24,33 @@ struct regulator_init_data;
|
||||
/**
|
||||
* struct regulator_ops - regulator operations.
|
||||
*
|
||||
* This struct describes regulator operations.
|
||||
* This struct describes regulator operations which can be implemented by
|
||||
* regulator chip drivers.
|
||||
*
|
||||
* @enable: Enable the regulator.
|
||||
* @disable: Disable the regulator.
|
||||
* @is_enabled: Return 1 if the regulator is enabled, 0 otherwise.
|
||||
*
|
||||
* @set_voltage: Set the voltage for the regulator within the range specified.
|
||||
* The driver should select the voltage closest to min_uV.
|
||||
* @get_voltage: Return the currently configured voltage for the regulator.
|
||||
*
|
||||
* @set_current_limit: Configure a limit for a current-limited regulator.
|
||||
* @get_current_limit: Get the limit for a current-limited regulator.
|
||||
*
|
||||
* @set_mode: Set the operating mode for the regulator.
|
||||
* @get_mode: Get the current operating mode for the regulator.
|
||||
* @get_optimum_mode: Get the most efficient operating mode for the regulator
|
||||
* when running with the specified parameters.
|
||||
*
|
||||
* @set_suspend_voltage: Set the voltage for the regulator when the system
|
||||
* is suspended.
|
||||
* @set_suspend_enable: Mark the regulator as enabled when the system is
|
||||
* suspended.
|
||||
* @set_suspend_disable: Mark the regulator as disabled when the system is
|
||||
* suspended.
|
||||
* @set_suspend_mode: Set the operating mode for the regulator when the
|
||||
* system is suspended.
|
||||
*/
|
||||
struct regulator_ops {
|
||||
|
||||
@@ -75,6 +101,15 @@ enum regulator_type {
|
||||
/**
|
||||
* struct regulator_desc - Regulator descriptor
|
||||
*
|
||||
* Each regulator registered with the core is described with a structure of
|
||||
* this type.
|
||||
*
|
||||
* @name: Identifying name for the regulator.
|
||||
* @id: Numerical identifier for the regulator.
|
||||
* @ops: Regulator operations table.
|
||||
* @irq: Interrupt number for the regulator.
|
||||
* @type: Indicates if the regulator is a voltage or current regulator.
|
||||
* @owner: Module providing the regulator, used for refcounting.
|
||||
*/
|
||||
struct regulator_desc {
|
||||
const char *name;
|
||||
|
@@ -44,6 +44,10 @@ struct regulator;
|
||||
* struct regulator_state - regulator state during low power syatem states
|
||||
*
|
||||
* This describes a regulators state during a system wide low power state.
|
||||
*
|
||||
* @uV: Operating voltage during suspend.
|
||||
* @mode: Operating mode during suspend.
|
||||
* @enabled: Enabled during suspend.
|
||||
*/
|
||||
struct regulator_state {
|
||||
int uV; /* suspend voltage */
|
||||
@@ -55,6 +59,30 @@ struct regulator_state {
|
||||
* struct regulation_constraints - regulator operating constraints.
|
||||
*
|
||||
* This struct describes regulator and board/machine specific constraints.
|
||||
*
|
||||
* @name: Descriptive name for the constraints, used for display purposes.
|
||||
*
|
||||
* @min_uV: Smallest voltage consumers may set.
|
||||
* @max_uV: Largest voltage consumers may set.
|
||||
*
|
||||
* @min_uA: Smallest consumers consumers may set.
|
||||
* @max_uA: Largest current consumers may set.
|
||||
*
|
||||
* @valid_modes_mask: Mask of modes which may be configured by consumers.
|
||||
* @valid_ops_mask: Operations which may be performed by consumers.
|
||||
*
|
||||
* @always_on: Set if the regulator should never be disabled.
|
||||
* @boot_on: Set if the regulator is enabled when the system is initially
|
||||
* started.
|
||||
* @apply_uV: Apply the voltage constraint when initialising.
|
||||
*
|
||||
* @input_uV: Input voltage for regulator when supplied by another regulator.
|
||||
*
|
||||
* @state_disk: State for regulator when system is suspended in disk mode.
|
||||
* @state_mem: State for regulator when system is suspended in mem mode.
|
||||
* @state_standby: State for regulator when system is suspended in standby
|
||||
* mode.
|
||||
* @initial_state: Suspend state to set by default.
|
||||
*/
|
||||
struct regulation_constraints {
|
||||
|
||||
@@ -93,6 +121,9 @@ struct regulation_constraints {
|
||||
* struct regulator_consumer_supply - supply -> device mapping
|
||||
*
|
||||
* This maps a supply name to a device.
|
||||
*
|
||||
* @dev: Device structure for the consumer.
|
||||
* @supply: Name for the supply.
|
||||
*/
|
||||
struct regulator_consumer_supply {
|
||||
struct device *dev; /* consumer */
|
||||
@@ -103,6 +134,16 @@ struct regulator_consumer_supply {
|
||||
* struct regulator_init_data - regulator platform initialisation data.
|
||||
*
|
||||
* Initialisation constraints, our supply and consumers supplies.
|
||||
*
|
||||
* @supply_regulator_dev: Parent regulator (if any).
|
||||
*
|
||||
* @constraints: Constraints. These must be specified for the regulator to
|
||||
* be usable.
|
||||
* @num_consumer_supplies: Number of consumer device supplies.
|
||||
* @consumer_supplies: Consumer device supply configuration.
|
||||
*
|
||||
* @regulator_init: Callback invoked when the regulator has been registered.
|
||||
* @driver_data: Data passed to regulator_init.
|
||||
*/
|
||||
struct regulator_init_data {
|
||||
struct device *supply_regulator_dev; /* or NULL for LINE */
|
||||
|
@@ -43,6 +43,10 @@ struct res_counter {
|
||||
* the routines below consider this to be IRQ-safe
|
||||
*/
|
||||
spinlock_t lock;
|
||||
/*
|
||||
* Parent counter, used for hierarchial resource accounting
|
||||
*/
|
||||
struct res_counter *parent;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -87,7 +91,7 @@ enum {
|
||||
* helpers for accounting
|
||||
*/
|
||||
|
||||
void res_counter_init(struct res_counter *counter);
|
||||
void res_counter_init(struct res_counter *counter, struct res_counter *parent);
|
||||
|
||||
/*
|
||||
* charge - try to consume more resource.
|
||||
@@ -103,7 +107,7 @@ void res_counter_init(struct res_counter *counter);
|
||||
int __must_check res_counter_charge_locked(struct res_counter *counter,
|
||||
unsigned long val);
|
||||
int __must_check res_counter_charge(struct res_counter *counter,
|
||||
unsigned long val);
|
||||
unsigned long val, struct res_counter **limit_fail_at);
|
||||
|
||||
/*
|
||||
* uncharge - tell that some portion of the resource is released
|
||||
|
@@ -161,6 +161,9 @@
|
||||
|
||||
#define PORT_S3C6400 84
|
||||
|
||||
/* NWPSERIAL */
|
||||
#define PORT_NWPSERIAL 85
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
@@ -327,9 +327,9 @@ extern struct spi_master *spi_busnum_to_master(u16 busnum);
|
||||
* @tx_dma: DMA address of tx_buf, if @spi_message.is_dma_mapped
|
||||
* @rx_dma: DMA address of rx_buf, if @spi_message.is_dma_mapped
|
||||
* @len: size of rx and tx buffers (in bytes)
|
||||
* @speed_hz: Select a speed other then the device default for this
|
||||
* @speed_hz: Select a speed other than the device default for this
|
||||
* transfer. If 0 the default (from @spi_device) is used.
|
||||
* @bits_per_word: select a bits_per_word other then the device default
|
||||
* @bits_per_word: select a bits_per_word other than the device default
|
||||
* for this transfer. If 0 the default (from @spi_device) is used.
|
||||
* @cs_change: affects chipselect after this transfer completes
|
||||
* @delay_usecs: microseconds to delay after this transfer before
|
||||
|
13
include/linux/spi/tdo24m.h
Normal file
13
include/linux/spi/tdo24m.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef __TDO24M_H__
|
||||
#define __TDO24M_H__
|
||||
|
||||
enum tdo24m_model {
|
||||
TDO24M,
|
||||
TDO35S,
|
||||
};
|
||||
|
||||
struct tdo24m_platform_data {
|
||||
enum tdo24m_model model;
|
||||
};
|
||||
|
||||
#endif /* __TDO24M_H__ */
|
@@ -58,10 +58,13 @@ struct svc_serv {
|
||||
struct svc_stat * sv_stats; /* RPC statistics */
|
||||
spinlock_t sv_lock;
|
||||
unsigned int sv_nrthreads; /* # of server threads */
|
||||
unsigned int sv_maxconn; /* max connections allowed or
|
||||
* '0' causing max to be based
|
||||
* on number of threads. */
|
||||
|
||||
unsigned int sv_max_payload; /* datagram payload size */
|
||||
unsigned int sv_max_mesg; /* max_payload + 1 page for overheads */
|
||||
unsigned int sv_xdrsize; /* XDR buffer size */
|
||||
|
||||
struct list_head sv_permsocks; /* all permanent sockets */
|
||||
struct list_head sv_tempsocks; /* all temporary sockets */
|
||||
int sv_tmpcnt; /* count of temporary sockets */
|
||||
|
@@ -232,6 +232,11 @@ extern unsigned long get_safe_page(gfp_t gfp_mask);
|
||||
|
||||
extern void hibernation_set_ops(struct platform_hibernation_ops *ops);
|
||||
extern int hibernate(void);
|
||||
extern int hibernate_nvs_register(unsigned long start, unsigned long size);
|
||||
extern int hibernate_nvs_alloc(void);
|
||||
extern void hibernate_nvs_free(void);
|
||||
extern void hibernate_nvs_save(void);
|
||||
extern void hibernate_nvs_restore(void);
|
||||
#else /* CONFIG_HIBERNATION */
|
||||
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
|
||||
static inline void swsusp_set_page_free(struct page *p) {}
|
||||
@@ -239,6 +244,14 @@ static inline void swsusp_unset_page_free(struct page *p) {}
|
||||
|
||||
static inline void hibernation_set_ops(struct platform_hibernation_ops *ops) {}
|
||||
static inline int hibernate(void) { return -ENOSYS; }
|
||||
static inline int hibernate_nvs_register(unsigned long a, unsigned long b)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int hibernate_nvs_alloc(void) { return 0; }
|
||||
static inline void hibernate_nvs_free(void) {}
|
||||
static inline void hibernate_nvs_save(void) {}
|
||||
static inline void hibernate_nvs_restore(void) {}
|
||||
#endif /* CONFIG_HIBERNATION */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
@@ -214,7 +214,8 @@ static inline void lru_cache_add_active_file(struct page *page)
|
||||
extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
|
||||
gfp_t gfp_mask);
|
||||
extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem,
|
||||
gfp_t gfp_mask);
|
||||
gfp_t gfp_mask, bool noswap,
|
||||
unsigned int swappiness);
|
||||
extern int __isolate_lru_page(struct page *page, int mode, int file);
|
||||
extern unsigned long shrink_all_memory(unsigned long nr_pages);
|
||||
extern int vm_swappiness;
|
||||
@@ -333,6 +334,22 @@ static inline void disable_swap_token(void)
|
||||
put_swap_token(swap_token_mm);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
|
||||
extern void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent);
|
||||
#else
|
||||
static inline void
|
||||
mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
|
||||
extern void mem_cgroup_uncharge_swap(swp_entry_t ent);
|
||||
#else
|
||||
static inline void mem_cgroup_uncharge_swap(swp_entry_t ent)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_SWAP */
|
||||
|
||||
#define nr_swap_pages 0L
|
||||
@@ -409,6 +426,12 @@ static inline swp_entry_t get_swap_page(void)
|
||||
#define has_swap_token(x) 0
|
||||
#define disable_swap_token() do { } while(0)
|
||||
|
||||
static inline int mem_cgroup_cache_charge_swapin(struct page *page,
|
||||
struct mm_struct *mm, gfp_t mask, bool locked)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SWAP */
|
||||
#endif /* __KERNEL__*/
|
||||
#endif /* _LINUX_SWAP_H */
|
||||
|
@@ -176,10 +176,9 @@ typedef __u16 __bitwise __le16;
|
||||
typedef __u16 __bitwise __be16;
|
||||
typedef __u32 __bitwise __le32;
|
||||
typedef __u32 __bitwise __be32;
|
||||
#if defined(__GNUC__)
|
||||
typedef __u64 __bitwise __le64;
|
||||
typedef __u64 __bitwise __be64;
|
||||
#endif
|
||||
|
||||
typedef __u16 __bitwise __sum16;
|
||||
typedef __u32 __bitwise __wsum;
|
||||
|
||||
|
@@ -108,6 +108,7 @@ enum usb_interface_condition {
|
||||
* (in probe()), bound to a driver, or unbinding (in disconnect())
|
||||
* @is_active: flag set when the interface is bound and not suspended.
|
||||
* @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.
|
||||
@@ -120,6 +121,11 @@ enum usb_interface_condition {
|
||||
* to the sysfs representation for that device.
|
||||
* @pm_usage_cnt: PM usage counter for this interface; autosuspend is not
|
||||
* allowed unless the counter is 0.
|
||||
* @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
|
||||
@@ -164,14 +170,17 @@ struct usb_interface {
|
||||
enum usb_interface_condition condition; /* state of binding */
|
||||
unsigned is_active:1; /* the interface is not suspended */
|
||||
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;
|
||||
|
||||
struct device dev; /* interface specific device info */
|
||||
struct device *usb_dev;
|
||||
int 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) \
|
||||
@@ -329,7 +338,7 @@ struct usb_bus {
|
||||
#endif
|
||||
struct device *dev; /* device for this bus */
|
||||
|
||||
#if defined(CONFIG_USB_MON)
|
||||
#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
|
||||
@@ -398,6 +407,7 @@ struct usb_tt;
|
||||
* @urbnum: number of URBs submitted for the whole device
|
||||
* @active_duration: total time device is not suspended
|
||||
* @autosuspend: for delayed autosuspends
|
||||
* @autoresume: for autoresumes requested while in_interrupt
|
||||
* @pm_mutex: protects PM operations
|
||||
* @last_busy: time of last use
|
||||
* @autosuspend_delay: in jiffies
|
||||
@@ -476,6 +486,7 @@ struct usb_device {
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
struct delayed_work autosuspend;
|
||||
struct work_struct autoresume;
|
||||
struct mutex pm_mutex;
|
||||
|
||||
unsigned long last_busy;
|
||||
@@ -505,6 +516,7 @@ extern int usb_lock_device_for_reset(struct usb_device *udev,
|
||||
|
||||
/* 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);
|
||||
|
||||
extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
|
||||
|
||||
@@ -513,6 +525,8 @@ extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
|
||||
extern int usb_autopm_set_interface(struct usb_interface *intf);
|
||||
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);
|
||||
|
||||
static inline void usb_autopm_enable(struct usb_interface *intf)
|
||||
{
|
||||
@@ -539,8 +553,13 @@ static inline int usb_autopm_set_interface(struct usb_interface *intf)
|
||||
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_enable(struct usb_interface *intf)
|
||||
{ }
|
||||
static inline void usb_autopm_disable(struct usb_interface *intf)
|
||||
@@ -1050,7 +1069,7 @@ struct usb_device_driver {
|
||||
void (*disconnect) (struct usb_device *udev);
|
||||
|
||||
int (*suspend) (struct usb_device *udev, pm_message_t message);
|
||||
int (*resume) (struct usb_device *udev);
|
||||
int (*resume) (struct usb_device *udev, pm_message_t message);
|
||||
struct usbdrv_wrap drvwrap;
|
||||
unsigned int supports_autosuspend:1;
|
||||
};
|
||||
@@ -1321,7 +1340,7 @@ struct urb {
|
||||
struct kref kref; /* reference count of the URB */
|
||||
void *hcpriv; /* private data for host controller */
|
||||
atomic_t use_count; /* concurrent submissions counter */
|
||||
u8 reject; /* submissions will fail */
|
||||
atomic_t reject; /* submissions will fail */
|
||||
int unlinked; /* unlink error code */
|
||||
|
||||
/* public: documented fields in the urb that can be used by drivers */
|
||||
@@ -1466,6 +1485,7 @@ 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);
|
||||
@@ -1722,10 +1742,6 @@ extern void usb_unregister_notify(struct notifier_block *nb);
|
||||
|
||||
#define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \
|
||||
format "\n" , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO KBUILD_MODNAME ": " \
|
||||
format "\n" , ## arg)
|
||||
#define warn(format, arg...) printk(KERN_WARNING KBUILD_MODNAME ": " \
|
||||
format "\n" , ## arg)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
@@ -28,17 +28,17 @@ struct wusb_am_attr {
|
||||
};
|
||||
|
||||
/* Different fields defined by the spec */
|
||||
#define WUSB_AR_AssociationTypeId { .id = 0x0000, .len = 2 }
|
||||
#define WUSB_AR_AssociationSubTypeId { .id = 0x0001, .len = 2 }
|
||||
#define WUSB_AR_Length { .id = 0x0002, .len = 4 }
|
||||
#define WUSB_AR_AssociationStatus { .id = 0x0004, .len = 4 }
|
||||
#define WUSB_AR_LangID { .id = 0x0008, .len = 2 }
|
||||
#define WUSB_AR_DeviceFriendlyName { .id = 0x000b, .len = 64 } /* max */
|
||||
#define WUSB_AR_HostFriendlyName { .id = 0x000c, .len = 64 } /* max */
|
||||
#define WUSB_AR_CHID { .id = 0x1000, .len = 16 }
|
||||
#define WUSB_AR_CDID { .id = 0x1001, .len = 16 }
|
||||
#define WUSB_AR_ConnectionContext { .id = 0x1002, .len = 48 }
|
||||
#define WUSB_AR_BandGroups { .id = 0x1004, .len = 2 }
|
||||
#define WUSB_AR_AssociationTypeId { .id = cpu_to_le16(0x0000), .len = cpu_to_le16(2) }
|
||||
#define WUSB_AR_AssociationSubTypeId { .id = cpu_to_le16(0x0001), .len = cpu_to_le16(2) }
|
||||
#define WUSB_AR_Length { .id = cpu_to_le16(0x0002), .len = cpu_to_le16(4) }
|
||||
#define WUSB_AR_AssociationStatus { .id = cpu_to_le16(0x0004), .len = cpu_to_le16(4) }
|
||||
#define WUSB_AR_LangID { .id = cpu_to_le16(0x0008), .len = cpu_to_le16(2) }
|
||||
#define WUSB_AR_DeviceFriendlyName { .id = cpu_to_le16(0x000b), .len = cpu_to_le16(64) } /* max */
|
||||
#define WUSB_AR_HostFriendlyName { .id = cpu_to_le16(0x000c), .len = cpu_to_le16(64) } /* max */
|
||||
#define WUSB_AR_CHID { .id = cpu_to_le16(0x1000), .len = cpu_to_le16(16) }
|
||||
#define WUSB_AR_CDID { .id = cpu_to_le16(0x1001), .len = cpu_to_le16(16) }
|
||||
#define WUSB_AR_ConnectionContext { .id = cpu_to_le16(0x1002), .len = cpu_to_le16(48) }
|
||||
#define WUSB_AR_BandGroups { .id = cpu_to_le16(0x1004), .len = cpu_to_le16(2) }
|
||||
|
||||
/* CBAF Control Requests (AMS1.0[T4-1] */
|
||||
enum {
|
||||
|
30
include/linux/usb/gpio_vbus.h
Normal file
30
include/linux/usb/gpio_vbus.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* A simple GPIO VBUS sensing driver for B peripheral only devices
|
||||
* with internal transceivers.
|
||||
* Optionally D+ pullup can be controlled by a second GPIO.
|
||||
*
|
||||
* Copyright (c) 2008 Philipp Zabel <philipp.zabel@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct gpio_vbus_mach_info - configuration for gpio_vbus
|
||||
* @gpio_vbus: VBUS sensing GPIO
|
||||
* @gpio_pullup: optional D+ or D- pullup GPIO (else negative/invalid)
|
||||
* @gpio_vbus_inverted: true if gpio_vbus is active low
|
||||
* @gpio_pullup_inverted: true if gpio_pullup is active low
|
||||
*
|
||||
* The VBUS sensing GPIO should have a pulldown, which will normally be
|
||||
* part of a resistor ladder turning a 4.0V-5.25V level on VBUS into a
|
||||
* value the GPIO detects as active. Some systems will use comparators.
|
||||
*/
|
||||
struct gpio_vbus_mach_info {
|
||||
int gpio_vbus;
|
||||
int gpio_pullup;
|
||||
bool gpio_vbus_inverted;
|
||||
bool gpio_pullup_inverted;
|
||||
};
|
@@ -47,6 +47,11 @@ struct musb_hdrc_config {
|
||||
u8 ram_bits; /* ram address size */
|
||||
|
||||
struct musb_hdrc_eps_bits *eps_bits;
|
||||
#ifdef CONFIG_BLACKFIN
|
||||
/* A GPIO controlling VRSEL in Blackfin */
|
||||
unsigned int gpio_vrsel;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
struct musb_hdrc_platform_data {
|
||||
|
@@ -84,6 +84,7 @@ extern int otg_set_transceiver(struct otg_transceiver *);
|
||||
|
||||
/* for usb host and peripheral controller drivers */
|
||||
extern struct otg_transceiver *otg_get_transceiver(void);
|
||||
extern void otg_put_transceiver(struct otg_transceiver *);
|
||||
|
||||
static inline int
|
||||
otg_start_hnp(struct otg_transceiver *otg)
|
||||
|
@@ -52,8 +52,11 @@
|
||||
US_FLAG(MAX_SECTORS_MIN,0x00002000) \
|
||||
/* Sets max_sectors to arch min */ \
|
||||
US_FLAG(BULK_IGNORE_TAG,0x00004000) \
|
||||
/* Ignore tag mismatch in bulk operations */
|
||||
|
||||
/* Ignore tag mismatch in bulk operations */ \
|
||||
US_FLAG(SANE_SENSE, 0x00008000) \
|
||||
/* Sane Sense (> 18 bytes) */ \
|
||||
US_FLAG(CAPACITY_OK, 0x00010000) \
|
||||
/* READ CAPACITY response is correct */
|
||||
|
||||
#define US_FLAG(name, value) US_FL_##name = value ,
|
||||
enum { US_DO_ALL_FLAGS };
|
||||
|
234
include/linux/wimax.h
Normal file
234
include/linux/wimax.h
Normal file
@@ -0,0 +1,234 @@
|
||||
/*
|
||||
* Linux WiMax
|
||||
* API for user space
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* Intel Corporation <linux-wimax@intel.com>
|
||||
* Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
|
||||
* - Initial implementation
|
||||
*
|
||||
*
|
||||
* This file declares the user/kernel protocol that is spoken over
|
||||
* Generic Netlink, as well as any type declaration that is to be used
|
||||
* by kernel and user space.
|
||||
*
|
||||
* It is intended for user space to clone it verbatim to use it as a
|
||||
* primary reference for definitions.
|
||||
*
|
||||
* Stuff intended for kernel usage as well as full protocol and stack
|
||||
* documentation is rooted in include/net/wimax.h.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX__WIMAX_H__
|
||||
#define __LINUX__WIMAX_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
/**
|
||||
* Version of the interface (unsigned decimal, MMm, max 25.5)
|
||||
* M - Major: change if removing or modifying an existing call.
|
||||
* m - minor: change when adding a new call
|
||||
*/
|
||||
WIMAX_GNL_VERSION = 00,
|
||||
/* Generic NetLink attributes */
|
||||
WIMAX_GNL_ATTR_INVALID = 0x00,
|
||||
WIMAX_GNL_ATTR_MAX = 10,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Generic NetLink operations
|
||||
*
|
||||
* Most of these map to an API call; _OP_ stands for operation, _RP_
|
||||
* for reply and _RE_ for report (aka: signal).
|
||||
*/
|
||||
enum {
|
||||
WIMAX_GNL_OP_MSG_FROM_USER, /* User to kernel message */
|
||||
WIMAX_GNL_OP_MSG_TO_USER, /* Kernel to user message */
|
||||
WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */
|
||||
WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */
|
||||
WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */
|
||||
};
|
||||
|
||||
|
||||
/* Message from user / to user */
|
||||
enum {
|
||||
WIMAX_GNL_MSG_IFIDX = 1,
|
||||
WIMAX_GNL_MSG_PIPE_NAME,
|
||||
WIMAX_GNL_MSG_DATA,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* wimax_rfkill()
|
||||
*
|
||||
* The state of the radio (ON/OFF) is mapped to the rfkill subsystem's
|
||||
* switch state (DISABLED/ENABLED).
|
||||
*/
|
||||
enum wimax_rf_state {
|
||||
WIMAX_RF_OFF = 0, /* Radio is off, rfkill on/enabled */
|
||||
WIMAX_RF_ON = 1, /* Radio is on, rfkill off/disabled */
|
||||
WIMAX_RF_QUERY = 2,
|
||||
};
|
||||
|
||||
/* Attributes */
|
||||
enum {
|
||||
WIMAX_GNL_RFKILL_IFIDX = 1,
|
||||
WIMAX_GNL_RFKILL_STATE,
|
||||
};
|
||||
|
||||
|
||||
/* Attributes for wimax_reset() */
|
||||
enum {
|
||||
WIMAX_GNL_RESET_IFIDX = 1,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Attributes for the Report State Change
|
||||
*
|
||||
* For now we just have the old and new states; new attributes might
|
||||
* be added later on.
|
||||
*/
|
||||
enum {
|
||||
WIMAX_GNL_STCH_IFIDX = 1,
|
||||
WIMAX_GNL_STCH_STATE_OLD,
|
||||
WIMAX_GNL_STCH_STATE_NEW,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* enum wimax_st - The different states of a WiMAX device
|
||||
* @__WIMAX_ST_NULL: The device structure has been allocated and zeroed,
|
||||
* but still wimax_dev_add() hasn't been called. There is no state.
|
||||
*
|
||||
* @WIMAX_ST_DOWN: The device has been registered with the WiMAX and
|
||||
* networking stacks, but it is not initialized (normally that is
|
||||
* done with 'ifconfig DEV up' [or equivalent], which can upload
|
||||
* firmware and enable communications with the device).
|
||||
* In this state, the device is powered down and using as less
|
||||
* power as possible.
|
||||
* This state is the default after a call to wimax_dev_add(). It
|
||||
* is ok to have drivers move directly to %WIMAX_ST_UNINITIALIZED
|
||||
* or %WIMAX_ST_RADIO_OFF in _probe() after the call to
|
||||
* wimax_dev_add().
|
||||
* It is recommended that the driver leaves this state when
|
||||
* calling 'ifconfig DEV up' and enters it back on 'ifconfig DEV
|
||||
* down'.
|
||||
*
|
||||
* @__WIMAX_ST_QUIESCING: The device is being torn down, so no API
|
||||
* operations are allowed to proceed except the ones needed to
|
||||
* complete the device clean up process.
|
||||
*
|
||||
* @WIMAX_ST_UNINITIALIZED: [optional] Communication with the device
|
||||
* is setup, but the device still requires some configuration
|
||||
* before being operational.
|
||||
* Some WiMAX API calls might work.
|
||||
*
|
||||
* @WIMAX_ST_RADIO_OFF: The device is fully up; radio is off (wether
|
||||
* by hardware or software switches).
|
||||
* It is recommended to always leave the device in this state
|
||||
* after initialization.
|
||||
*
|
||||
* @WIMAX_ST_READY: The device is fully up and radio is on.
|
||||
*
|
||||
* @WIMAX_ST_SCANNING: [optional] The device has been instructed to
|
||||
* scan. In this state, the device cannot be actively connected to
|
||||
* a network.
|
||||
*
|
||||
* @WIMAX_ST_CONNECTING: The device is connecting to a network. This
|
||||
* state exists because in some devices, the connect process can
|
||||
* include a number of negotiations between user space, kernel
|
||||
* space and the device. User space needs to know what the device
|
||||
* is doing. If the connect sequence in a device is atomic and
|
||||
* fast, the device can transition directly to CONNECTED
|
||||
*
|
||||
* @WIMAX_ST_CONNECTED: The device is connected to a network.
|
||||
*
|
||||
* @__WIMAX_ST_INVALID: This is an invalid state used to mark the
|
||||
* maximum numeric value of states.
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
* Transitions from one state to another one are atomic and can only
|
||||
* be caused in kernel space with wimax_state_change(). To read the
|
||||
* state, use wimax_state_get().
|
||||
*
|
||||
* States starting with __ are internal and shall not be used or
|
||||
* referred to by drivers or userspace. They look ugly, but that's the
|
||||
* point -- if any use is made non-internal to the stack, it is easier
|
||||
* to catch on review.
|
||||
*
|
||||
* All API operations [with well defined exceptions] will take the
|
||||
* device mutex before starting and then check the state. If the state
|
||||
* is %__WIMAX_ST_NULL, %WIMAX_ST_DOWN, %WIMAX_ST_UNINITIALIZED or
|
||||
* %__WIMAX_ST_QUIESCING, it will drop the lock and quit with
|
||||
* -%EINVAL, -%ENOMEDIUM, -%ENOTCONN or -%ESHUTDOWN.
|
||||
*
|
||||
* The order of the definitions is important, so we can do numerical
|
||||
* comparisons (eg: < %WIMAX_ST_RADIO_OFF means the device is not ready
|
||||
* to operate).
|
||||
*/
|
||||
/*
|
||||
* The allowed state transitions are described in the table below
|
||||
* (states in rows can go to states in columns where there is an X):
|
||||
*
|
||||
* UNINI RADIO READY SCAN CONNEC CONNEC
|
||||
* NULL DOWN QUIESCING TIALIZED OFF NING TING TED
|
||||
* NULL - x
|
||||
* DOWN - x x x
|
||||
* QUIESCING x -
|
||||
* UNINITIALIZED x - x
|
||||
* RADIO_OFF x - x
|
||||
* READY x x - x x x
|
||||
* SCANNING x x x - x x
|
||||
* CONNECTING x x x x - x
|
||||
* CONNECTED x x x -
|
||||
*
|
||||
* This table not available in kernel-doc because the formatting messes it up.
|
||||
*/
|
||||
enum wimax_st {
|
||||
__WIMAX_ST_NULL = 0,
|
||||
WIMAX_ST_DOWN,
|
||||
__WIMAX_ST_QUIESCING,
|
||||
WIMAX_ST_UNINITIALIZED,
|
||||
WIMAX_ST_RADIO_OFF,
|
||||
WIMAX_ST_READY,
|
||||
WIMAX_ST_SCANNING,
|
||||
WIMAX_ST_CONNECTING,
|
||||
WIMAX_ST_CONNECTED,
|
||||
__WIMAX_ST_INVALID /* Always keep last */
|
||||
};
|
||||
|
||||
|
||||
#endif /* #ifndef __LINUX__WIMAX_H__ */
|
1
include/linux/wimax/Kbuild
Normal file
1
include/linux/wimax/Kbuild
Normal file
@@ -0,0 +1 @@
|
||||
header-y += i2400m.h
|
453
include/linux/wimax/debug.h
Normal file
453
include/linux/wimax/debug.h
Normal file
@@ -0,0 +1,453 @@
|
||||
/*
|
||||
* Linux WiMAX
|
||||
* Collection of tools to manage debug operations.
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2005-2007 Intel Corporation
|
||||
* Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License version
|
||||
* 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*
|
||||
*
|
||||
* Don't #include this file directly, read on!
|
||||
*
|
||||
*
|
||||
* EXECUTING DEBUGGING ACTIONS OR NOT
|
||||
*
|
||||
* The main thing this framework provides is decission power to take a
|
||||
* debug action (like printing a message) if the current debug level
|
||||
* allows it.
|
||||
*
|
||||
* The decission power is at two levels: at compile-time (what does
|
||||
* not make it is compiled out) and at run-time. The run-time
|
||||
* selection is done per-submodule (as they are declared by the user
|
||||
* of the framework).
|
||||
*
|
||||
* A call to d_test(L) (L being the target debug level) returns true
|
||||
* if the action should be taken because the current debug levels
|
||||
* allow it (both compile and run time).
|
||||
*
|
||||
* It follows that a call to d_test() that can be determined to be
|
||||
* always false at compile time will get the code depending on it
|
||||
* compiled out by optimization.
|
||||
*
|
||||
*
|
||||
* DEBUG LEVELS
|
||||
*
|
||||
* It is up to the caller to define how much a debugging level is.
|
||||
*
|
||||
* Convention sets 0 as "no debug" (so an action marked as debug level 0
|
||||
* will always be taken). The increasing debug levels are used for
|
||||
* increased verbosity.
|
||||
*
|
||||
*
|
||||
* USAGE
|
||||
*
|
||||
* Group the code in modules and submodules inside each module [which
|
||||
* in most cases maps to Linux modules and .c files that compose
|
||||
* those].
|
||||
*
|
||||
*
|
||||
* For each module, there is:
|
||||
*
|
||||
* - a MODULENAME (single word, legal C identifier)
|
||||
*
|
||||
* - a debug-levels.h header file that declares the list of
|
||||
* submodules and that is included by all .c files that use
|
||||
* the debugging tools. The file name can be anything.
|
||||
*
|
||||
* - some (optional) .c code to manipulate the runtime debug levels
|
||||
* through debugfs.
|
||||
*
|
||||
* The debug-levels.h file would look like:
|
||||
*
|
||||
* #ifndef __debug_levels__h__
|
||||
* #define __debug_levels__h__
|
||||
*
|
||||
* #define D_MODULENAME modulename
|
||||
* #define D_MASTER 10
|
||||
*
|
||||
* #include <linux/wimax/debug.h>
|
||||
*
|
||||
* enum d_module {
|
||||
* D_SUBMODULE_DECLARE(submodule_1),
|
||||
* D_SUBMODULE_DECLARE(submodule_2),
|
||||
* ...
|
||||
* D_SUBMODULE_DECLARE(submodule_N)
|
||||
* };
|
||||
*
|
||||
* #endif
|
||||
*
|
||||
* D_MASTER is the maximum compile-time debug level; any debug actions
|
||||
* above this will be out. D_MODULENAME is the module name (legal C
|
||||
* identifier), which has to be unique for each module (to avoid
|
||||
* namespace collisions during linkage). Note those #defines need to
|
||||
* be done before #including debug.h
|
||||
*
|
||||
* We declare N different submodules whose debug level can be
|
||||
* independently controlled during runtime.
|
||||
*
|
||||
* In a .c file of the module (and only in one of them), define the
|
||||
* following code:
|
||||
*
|
||||
* struct d_level D_LEVEL[] = {
|
||||
* D_SUBMODULE_DEFINE(submodule_1),
|
||||
* D_SUBMODULE_DEFINE(submodule_2),
|
||||
* ...
|
||||
* D_SUBMODULE_DEFINE(submodule_N),
|
||||
* };
|
||||
* size_t D_LEVEL_SIZE = ARRAY_SIZE(D_LEVEL);
|
||||
*
|
||||
* Externs for d_level_MODULENAME and d_level_size_MODULENAME are used
|
||||
* and declared in this file using the D_LEVEL and D_LEVEL_SIZE macros
|
||||
* #defined also in this file.
|
||||
*
|
||||
* To manipulate from user space the levels, create a debugfs dentry
|
||||
* and then register each submodule with:
|
||||
*
|
||||
* result = d_level_register_debugfs("PREFIX_", submodule_X, parent);
|
||||
* if (result < 0)
|
||||
* goto error;
|
||||
*
|
||||
* Where PREFIX_ is a name of your chosing. This will create debugfs
|
||||
* file with a single numeric value that can be use to tweak it. To
|
||||
* remove the entires, just use debugfs_remove_recursive() on 'parent'.
|
||||
*
|
||||
* NOTE: remember that even if this will show attached to some
|
||||
* particular instance of a device, the settings are *global*.
|
||||
*
|
||||
*
|
||||
* On each submodule (for example, .c files), the debug infrastructure
|
||||
* should be included like this:
|
||||
*
|
||||
* #define D_SUBMODULE submodule_x // matches one in debug-levels.h
|
||||
* #include "debug-levels.h"
|
||||
*
|
||||
* after #including all your include files.
|
||||
*
|
||||
*
|
||||
* Now you can use the d_*() macros below [d_test(), d_fnstart(),
|
||||
* d_fnend(), d_printf(), d_dump()].
|
||||
*
|
||||
* If their debug level is greater than D_MASTER, they will be
|
||||
* compiled out.
|
||||
*
|
||||
* If their debug level is lower or equal than D_MASTER but greater
|
||||
* than the current debug level of their submodule, they'll be
|
||||
* ignored.
|
||||
*
|
||||
* Otherwise, the action will be performed.
|
||||
*/
|
||||
#ifndef __debug__h__
|
||||
#define __debug__h__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
|
||||
/* Backend stuff */
|
||||
|
||||
/*
|
||||
* Debug backend: generate a message header from a 'struct device'
|
||||
*
|
||||
* @head: buffer where to place the header
|
||||
* @head_size: length of @head
|
||||
* @dev: pointer to device used to generate a header from. If NULL,
|
||||
* an empty ("") header is generated.
|
||||
*/
|
||||
static inline
|
||||
void __d_head(char *head, size_t head_size,
|
||||
struct device *dev)
|
||||
{
|
||||
if (dev == NULL)
|
||||
head[0] = 0;
|
||||
else if ((unsigned long)dev < 4096) {
|
||||
printk(KERN_ERR "E: Corrupt dev %p\n", dev);
|
||||
WARN_ON(1);
|
||||
} else
|
||||
snprintf(head, head_size, "%s %s: ",
|
||||
dev_driver_string(dev), dev->bus_id);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Debug backend: log some message if debugging is enabled
|
||||
*
|
||||
* @l: intended debug level
|
||||
* @tag: tag to prefix the message with
|
||||
* @dev: 'struct device' associated to this message
|
||||
* @f: printf-like format and arguments
|
||||
*
|
||||
* Note this is optimized out if it doesn't pass the compile-time
|
||||
* check; however, it is *always* compiled. This is useful to make
|
||||
* sure the printf-like formats and variables are always checked and
|
||||
* they don't get bit rot if you have all the debugging disabled.
|
||||
*/
|
||||
#define _d_printf(l, tag, dev, f, a...) \
|
||||
do { \
|
||||
char head[64]; \
|
||||
if (!d_test(l)) \
|
||||
break; \
|
||||
__d_head(head, sizeof(head), dev); \
|
||||
printk(KERN_ERR "%s%s%s: " f, head, __func__, tag, ##a); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* CPP sintatic sugar to generate A_B like symbol names when one of
|
||||
* the arguments is a a preprocessor #define.
|
||||
*/
|
||||
#define __D_PASTE__(varname, modulename) varname##_##modulename
|
||||
#define __D_PASTE(varname, modulename) (__D_PASTE__(varname, modulename))
|
||||
#define _D_SUBMODULE_INDEX(_name) (D_SUBMODULE_DECLARE(_name))
|
||||
|
||||
|
||||
/*
|
||||
* Store a submodule's runtime debug level and name
|
||||
*/
|
||||
struct d_level {
|
||||
u8 level;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* List of available submodules and their debug levels
|
||||
*
|
||||
* We call them d_level_MODULENAME and d_level_size_MODULENAME; the
|
||||
* macros D_LEVEL and D_LEVEL_SIZE contain the name already for
|
||||
* convenience.
|
||||
*
|
||||
* This array and the size are defined on some .c file that is part of
|
||||
* the current module.
|
||||
*/
|
||||
#define D_LEVEL __D_PASTE(d_level, D_MODULENAME)
|
||||
#define D_LEVEL_SIZE __D_PASTE(d_level_size, D_MODULENAME)
|
||||
|
||||
extern struct d_level D_LEVEL[];
|
||||
extern size_t D_LEVEL_SIZE;
|
||||
|
||||
|
||||
/*
|
||||
* Frontend stuff
|
||||
*
|
||||
*
|
||||
* Stuff you need to declare prior to using the actual "debug" actions
|
||||
* (defined below).
|
||||
*/
|
||||
|
||||
#ifndef D_MODULENAME
|
||||
#error D_MODULENAME is not defined in your debug-levels.h file
|
||||
/**
|
||||
* D_MODULE - Name of the current module
|
||||
*
|
||||
* #define in your module's debug-levels.h, making sure it is
|
||||
* unique. This has to be a legal C identifier.
|
||||
*/
|
||||
#define D_MODULENAME undefined_modulename
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef D_MASTER
|
||||
#warning D_MASTER not defined, but debug.h included! [see docs]
|
||||
/**
|
||||
* D_MASTER - Compile time maximum debug level
|
||||
*
|
||||
* #define in your debug-levels.h file to the maximum debug level the
|
||||
* runtime code will be allowed to have. This allows you to provide a
|
||||
* main knob.
|
||||
*
|
||||
* Anything above that level will be optimized out of the compile.
|
||||
*
|
||||
* Defaults to zero (no debug code compiled in).
|
||||
*
|
||||
* Maximum one definition per module (at the debug-levels.h file).
|
||||
*/
|
||||
#define D_MASTER 0
|
||||
#endif
|
||||
|
||||
#ifndef D_SUBMODULE
|
||||
#error D_SUBMODULE not defined, but debug.h included! [see docs]
|
||||
/**
|
||||
* D_SUBMODULE - Name of the current submodule
|
||||
*
|
||||
* #define in your submodule .c file before #including debug-levels.h
|
||||
* to the name of the current submodule as previously declared and
|
||||
* defined with D_SUBMODULE_DECLARE() (in your module's
|
||||
* debug-levels.h) and D_SUBMODULE_DEFINE().
|
||||
*
|
||||
* This is used to provide runtime-control over the debug levels.
|
||||
*
|
||||
* Maximum one per .c file! Can be shared among different .c files
|
||||
* (meaning they belong to the same submodule categorization).
|
||||
*/
|
||||
#define D_SUBMODULE undefined_module
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* D_SUBMODULE_DECLARE - Declare a submodule for runtime debug level control
|
||||
*
|
||||
* @_name: name of the submodule, restricted to the chars that make up a
|
||||
* valid C identifier ([a-zA-Z0-9_]).
|
||||
*
|
||||
* Declare in the module's debug-levels.h header file as:
|
||||
*
|
||||
* enum d_module {
|
||||
* D_SUBMODULE_DECLARE(submodule_1),
|
||||
* D_SUBMODULE_DECLARE(submodule_2),
|
||||
* D_SUBMODULE_DECLARE(submodule_3),
|
||||
* };
|
||||
*
|
||||
* Some corresponding .c file needs to have a matching
|
||||
* D_SUBMODULE_DEFINE().
|
||||
*/
|
||||
#define D_SUBMODULE_DECLARE(_name) __D_SUBMODULE_##_name
|
||||
|
||||
|
||||
/**
|
||||
* D_SUBMODULE_DEFINE - Define a submodule for runtime debug level control
|
||||
*
|
||||
* @_name: name of the submodule, restricted to the chars that make up a
|
||||
* valid C identifier ([a-zA-Z0-9_]).
|
||||
*
|
||||
* Use once per module (in some .c file) as:
|
||||
*
|
||||
* static
|
||||
* struct d_level d_level_SUBMODULENAME[] = {
|
||||
* D_SUBMODULE_DEFINE(submodule_1),
|
||||
* D_SUBMODULE_DEFINE(submodule_2),
|
||||
* D_SUBMODULE_DEFINE(submodule_3),
|
||||
* };
|
||||
* size_t d_level_size_SUBDMODULENAME = ARRAY_SIZE(d_level_SUBDMODULENAME);
|
||||
*
|
||||
* Matching D_SUBMODULE_DECLARE()s have to be present in a
|
||||
* debug-levels.h header file.
|
||||
*/
|
||||
#define D_SUBMODULE_DEFINE(_name) \
|
||||
[__D_SUBMODULE_##_name] = { \
|
||||
.level = 0, \
|
||||
.name = #_name \
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* The actual "debug" operations */
|
||||
|
||||
|
||||
/**
|
||||
* d_test - Returns true if debugging should be enabled
|
||||
*
|
||||
* @l: intended debug level (unsigned)
|
||||
*
|
||||
* If the master debug switch is enabled and the current settings are
|
||||
* higher or equal to the requested level, then debugging
|
||||
* output/actions should be enabled.
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* This needs to be coded so that it can be evaluated in compile
|
||||
* time; this is why the ugly BUG_ON() is placed in there, so the
|
||||
* D_MASTER evaluation compiles all out if it is compile-time false.
|
||||
*/
|
||||
#define d_test(l) \
|
||||
({ \
|
||||
unsigned __l = l; /* type enforcer */ \
|
||||
(D_MASTER) >= __l \
|
||||
&& ({ \
|
||||
BUG_ON(_D_SUBMODULE_INDEX(D_SUBMODULE) >= D_LEVEL_SIZE);\
|
||||
D_LEVEL[_D_SUBMODULE_INDEX(D_SUBMODULE)].level >= __l; \
|
||||
}); \
|
||||
})
|
||||
|
||||
|
||||
/**
|
||||
* d_fnstart - log message at function start if debugging enabled
|
||||
*
|
||||
* @l: intended debug level
|
||||
* @_dev: 'struct device' pointer, NULL if none (for context)
|
||||
* @f: printf-like format and arguments
|
||||
*/
|
||||
#define d_fnstart(l, _dev, f, a...) _d_printf(l, " FNSTART", _dev, f, ## a)
|
||||
|
||||
|
||||
/**
|
||||
* d_fnend - log message at function end if debugging enabled
|
||||
*
|
||||
* @l: intended debug level
|
||||
* @_dev: 'struct device' pointer, NULL if none (for context)
|
||||
* @f: printf-like format and arguments
|
||||
*/
|
||||
#define d_fnend(l, _dev, f, a...) _d_printf(l, " FNEND", _dev, f, ## a)
|
||||
|
||||
|
||||
/**
|
||||
* d_printf - log message if debugging enabled
|
||||
*
|
||||
* @l: intended debug level
|
||||
* @_dev: 'struct device' pointer, NULL if none (for context)
|
||||
* @f: printf-like format and arguments
|
||||
*/
|
||||
#define d_printf(l, _dev, f, a...) _d_printf(l, "", _dev, f, ## a)
|
||||
|
||||
|
||||
/**
|
||||
* d_dump - log buffer hex dump if debugging enabled
|
||||
*
|
||||
* @l: intended debug level
|
||||
* @_dev: 'struct device' pointer, NULL if none (for context)
|
||||
* @f: printf-like format and arguments
|
||||
*/
|
||||
#define d_dump(l, dev, ptr, size) \
|
||||
do { \
|
||||
char head[64]; \
|
||||
if (!d_test(l)) \
|
||||
break; \
|
||||
__d_head(head, sizeof(head), dev); \
|
||||
print_hex_dump(KERN_ERR, head, 0, 16, 1, \
|
||||
((void *) ptr), (size), 0); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/**
|
||||
* Export a submodule's debug level over debugfs as PREFIXSUBMODULE
|
||||
*
|
||||
* @prefix: string to prefix the name with
|
||||
* @submodule: name of submodule (not a string, just the name)
|
||||
* @dentry: debugfs parent dentry
|
||||
*
|
||||
* Returns: 0 if ok, < 0 errno on error.
|
||||
*
|
||||
* For removing, just use debugfs_remove_recursive() on the parent.
|
||||
*/
|
||||
#define d_level_register_debugfs(prefix, name, parent) \
|
||||
({ \
|
||||
int rc; \
|
||||
struct dentry *fd; \
|
||||
struct dentry *verify_parent_type = parent; \
|
||||
fd = debugfs_create_u8( \
|
||||
prefix #name, 0600, verify_parent_type, \
|
||||
&(D_LEVEL[__D_SUBMODULE_ ## name].level)); \
|
||||
rc = PTR_ERR(fd); \
|
||||
if (IS_ERR(fd) && rc != -ENODEV) \
|
||||
printk(KERN_ERR "%s: Can't create debugfs entry %s: " \
|
||||
"%d\n", __func__, prefix #name, rc); \
|
||||
else \
|
||||
rc = 0; \
|
||||
rc; \
|
||||
})
|
||||
|
||||
|
||||
#endif /* #ifndef __debug__h__ */
|
512
include/linux/wimax/i2400m.h
Normal file
512
include/linux/wimax/i2400m.h
Normal file
@@ -0,0 +1,512 @@
|
||||
/*
|
||||
* Intel Wireless WiMax Connection 2400m
|
||||
* Host-Device protocol interface definitions
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* Intel Corporation <linux-wimax@intel.com>
|
||||
* Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
|
||||
* - Initial implementation
|
||||
*
|
||||
*
|
||||
* This header defines the data structures and constants used to
|
||||
* communicate with the device.
|
||||
*
|
||||
* BOOTMODE/BOOTROM/FIRMWARE UPLOAD PROTOCOL
|
||||
*
|
||||
* The firmware upload protocol is quite simple and only requires a
|
||||
* handful of commands. See drivers/net/wimax/i2400m/fw.c for more
|
||||
* details.
|
||||
*
|
||||
* The BCF data structure is for the firmware file header.
|
||||
*
|
||||
*
|
||||
* THE DATA / CONTROL PROTOCOL
|
||||
*
|
||||
* This is the normal protocol spoken with the device once the
|
||||
* firmware is uploaded. It transports data payloads and control
|
||||
* messages back and forth.
|
||||
*
|
||||
* It consists 'messages' that pack one or more payloads each. The
|
||||
* format is described in detail in drivers/net/wimax/i2400m/rx.c and
|
||||
* tx.c.
|
||||
*
|
||||
*
|
||||
* THE L3L4 PROTOCOL
|
||||
*
|
||||
* The term L3L4 refers to Layer 3 (the device), Layer 4 (the
|
||||
* driver/host software).
|
||||
*
|
||||
* This is the control protocol used by the host to control the i2400m
|
||||
* device (scan, connect, disconnect...). This is sent to / received
|
||||
* as control frames. These frames consist of a header and zero or
|
||||
* more TLVs with information. We call each control frame a "message".
|
||||
*
|
||||
* Each message is composed of:
|
||||
*
|
||||
* HEADER
|
||||
* [TLV0 + PAYLOAD0]
|
||||
* [TLV1 + PAYLOAD1]
|
||||
* [...]
|
||||
* [TLVN + PAYLOADN]
|
||||
*
|
||||
* The HEADER is defined by 'struct i2400m_l3l4_hdr'. The payloads are
|
||||
* defined by a TLV structure (Type Length Value) which is a 'header'
|
||||
* (struct i2400m_tlv_hdr) and then the payload.
|
||||
*
|
||||
* All integers are represented as Little Endian.
|
||||
*
|
||||
* - REQUESTS AND EVENTS
|
||||
*
|
||||
* The requests can be clasified as follows:
|
||||
*
|
||||
* COMMAND: implies a request from the host to the device requesting
|
||||
* an action being performed. The device will reply with a
|
||||
* message (with the same type as the command), status and
|
||||
* no (TLV) payload. Execution of a command might cause
|
||||
* events (of different type) to be sent later on as
|
||||
* device's state changes.
|
||||
*
|
||||
* GET/SET: similar to COMMAND, but will not cause other
|
||||
* EVENTs. The reply, in the case of GET, will contain
|
||||
* TLVs with the requested information.
|
||||
*
|
||||
* EVENT: asynchronous messages sent from the device, maybe as a
|
||||
* consequence of previous COMMANDs but disassociated from
|
||||
* them.
|
||||
*
|
||||
* Only one request might be pending at the same time (ie: don't
|
||||
* parallelize nor post another GET request before the previous
|
||||
* COMMAND has been acknowledged with it's corresponding reply by the
|
||||
* device).
|
||||
*
|
||||
* The different requests and their formats are described below:
|
||||
*
|
||||
* I2400M_MT_* Message types
|
||||
* I2400M_MS_* Message status (for replies, events)
|
||||
* i2400m_tlv_* TLVs
|
||||
*
|
||||
* data types are named 'struct i2400m_msg_OPNAME', OPNAME matching the
|
||||
* operation.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX__WIMAX__I2400M_H__
|
||||
#define __LINUX__WIMAX__I2400M_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
|
||||
/*
|
||||
* Host Device Interface (HDI) common to all busses
|
||||
*/
|
||||
|
||||
/* Boot-mode (firmware upload mode) commands */
|
||||
|
||||
/* Header for the firmware file */
|
||||
struct i2400m_bcf_hdr {
|
||||
__le32 module_type;
|
||||
__le32 header_len;
|
||||
__le32 header_version;
|
||||
__le32 module_id;
|
||||
__le32 module_vendor;
|
||||
__le32 date; /* BCD YYYMMDD */
|
||||
__le32 size;
|
||||
__le32 key_size; /* in dwords */
|
||||
__le32 modulus_size; /* in dwords */
|
||||
__le32 exponent_size; /* in dwords */
|
||||
__u8 reserved[88];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* Boot mode opcodes */
|
||||
enum i2400m_brh_opcode {
|
||||
I2400M_BRH_READ = 1,
|
||||
I2400M_BRH_WRITE = 2,
|
||||
I2400M_BRH_JUMP = 3,
|
||||
I2400M_BRH_SIGNED_JUMP = 8,
|
||||
I2400M_BRH_HASH_PAYLOAD_ONLY = 9,
|
||||
};
|
||||
|
||||
/* Boot mode command masks and stuff */
|
||||
enum i2400m_brh {
|
||||
I2400M_BRH_SIGNATURE = 0xcbbc0000,
|
||||
I2400M_BRH_SIGNATURE_MASK = 0xffff0000,
|
||||
I2400M_BRH_SIGNATURE_SHIFT = 16,
|
||||
I2400M_BRH_OPCODE_MASK = 0x0000000f,
|
||||
I2400M_BRH_RESPONSE_MASK = 0x000000f0,
|
||||
I2400M_BRH_RESPONSE_SHIFT = 4,
|
||||
I2400M_BRH_DIRECT_ACCESS = 0x00000400,
|
||||
I2400M_BRH_RESPONSE_REQUIRED = 0x00000200,
|
||||
I2400M_BRH_USE_CHECKSUM = 0x00000100,
|
||||
};
|
||||
|
||||
|
||||
/* Constants for bcf->module_id */
|
||||
enum i2400m_bcf_mod_id {
|
||||
/* Firmware file carries its own pokes -- pokes are a set of
|
||||
* magical values that have to be written in certain memory
|
||||
* addresses to get the device up and ready for firmware
|
||||
* download when it is in non-signed boot mode. */
|
||||
I2400M_BCF_MOD_ID_POKES = 0x000000001,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* i2400m_bootrom_header - Header for a boot-mode command
|
||||
*
|
||||
* @cmd: the above command descriptor
|
||||
* @target_addr: where on the device memory should the action be performed.
|
||||
* @data_size: for read/write, amount of data to be read/written
|
||||
* @block_checksum: checksum value (if applicable)
|
||||
* @payload: the beginning of data attached to this header
|
||||
*/
|
||||
struct i2400m_bootrom_header {
|
||||
__le32 command; /* Compose with enum i2400_brh */
|
||||
__le32 target_addr;
|
||||
__le32 data_size;
|
||||
__le32 block_checksum;
|
||||
char payload[0];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
/*
|
||||
* Data / control protocol
|
||||
*/
|
||||
|
||||
/* Packet types for the host-device interface */
|
||||
enum i2400m_pt {
|
||||
I2400M_PT_DATA = 0,
|
||||
I2400M_PT_CTRL,
|
||||
I2400M_PT_TRACE, /* For device debug */
|
||||
I2400M_PT_RESET_WARM, /* device reset */
|
||||
I2400M_PT_RESET_COLD, /* USB[transport] reset, like reconnect */
|
||||
I2400M_PT_ILLEGAL
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Payload for a data packet
|
||||
*
|
||||
* This is prefixed to each and every outgoing DATA type.
|
||||
*/
|
||||
struct i2400m_pl_data_hdr {
|
||||
__le32 reserved;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
/* Misc constants */
|
||||
enum {
|
||||
I2400M_PL_PAD = 16, /* Payload data size alignment */
|
||||
I2400M_PL_SIZE_MAX = 0x3EFF,
|
||||
I2400M_MAX_PLS_IN_MSG = 60,
|
||||
/* protocol barkers: sync sequences; for notifications they
|
||||
* are sent in groups of four. */
|
||||
I2400M_H2D_PREVIEW_BARKER = 0xcafe900d,
|
||||
I2400M_COLD_RESET_BARKER = 0xc01dc01d,
|
||||
I2400M_WARM_RESET_BARKER = 0x50f750f7,
|
||||
I2400M_NBOOT_BARKER = 0xdeadbeef,
|
||||
I2400M_SBOOT_BARKER = 0x0ff1c1a1,
|
||||
I2400M_ACK_BARKER = 0xfeedbabe,
|
||||
I2400M_D2H_MSG_BARKER = 0xbeefbabe,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Hardware payload descriptor
|
||||
*
|
||||
* Bitfields encoded in a struct to enforce typing semantics.
|
||||
*
|
||||
* Look in rx.c and tx.c for a full description of the format.
|
||||
*/
|
||||
struct i2400m_pld {
|
||||
__le32 val;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define I2400M_PLD_SIZE_MASK 0x00003fff
|
||||
#define I2400M_PLD_TYPE_SHIFT 16
|
||||
#define I2400M_PLD_TYPE_MASK 0x000f0000
|
||||
|
||||
/*
|
||||
* Header for a TX message or RX message
|
||||
*
|
||||
* @barker: preamble
|
||||
* @size: used for management of the FIFO queue buffer; before
|
||||
* sending, this is converted to be a real preamble. This
|
||||
* indicates the real size of the TX message that starts at this
|
||||
* point. If the highest bit is set, then this message is to be
|
||||
* skipped.
|
||||
* @sequence: sequence number of this message
|
||||
* @offset: offset where the message itself starts -- see the comments
|
||||
* in the file header about message header and payload descriptor
|
||||
* alignment.
|
||||
* @num_pls: number of payloads in this message
|
||||
* @padding: amount of padding bytes at the end of the message to make
|
||||
* it be of block-size aligned
|
||||
*
|
||||
* Look in rx.c and tx.c for a full description of the format.
|
||||
*/
|
||||
struct i2400m_msg_hdr {
|
||||
union {
|
||||
__le32 barker;
|
||||
__u32 size; /* same size type as barker!! */
|
||||
};
|
||||
union {
|
||||
__le32 sequence;
|
||||
__u32 offset; /* same size type as barker!! */
|
||||
};
|
||||
__le16 num_pls;
|
||||
__le16 rsv1;
|
||||
__le16 padding;
|
||||
__le16 rsv2;
|
||||
struct i2400m_pld pld[0];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* L3/L4 control protocol
|
||||
*/
|
||||
|
||||
enum {
|
||||
/* Interface version */
|
||||
I2400M_L3L4_VERSION = 0x0100,
|
||||
};
|
||||
|
||||
/* Message types */
|
||||
enum i2400m_mt {
|
||||
I2400M_MT_RESERVED = 0x0000,
|
||||
I2400M_MT_INVALID = 0xffff,
|
||||
I2400M_MT_REPORT_MASK = 0x8000,
|
||||
|
||||
I2400M_MT_GET_SCAN_RESULT = 0x4202,
|
||||
I2400M_MT_SET_SCAN_PARAM = 0x4402,
|
||||
I2400M_MT_CMD_RF_CONTROL = 0x4602,
|
||||
I2400M_MT_CMD_SCAN = 0x4603,
|
||||
I2400M_MT_CMD_CONNECT = 0x4604,
|
||||
I2400M_MT_CMD_DISCONNECT = 0x4605,
|
||||
I2400M_MT_CMD_EXIT_IDLE = 0x4606,
|
||||
I2400M_MT_GET_LM_VERSION = 0x5201,
|
||||
I2400M_MT_GET_DEVICE_INFO = 0x5202,
|
||||
I2400M_MT_GET_LINK_STATUS = 0x5203,
|
||||
I2400M_MT_GET_STATISTICS = 0x5204,
|
||||
I2400M_MT_GET_STATE = 0x5205,
|
||||
I2400M_MT_GET_MEDIA_STATUS = 0x5206,
|
||||
I2400M_MT_SET_INIT_CONFIG = 0x5404,
|
||||
I2400M_MT_CMD_INIT = 0x5601,
|
||||
I2400M_MT_CMD_TERMINATE = 0x5602,
|
||||
I2400M_MT_CMD_MODE_OF_OP = 0x5603,
|
||||
I2400M_MT_CMD_RESET_DEVICE = 0x5604,
|
||||
I2400M_MT_CMD_MONITOR_CONTROL = 0x5605,
|
||||
I2400M_MT_CMD_ENTER_POWERSAVE = 0x5606,
|
||||
I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201,
|
||||
I2400M_MT_SET_EAP_SUCCESS = 0x6402,
|
||||
I2400M_MT_SET_EAP_FAIL = 0x6403,
|
||||
I2400M_MT_SET_EAP_KEY = 0x6404,
|
||||
I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602,
|
||||
I2400M_MT_REPORT_SCAN_RESULT = 0xc002,
|
||||
I2400M_MT_REPORT_STATE = 0xd002,
|
||||
I2400M_MT_REPORT_POWERSAVE_READY = 0xd005,
|
||||
I2400M_MT_REPORT_EAP_REQUEST = 0xe002,
|
||||
I2400M_MT_REPORT_EAP_RESTART = 0xe003,
|
||||
I2400M_MT_REPORT_ALT_ACCEPT = 0xe004,
|
||||
I2400M_MT_REPORT_KEY_REQUEST = 0xe005,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Message Ack Status codes
|
||||
*
|
||||
* When a message is replied-to, this status is reported.
|
||||
*/
|
||||
enum i2400m_ms {
|
||||
I2400M_MS_DONE_OK = 0,
|
||||
I2400M_MS_DONE_IN_PROGRESS = 1,
|
||||
I2400M_MS_INVALID_OP = 2,
|
||||
I2400M_MS_BAD_STATE = 3,
|
||||
I2400M_MS_ILLEGAL_VALUE = 4,
|
||||
I2400M_MS_MISSING_PARAMS = 5,
|
||||
I2400M_MS_VERSION_ERROR = 6,
|
||||
I2400M_MS_ACCESSIBILITY_ERROR = 7,
|
||||
I2400M_MS_BUSY = 8,
|
||||
I2400M_MS_CORRUPTED_TLV = 9,
|
||||
I2400M_MS_UNINITIALIZED = 10,
|
||||
I2400M_MS_UNKNOWN_ERROR = 11,
|
||||
I2400M_MS_PRODUCTION_ERROR = 12,
|
||||
I2400M_MS_NO_RF = 13,
|
||||
I2400M_MS_NOT_READY_FOR_POWERSAVE = 14,
|
||||
I2400M_MS_THERMAL_CRITICAL = 15,
|
||||
I2400M_MS_MAX
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* i2400m_tlv - enumeration of the different types of TLVs
|
||||
*
|
||||
* TLVs stand for type-length-value and are the header for a payload
|
||||
* composed of almost anything. Each payload has a type assigned
|
||||
* and a length.
|
||||
*/
|
||||
enum i2400m_tlv {
|
||||
I2400M_TLV_L4_MESSAGE_VERSIONS = 129,
|
||||
I2400M_TLV_SYSTEM_STATE = 141,
|
||||
I2400M_TLV_MEDIA_STATUS = 161,
|
||||
I2400M_TLV_RF_OPERATION = 162,
|
||||
I2400M_TLV_RF_STATUS = 163,
|
||||
I2400M_TLV_DEVICE_RESET_TYPE = 132,
|
||||
I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601,
|
||||
};
|
||||
|
||||
|
||||
struct i2400m_tlv_hdr {
|
||||
__le16 type;
|
||||
__le16 length; /* payload's */
|
||||
__u8 pl[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
struct i2400m_l3l4_hdr {
|
||||
__le16 type;
|
||||
__le16 length; /* payload's */
|
||||
__le16 version;
|
||||
__le16 resv1;
|
||||
__le16 status;
|
||||
__le16 resv2;
|
||||
struct i2400m_tlv_hdr pl[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
/**
|
||||
* i2400m_system_state - different states of the device
|
||||
*/
|
||||
enum i2400m_system_state {
|
||||
I2400M_SS_UNINITIALIZED = 1,
|
||||
I2400M_SS_INIT,
|
||||
I2400M_SS_READY,
|
||||
I2400M_SS_SCAN,
|
||||
I2400M_SS_STANDBY,
|
||||
I2400M_SS_CONNECTING,
|
||||
I2400M_SS_WIMAX_CONNECTED,
|
||||
I2400M_SS_DATA_PATH_CONNECTED,
|
||||
I2400M_SS_IDLE,
|
||||
I2400M_SS_DISCONNECTING,
|
||||
I2400M_SS_OUT_OF_ZONE,
|
||||
I2400M_SS_SLEEPACTIVE,
|
||||
I2400M_SS_PRODUCTION,
|
||||
I2400M_SS_CONFIG,
|
||||
I2400M_SS_RF_OFF,
|
||||
I2400M_SS_RF_SHUTDOWN,
|
||||
I2400M_SS_DEVICE_DISCONNECT,
|
||||
I2400M_SS_MAX,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* i2400m_tlv_system_state - report on the state of the system
|
||||
*
|
||||
* @state: see enum i2400m_system_state
|
||||
*/
|
||||
struct i2400m_tlv_system_state {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__le32 state;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
struct i2400m_tlv_l4_message_versions {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__le16 major;
|
||||
__le16 minor;
|
||||
__le16 branch;
|
||||
__le16 reserved;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
struct i2400m_tlv_detailed_device_info {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__u8 reserved1[400];
|
||||
__u8 mac_address[6];
|
||||
__u8 reserved2[2];
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
enum i2400m_rf_switch_status {
|
||||
I2400M_RF_SWITCH_ON = 1,
|
||||
I2400M_RF_SWITCH_OFF = 2,
|
||||
};
|
||||
|
||||
struct i2400m_tlv_rf_switches_status {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__u8 sw_rf_switch; /* 1 ON, 2 OFF */
|
||||
__u8 hw_rf_switch; /* 1 ON, 2 OFF */
|
||||
__u8 reserved[2];
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
enum {
|
||||
i2400m_rf_operation_on = 1,
|
||||
i2400m_rf_operation_off = 2
|
||||
};
|
||||
|
||||
struct i2400m_tlv_rf_operation {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__le32 status; /* 1 ON, 2 OFF */
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
enum i2400m_tlv_reset_type {
|
||||
I2400M_RESET_TYPE_COLD = 1,
|
||||
I2400M_RESET_TYPE_WARM
|
||||
};
|
||||
|
||||
struct i2400m_tlv_device_reset_type {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__le32 reset_type;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
struct i2400m_tlv_config_idle_parameters {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__le32 idle_timeout; /* 100 to 300000 ms [5min], 100 increments
|
||||
* 0 disabled */
|
||||
__le32 idle_paging_interval; /* frames */
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
enum i2400m_media_status {
|
||||
I2400M_MEDIA_STATUS_LINK_UP = 1,
|
||||
I2400M_MEDIA_STATUS_LINK_DOWN,
|
||||
I2400M_MEDIA_STATUS_LINK_RENEW,
|
||||
};
|
||||
|
||||
struct i2400m_tlv_media_status {
|
||||
struct i2400m_tlv_hdr hdr;
|
||||
__le32 media_status;
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */
|
Reference in New Issue
Block a user