Merge branch 'linus' into timers/core
Make sure the upstream fixes are applied before adding further modifications.
This commit is contained in:
commit
c3b5d3cea5
3182 changed files with 109019 additions and 66067 deletions
|
|
@ -79,6 +79,7 @@ enum acpi_irq_model_id {
|
|||
ACPI_IRQ_MODEL_IOAPIC,
|
||||
ACPI_IRQ_MODEL_IOSAPIC,
|
||||
ACPI_IRQ_MODEL_PLATFORM,
|
||||
ACPI_IRQ_MODEL_GIC,
|
||||
ACPI_IRQ_MODEL_COUNT
|
||||
};
|
||||
|
||||
|
|
@ -152,9 +153,14 @@ void acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa);
|
|||
int acpi_numa_memory_affinity_init (struct acpi_srat_mem_affinity *ma);
|
||||
void acpi_numa_arch_fixup(void);
|
||||
|
||||
#ifndef PHYS_CPUID_INVALID
|
||||
typedef u32 phys_cpuid_t;
|
||||
#define PHYS_CPUID_INVALID (phys_cpuid_t)(-1)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||
/* Arch dependent functions for cpu hotplug support */
|
||||
int acpi_map_cpu(acpi_handle handle, int physid, int *pcpu);
|
||||
int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, int *pcpu);
|
||||
int acpi_unmap_cpu(int cpu);
|
||||
#endif /* CONFIG_ACPI_HOTPLUG_CPU */
|
||||
|
||||
|
|
|
|||
10
include/linux/acpi_irq.h
Normal file
10
include/linux/acpi_irq.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef _LINUX_ACPI_IRQ_H
|
||||
#define _LINUX_ACPI_IRQ_H
|
||||
|
||||
#include <linux/irq.h>
|
||||
|
||||
#ifndef acpi_irq_init
|
||||
static inline void acpi_irq_init(void) { }
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_ACPI_IRQ_H */
|
||||
|
|
@ -24,16 +24,22 @@
|
|||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/arm-cci.h>
|
||||
|
||||
struct device_node;
|
||||
|
||||
#ifdef CONFIG_ARM_CCI
|
||||
extern bool cci_probed(void);
|
||||
#else
|
||||
static inline bool cci_probed(void) { return false; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARM_CCI400_PORT_CTRL
|
||||
extern int cci_ace_get_port(struct device_node *dn);
|
||||
extern int cci_disable_port_by_cpu(u64 mpidr);
|
||||
extern int __cci_control_port_by_device(struct device_node *dn, bool enable);
|
||||
extern int __cci_control_port_by_index(u32 port, bool enable);
|
||||
#else
|
||||
static inline bool cci_probed(void) { return false; }
|
||||
static inline int cci_ace_get_port(struct device_node *dn)
|
||||
{
|
||||
return -ENODEV;
|
||||
|
|
@ -49,6 +55,7 @@ static inline int __cci_control_port_by_index(u32 port, bool enable)
|
|||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define cci_disable_port_by_device(dev) \
|
||||
__cci_control_port_by_device(dev, false)
|
||||
#define cci_enable_port_by_device(dev) \
|
||||
|
|
|
|||
|
|
@ -60,12 +60,15 @@ struct dma_chan_ref {
|
|||
* dependency chain
|
||||
* @ASYNC_TX_FENCE: specify that the next operation in the dependency
|
||||
* chain uses this operation's result as an input
|
||||
* @ASYNC_TX_PQ_XOR_DST: do not overwrite the syndrome but XOR it with the
|
||||
* input data. Required for rmw case.
|
||||
*/
|
||||
enum async_tx_flags {
|
||||
ASYNC_TX_XOR_ZERO_DST = (1 << 0),
|
||||
ASYNC_TX_XOR_DROP_DST = (1 << 1),
|
||||
ASYNC_TX_ACK = (1 << 2),
|
||||
ASYNC_TX_FENCE = (1 << 3),
|
||||
ASYNC_TX_PQ_XOR_DST = (1 << 4),
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ enum rq_flag_bits {
|
|||
|
||||
/* This mask is used for both bio and request merge checking */
|
||||
#define REQ_NOMERGE_FLAGS \
|
||||
(REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA)
|
||||
(REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA | REQ_FLUSH_SEQ)
|
||||
|
||||
#define REQ_RAHEAD (1ULL << __REQ_RAHEAD)
|
||||
#define REQ_THROTTLED (1ULL << __REQ_THROTTLED)
|
||||
|
|
|
|||
|
|
@ -50,6 +50,19 @@
|
|||
#define CEPH_FEATURE_MDS_INLINE_DATA (1ULL<<40)
|
||||
#define CEPH_FEATURE_CRUSH_TUNABLES3 (1ULL<<41)
|
||||
#define CEPH_FEATURE_OSD_PRIMARY_AFFINITY (1ULL<<41) /* overlap w/ tunables3 */
|
||||
#define CEPH_FEATURE_MSGR_KEEPALIVE2 (1ULL<<42)
|
||||
#define CEPH_FEATURE_OSD_POOLRESEND (1ULL<<43)
|
||||
#define CEPH_FEATURE_ERASURE_CODE_PLUGINS_V2 (1ULL<<44)
|
||||
#define CEPH_FEATURE_OSD_SET_ALLOC_HINT (1ULL<<45)
|
||||
#define CEPH_FEATURE_OSD_FADVISE_FLAGS (1ULL<<46)
|
||||
#define CEPH_FEATURE_OSD_REPOP (1ULL<<46) /* overlap with fadvise */
|
||||
#define CEPH_FEATURE_OSD_OBJECT_DIGEST (1ULL<<46) /* overlap with fadvise */
|
||||
#define CEPH_FEATURE_OSD_TRANSACTION_MAY_LAYOUT (1ULL<<46) /* overlap w/ fadvise */
|
||||
#define CEPH_FEATURE_MDS_QUOTA (1ULL<<47)
|
||||
#define CEPH_FEATURE_CRUSH_V4 (1ULL<<48) /* straw2 buckets */
|
||||
#define CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY (1ULL<<49)
|
||||
// duplicated since it was introduced at the same time as MIN_SIZE_RECOVERY
|
||||
#define CEPH_FEATURE_OSD_PROXY_FEATURES (1ULL<<49) /* overlap w/ above */
|
||||
|
||||
/*
|
||||
* The introduction of CEPH_FEATURE_OSD_SNAPMAPPER caused the feature
|
||||
|
|
@ -93,7 +106,8 @@ static inline u64 ceph_sanitize_features(u64 features)
|
|||
CEPH_FEATURE_EXPORT_PEER | \
|
||||
CEPH_FEATURE_OSDMAP_ENC | \
|
||||
CEPH_FEATURE_CRUSH_TUNABLES3 | \
|
||||
CEPH_FEATURE_OSD_PRIMARY_AFFINITY)
|
||||
CEPH_FEATURE_OSD_PRIMARY_AFFINITY | \
|
||||
CEPH_FEATURE_CRUSH_V4)
|
||||
|
||||
#define CEPH_FEATURES_REQUIRED_DEFAULT \
|
||||
(CEPH_FEATURE_NOSRCADDR | \
|
||||
|
|
|
|||
|
|
@ -323,6 +323,7 @@ enum {
|
|||
CEPH_MDS_OP_MKSNAP = 0x01400,
|
||||
CEPH_MDS_OP_RMSNAP = 0x01401,
|
||||
CEPH_MDS_OP_LSSNAP = 0x00402,
|
||||
CEPH_MDS_OP_RENAMESNAP = 0x01403,
|
||||
};
|
||||
|
||||
extern const char *ceph_mds_op_name(int op);
|
||||
|
|
|
|||
|
|
@ -7,13 +7,7 @@
|
|||
#define CEPH_DEFINE_SHOW_FUNC(name) \
|
||||
static int name##_open(struct inode *inode, struct file *file) \
|
||||
{ \
|
||||
struct seq_file *sf; \
|
||||
int ret; \
|
||||
\
|
||||
ret = single_open(file, name, NULL); \
|
||||
sf = file->private_data; \
|
||||
sf->private = inode->i_private; \
|
||||
return ret; \
|
||||
return single_open(file, name, inode->i_private); \
|
||||
} \
|
||||
\
|
||||
static const struct file_operations name##_fops = { \
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ struct ceph_client {
|
|||
struct dentry *debugfs_dir;
|
||||
struct dentry *debugfs_monmap;
|
||||
struct dentry *debugfs_osdmap;
|
||||
struct dentry *debugfs_options;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -191,6 +192,7 @@ extern struct ceph_options *ceph_parse_options(char *options,
|
|||
const char *dev_name, const char *dev_name_end,
|
||||
int (*parse_extra_token)(char *c, void *private),
|
||||
void *private);
|
||||
int ceph_print_client_options(struct seq_file *m, struct ceph_client *client);
|
||||
extern void ceph_destroy_options(struct ceph_options *opt);
|
||||
extern int ceph_compare_options(struct ceph_options *new_opt,
|
||||
struct ceph_client *client);
|
||||
|
|
|
|||
|
|
@ -175,13 +175,12 @@ static inline int ceph_decode_pgid(void **p, void *end, struct ceph_pg *pgid)
|
|||
__u8 version;
|
||||
|
||||
if (!ceph_has_room(p, end, 1 + 8 + 4 + 4)) {
|
||||
pr_warning("incomplete pg encoding");
|
||||
|
||||
pr_warn("incomplete pg encoding\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
version = ceph_decode_8(p);
|
||||
if (version > 1) {
|
||||
pr_warning("do not understand pg encoding %d > 1",
|
||||
pr_warn("do not understand pg encoding %d > 1\n",
|
||||
(int)version);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -541,7 +541,7 @@ struct clk_gpio {
|
|||
|
||||
extern const struct clk_ops clk_gpio_gate_ops;
|
||||
struct clk *clk_register_gpio_gate(struct device *dev, const char *name,
|
||||
const char *parent_name, struct gpio_desc *gpio,
|
||||
const char *parent_name, unsigned gpio, bool active_low,
|
||||
unsigned long flags);
|
||||
|
||||
void of_gpio_clk_gate_setup(struct device_node *node);
|
||||
|
|
|
|||
|
|
@ -20,10 +20,10 @@
|
|||
extern void __iomem *at91_pmc_base;
|
||||
|
||||
#define at91_pmc_read(field) \
|
||||
__raw_readl(at91_pmc_base + field)
|
||||
readl_relaxed(at91_pmc_base + field)
|
||||
|
||||
#define at91_pmc_write(field, value) \
|
||||
__raw_writel(value, at91_pmc_base + field)
|
||||
writel_relaxed(value, at91_pmc_base + field)
|
||||
#else
|
||||
.extern at91_pmc_base
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
void r8a7778_clocks_init(u32 mode);
|
||||
void r8a7779_clocks_init(u32 mode);
|
||||
void rcar_gen2_clocks_init(u32 mode);
|
||||
|
||||
|
|
|
|||
|
|
@ -215,14 +215,14 @@ struct ti_dt_clk {
|
|||
.node_name = name, \
|
||||
}
|
||||
|
||||
/* Maximum number of clock memmaps */
|
||||
#define CLK_MAX_MEMMAPS 4
|
||||
|
||||
/* Static memmap indices */
|
||||
enum {
|
||||
TI_CLKM_CM = 0,
|
||||
TI_CLKM_CM2,
|
||||
TI_CLKM_PRM,
|
||||
TI_CLKM_SCRM,
|
||||
TI_CLKM_CTRL,
|
||||
CLK_MAX_MEMMAPS
|
||||
};
|
||||
|
||||
typedef void (*ti_of_clk_init_cb_t)(struct clk_hw *, struct device_node *);
|
||||
|
|
|
|||
|
|
@ -252,4 +252,10 @@ extern void clocksource_of_init(void);
|
|||
static inline void clocksource_of_init(void) {}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
void acpi_generic_timer_init(void);
|
||||
#else
|
||||
static inline void acpi_generic_timer_init(void) { }
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_CLOCKSOURCE_H */
|
||||
|
|
|
|||
|
|
@ -9,10 +9,24 @@
|
|||
+ __GNUC_MINOR__ * 100 \
|
||||
+ __GNUC_PATCHLEVEL__)
|
||||
|
||||
|
||||
/* Optimization barrier */
|
||||
|
||||
/* The "volatile" is due to gcc bugs */
|
||||
#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
/*
|
||||
* This version is i.e. to prevent dead stores elimination on @ptr
|
||||
* where gcc and llvm may behave differently when otherwise using
|
||||
* normal barrier(): while gcc behavior gets along with a normal
|
||||
* barrier(), llvm needs an explicit input variable to be assumed
|
||||
* clobbered. The issue is as follows: while the inline asm might
|
||||
* access any memory it wants, the compiler could have fit all of
|
||||
* @ptr into memory registers instead, and since @ptr never escaped
|
||||
* from that, it proofed that the inline asm wasn't touching any of
|
||||
* it. This version works well with both compilers, i.e. we're telling
|
||||
* the compiler that the inline asm absolutely may see the contents
|
||||
* of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
|
||||
*/
|
||||
#define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
|
||||
|
||||
/*
|
||||
* This macro obfuscates arithmetic on a variable address so that gcc
|
||||
|
|
|
|||
|
|
@ -13,9 +13,12 @@
|
|||
/* Intel ECC compiler doesn't support gcc specific asm stmts.
|
||||
* It uses intrinsics to do the equivalent things.
|
||||
*/
|
||||
#undef barrier_data
|
||||
#undef RELOC_HIDE
|
||||
#undef OPTIMIZER_HIDE_VAR
|
||||
|
||||
#define barrier_data(ptr) barrier()
|
||||
|
||||
#define RELOC_HIDE(ptr, off) \
|
||||
({ unsigned long __ptr; \
|
||||
__ptr = (unsigned long) (ptr); \
|
||||
|
|
|
|||
|
|
@ -169,6 +169,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
|||
# define barrier() __memory_barrier()
|
||||
#endif
|
||||
|
||||
#ifndef barrier_data
|
||||
# define barrier_data(ptr) barrier()
|
||||
#endif
|
||||
|
||||
/* Unreachable code */
|
||||
#ifndef unreachable
|
||||
# define unreachable() do { } while (1)
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ struct console {
|
|||
struct tty_driver *(*device)(struct console *, int *);
|
||||
void (*unblank)(void);
|
||||
int (*setup)(struct console *, char *);
|
||||
int (*early_setup)(void);
|
||||
int (*match)(struct console *, char *name, int idx, char *options);
|
||||
short flags;
|
||||
short index;
|
||||
int cflag;
|
||||
|
|
@ -141,7 +141,6 @@ extern int console_set_on_cmdline;
|
|||
extern struct console *early_console;
|
||||
|
||||
extern int add_preferred_console(char *name, int idx, char *options);
|
||||
extern int update_console_cmdline(char *name, int idx, char *name_new, int idx_new, char *options);
|
||||
extern void register_console(struct console *);
|
||||
extern int unregister_console(struct console *);
|
||||
extern struct console *console_drivers;
|
||||
|
|
|
|||
|
|
@ -96,13 +96,15 @@ struct crush_rule {
|
|||
* uniform O(1) poor poor
|
||||
* list O(n) optimal poor
|
||||
* tree O(log n) good good
|
||||
* straw O(n) optimal optimal
|
||||
* straw O(n) better better
|
||||
* straw2 O(n) optimal optimal
|
||||
*/
|
||||
enum {
|
||||
CRUSH_BUCKET_UNIFORM = 1,
|
||||
CRUSH_BUCKET_LIST = 2,
|
||||
CRUSH_BUCKET_TREE = 3,
|
||||
CRUSH_BUCKET_STRAW = 4
|
||||
CRUSH_BUCKET_STRAW = 4,
|
||||
CRUSH_BUCKET_STRAW2 = 5,
|
||||
};
|
||||
extern const char *crush_bucket_alg_name(int alg);
|
||||
|
||||
|
|
@ -149,6 +151,11 @@ struct crush_bucket_straw {
|
|||
__u32 *straws; /* 16-bit fixed point */
|
||||
};
|
||||
|
||||
struct crush_bucket_straw2 {
|
||||
struct crush_bucket h;
|
||||
__u32 *item_weights; /* 16-bit fixed point */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -189,6 +196,7 @@ extern void crush_destroy_bucket_uniform(struct crush_bucket_uniform *b);
|
|||
extern void crush_destroy_bucket_list(struct crush_bucket_list *b);
|
||||
extern void crush_destroy_bucket_tree(struct crush_bucket_tree *b);
|
||||
extern void crush_destroy_bucket_straw(struct crush_bucket_straw *b);
|
||||
extern void crush_destroy_bucket_straw2(struct crush_bucket_straw2 *b);
|
||||
extern void crush_destroy_bucket(struct crush_bucket *b);
|
||||
extern void crush_destroy_rule(struct crush_rule *r);
|
||||
extern void crush_destroy(struct crush_map *map);
|
||||
|
|
|
|||
|
|
@ -162,6 +162,33 @@ struct dma_buf_attachment {
|
|||
void *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dma_buf_export_info - holds information needed to export a dma_buf
|
||||
* @exp_name: name of the exporting module - useful for debugging.
|
||||
* @ops: Attach allocator-defined dma buf ops to the new buffer
|
||||
* @size: Size of the buffer
|
||||
* @flags: mode flags for the file
|
||||
* @resv: reservation-object, NULL to allocate default one
|
||||
* @priv: Attach private data of allocator to this buffer
|
||||
*
|
||||
* This structure holds the information required to export the buffer. Used
|
||||
* with dma_buf_export() only.
|
||||
*/
|
||||
struct dma_buf_export_info {
|
||||
const char *exp_name;
|
||||
const struct dma_buf_ops *ops;
|
||||
size_t size;
|
||||
int flags;
|
||||
struct reservation_object *resv;
|
||||
void *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* helper macro for exporters; zeros and fills in most common values
|
||||
*/
|
||||
#define DEFINE_DMA_BUF_EXPORT_INFO(a) \
|
||||
struct dma_buf_export_info a = { .exp_name = KBUILD_MODNAME }
|
||||
|
||||
/**
|
||||
* get_dma_buf - convenience wrapper for get_file.
|
||||
* @dmabuf: [in] pointer to dma_buf
|
||||
|
|
@ -181,12 +208,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
|
|||
void dma_buf_detach(struct dma_buf *dmabuf,
|
||||
struct dma_buf_attachment *dmabuf_attach);
|
||||
|
||||
struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops,
|
||||
size_t size, int flags, const char *,
|
||||
struct reservation_object *);
|
||||
|
||||
#define dma_buf_export(priv, ops, size, flags, resv) \
|
||||
dma_buf_export_named(priv, ops, size, flags, KBUILD_MODNAME, resv)
|
||||
struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info);
|
||||
|
||||
int dma_buf_fd(struct dma_buf *dmabuf, int flags);
|
||||
struct dma_buf *dma_buf_get(int fd);
|
||||
|
|
|
|||
48
include/linux/dma/hsu.h
Normal file
48
include/linux/dma/hsu.h
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Driver for the High Speed UART DMA
|
||||
*
|
||||
* Copyright (C) 2015 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _DMA_HSU_H
|
||||
#define _DMA_HSU_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <linux/platform_data/dma-hsu.h>
|
||||
|
||||
struct hsu_dma;
|
||||
|
||||
/**
|
||||
* struct hsu_dma_chip - representation of HSU DMA hardware
|
||||
* @dev: struct device of the DMA controller
|
||||
* @irq: irq line
|
||||
* @regs: memory mapped I/O space
|
||||
* @length: I/O space length
|
||||
* @offset: offset of the I/O space where registers are located
|
||||
* @hsu: struct hsu_dma that is filed by ->probe()
|
||||
* @pdata: platform data for the DMA controller if provided
|
||||
*/
|
||||
struct hsu_dma_chip {
|
||||
struct device *dev;
|
||||
int irq;
|
||||
void __iomem *regs;
|
||||
unsigned int length;
|
||||
unsigned int offset;
|
||||
struct hsu_dma *hsu;
|
||||
struct hsu_dma_platform_data *pdata;
|
||||
};
|
||||
|
||||
/* Export to the internal users */
|
||||
irqreturn_t hsu_dma_irq(struct hsu_dma_chip *chip, unsigned short nr);
|
||||
|
||||
/* Export to the platform drivers */
|
||||
int hsu_dma_probe(struct hsu_dma_chip *chip);
|
||||
int hsu_dma_remove(struct hsu_dma_chip *chip);
|
||||
|
||||
#endif /* _DMA_HSU_H */
|
||||
|
|
@ -11,10 +11,6 @@
|
|||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called COPYING.
|
||||
*/
|
||||
|
|
@ -574,7 +570,6 @@ struct dma_tx_state {
|
|||
* @copy_align: alignment shift for memcpy operations
|
||||
* @xor_align: alignment shift for xor operations
|
||||
* @pq_align: alignment shift for pq operations
|
||||
* @fill_align: alignment shift for memset operations
|
||||
* @dev_id: unique device ID
|
||||
* @dev: struct device reference for dma mapping api
|
||||
* @src_addr_widths: bit mask of src addr widths the device supports
|
||||
|
|
@ -625,7 +620,6 @@ struct dma_device {
|
|||
u8 copy_align;
|
||||
u8 xor_align;
|
||||
u8 pq_align;
|
||||
u8 fill_align;
|
||||
#define DMA_HAS_PQ_CONTINUE (1 << 15)
|
||||
|
||||
int dev_id;
|
||||
|
|
@ -826,12 +820,6 @@ static inline bool is_dma_pq_aligned(struct dma_device *dev, size_t off1,
|
|||
return dmaengine_check_align(dev->pq_align, off1, off2, len);
|
||||
}
|
||||
|
||||
static inline bool is_dma_fill_aligned(struct dma_device *dev, size_t off1,
|
||||
size_t off2, size_t len)
|
||||
{
|
||||
return dmaengine_check_align(dev->fill_align, off1, off2, len);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_set_maxpq(struct dma_device *dma, int maxpq, int has_pq_continue)
|
||||
{
|
||||
|
|
@ -1098,7 +1086,6 @@ void dma_async_device_unregister(struct dma_device *device);
|
|||
void dma_run_dependencies(struct dma_async_tx_descriptor *tx);
|
||||
struct dma_chan *dma_get_slave_channel(struct dma_chan *chan);
|
||||
struct dma_chan *dma_get_any_slave_channel(struct dma_device *device);
|
||||
struct dma_chan *net_dma_find_channel(void);
|
||||
#define dma_request_channel(mask, x, y) __dma_request_channel(&(mask), x, y)
|
||||
#define dma_request_slave_channel_compat(mask, x, y, dev, name) \
|
||||
__dma_request_slave_channel_compat(&(mask), x, y, dev, name)
|
||||
|
|
@ -1116,27 +1103,4 @@ static inline struct dma_chan
|
|||
|
||||
return __dma_request_channel(mask, fn, fn_param);
|
||||
}
|
||||
|
||||
/* --- Helper iov-locking functions --- */
|
||||
|
||||
struct dma_page_list {
|
||||
char __user *base_address;
|
||||
int nr_pages;
|
||||
struct page **pages;
|
||||
};
|
||||
|
||||
struct dma_pinned_list {
|
||||
int nr_iovecs;
|
||||
struct dma_page_list page_list[0];
|
||||
};
|
||||
|
||||
struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len);
|
||||
void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list);
|
||||
|
||||
dma_cookie_t dma_memcpy_to_iovec(struct dma_chan *chan, struct iovec *iov,
|
||||
struct dma_pinned_list *pinned_list, unsigned char *kdata, size_t len);
|
||||
dma_cookie_t dma_memcpy_pg_to_iovec(struct dma_chan *chan, struct iovec *iov,
|
||||
struct dma_pinned_list *pinned_list, struct page *page,
|
||||
unsigned int offset, size_t len);
|
||||
|
||||
#endif /* DMAENGINE_H */
|
||||
|
|
|
|||
|
|
@ -21,4 +21,10 @@ struct space_resv {
|
|||
#define FS_IOC_RESVSP _IOW('X', 40, struct space_resv)
|
||||
#define FS_IOC_RESVSP64 _IOW('X', 42, struct space_resv)
|
||||
|
||||
#define FALLOC_FL_SUPPORTED_MASK (FALLOC_FL_KEEP_SIZE | \
|
||||
FALLOC_FL_PUNCH_HOLE | \
|
||||
FALLOC_FL_COLLAPSE_RANGE | \
|
||||
FALLOC_FL_ZERO_RANGE | \
|
||||
FALLOC_FL_INSERT_RANGE)
|
||||
|
||||
#endif /* _FALLOC_H_ */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef _FIXP_ARITH_H
|
||||
#define _FIXP_ARITH_H
|
||||
|
||||
#include <linux/math64.h>
|
||||
|
||||
/*
|
||||
* Simplistic fixed-point arithmetics.
|
||||
* Hmm, I'm probably duplicating some code :(
|
||||
|
|
@ -29,59 +31,126 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* The type representing fixed-point values */
|
||||
typedef s16 fixp_t;
|
||||
|
||||
#define FRAC_N 8
|
||||
#define FRAC_MASK ((1<<FRAC_N)-1)
|
||||
|
||||
/* Not to be used directly. Use fixp_{cos,sin} */
|
||||
static const fixp_t cos_table[46] = {
|
||||
0x0100, 0x00FF, 0x00FF, 0x00FE, 0x00FD, 0x00FC, 0x00FA, 0x00F8,
|
||||
0x00F6, 0x00F3, 0x00F0, 0x00ED, 0x00E9, 0x00E6, 0x00E2, 0x00DD,
|
||||
0x00D9, 0x00D4, 0x00CF, 0x00C9, 0x00C4, 0x00BE, 0x00B8, 0x00B1,
|
||||
0x00AB, 0x00A4, 0x009D, 0x0096, 0x008F, 0x0087, 0x0080, 0x0078,
|
||||
0x0070, 0x0068, 0x005F, 0x0057, 0x004F, 0x0046, 0x003D, 0x0035,
|
||||
0x002C, 0x0023, 0x001A, 0x0011, 0x0008, 0x0000
|
||||
static const s32 sin_table[] = {
|
||||
0x00000000, 0x023be165, 0x04779632, 0x06b2f1d2, 0x08edc7b6, 0x0b27eb5c,
|
||||
0x0d61304d, 0x0f996a26, 0x11d06c96, 0x14060b67, 0x163a1a7d, 0x186c6ddd,
|
||||
0x1a9cd9ac, 0x1ccb3236, 0x1ef74bf2, 0x2120fb82, 0x234815ba, 0x256c6f9e,
|
||||
0x278dde6e, 0x29ac379f, 0x2bc750e8, 0x2ddf003f, 0x2ff31bdd, 0x32037a44,
|
||||
0x340ff241, 0x36185aee, 0x381c8bb5, 0x3a1c5c56, 0x3c17a4e7, 0x3e0e3ddb,
|
||||
0x3fffffff, 0x41ecc483, 0x43d464fa, 0x45b6bb5d, 0x4793a20f, 0x496af3e1,
|
||||
0x4b3c8c11, 0x4d084650, 0x4ecdfec6, 0x508d9210, 0x5246dd48, 0x53f9be04,
|
||||
0x55a6125a, 0x574bb8e5, 0x58ea90c2, 0x5a827999, 0x5c135399, 0x5d9cff82,
|
||||
0x5f1f5ea0, 0x609a52d1, 0x620dbe8a, 0x637984d3, 0x64dd894f, 0x6639b039,
|
||||
0x678dde6d, 0x68d9f963, 0x6a1de735, 0x6b598ea1, 0x6c8cd70a, 0x6db7a879,
|
||||
0x6ed9eba0, 0x6ff389de, 0x71046d3c, 0x720c8074, 0x730baeec, 0x7401e4bf,
|
||||
0x74ef0ebb, 0x75d31a5f, 0x76adf5e5, 0x777f903b, 0x7847d908, 0x7906c0af,
|
||||
0x79bc384c, 0x7a6831b8, 0x7b0a9f8c, 0x7ba3751c, 0x7c32a67c, 0x7cb82884,
|
||||
0x7d33f0c8, 0x7da5f5a3, 0x7e0e2e31, 0x7e6c924f, 0x7ec11aa3, 0x7f0bc095,
|
||||
0x7f4c7e52, 0x7f834ecf, 0x7fb02dc4, 0x7fd317b3, 0x7fec09e1, 0x7ffb025e,
|
||||
0x7fffffff
|
||||
};
|
||||
|
||||
|
||||
/* a: 123 -> 123.0 */
|
||||
static inline fixp_t fixp_new(s16 a)
|
||||
/**
|
||||
* __fixp_sin32() returns the sin of an angle in degrees
|
||||
*
|
||||
* @degrees: angle, in degrees, from 0 to 360.
|
||||
*
|
||||
* The returned value ranges from -0x7fffffff to +0x7fffffff.
|
||||
*/
|
||||
static inline s32 __fixp_sin32(int degrees)
|
||||
{
|
||||
return a<<FRAC_N;
|
||||
s32 ret;
|
||||
bool negative = false;
|
||||
|
||||
if (degrees > 180) {
|
||||
negative = true;
|
||||
degrees -= 180;
|
||||
}
|
||||
if (degrees > 90)
|
||||
degrees = 180 - degrees;
|
||||
|
||||
ret = sin_table[degrees];
|
||||
|
||||
return negative ? -ret : ret;
|
||||
}
|
||||
|
||||
/* a: 0xFFFF -> -1.0
|
||||
0x8000 -> 1.0
|
||||
0x0000 -> 0.0
|
||||
*/
|
||||
static inline fixp_t fixp_new16(s16 a)
|
||||
/**
|
||||
* fixp_sin32() returns the sin of an angle in degrees
|
||||
*
|
||||
* @degrees: angle, in degrees. The angle can be positive or negative
|
||||
*
|
||||
* The returned value ranges from -0x7fffffff to +0x7fffffff.
|
||||
*/
|
||||
static inline s32 fixp_sin32(int degrees)
|
||||
{
|
||||
return ((s32)a)>>(16-FRAC_N);
|
||||
degrees = (degrees % 360 + 360) % 360;
|
||||
|
||||
return __fixp_sin32(degrees);
|
||||
}
|
||||
|
||||
static inline fixp_t fixp_cos(unsigned int degrees)
|
||||
/* cos(x) = sin(x + 90 degrees) */
|
||||
#define fixp_cos32(v) fixp_sin32((v) + 90)
|
||||
|
||||
/*
|
||||
* 16 bits variants
|
||||
*
|
||||
* The returned value ranges from -0x7fff to 0x7fff
|
||||
*/
|
||||
|
||||
#define fixp_sin16(v) (fixp_sin32(v) >> 16)
|
||||
#define fixp_cos16(v) (fixp_cos32(v) >> 16)
|
||||
|
||||
/**
|
||||
* fixp_sin32_rad() - calculates the sin of an angle in radians
|
||||
*
|
||||
* @radians: angle, in radians
|
||||
* @twopi: value to be used for 2*pi
|
||||
*
|
||||
* Provides a variant for the cases where just 360
|
||||
* values is not enough. This function uses linear
|
||||
* interpolation to a wider range of values given by
|
||||
* twopi var.
|
||||
*
|
||||
* Experimental tests gave a maximum difference of
|
||||
* 0.000038 between the value calculated by sin() and
|
||||
* the one produced by this function, when twopi is
|
||||
* equal to 360000. That seems to be enough precision
|
||||
* for practical purposes.
|
||||
*
|
||||
* Please notice that two high numbers for twopi could cause
|
||||
* overflows, so the routine will not allow values of twopi
|
||||
* bigger than 1^18.
|
||||
*/
|
||||
static inline s32 fixp_sin32_rad(u32 radians, u32 twopi)
|
||||
{
|
||||
int quadrant = (degrees / 90) & 3;
|
||||
unsigned int i = degrees % 90;
|
||||
int degrees;
|
||||
s32 v1, v2, dx, dy;
|
||||
s64 tmp;
|
||||
|
||||
if (quadrant == 1 || quadrant == 3)
|
||||
i = 90 - i;
|
||||
/*
|
||||
* Avoid too large values for twopi, as we don't want overflows.
|
||||
*/
|
||||
BUG_ON(twopi > 1 << 18);
|
||||
|
||||
i >>= 1;
|
||||
degrees = (radians * 360) / twopi;
|
||||
tmp = radians - (degrees * twopi) / 360;
|
||||
|
||||
return (quadrant == 1 || quadrant == 2)? -cos_table[i] : cos_table[i];
|
||||
degrees = (degrees % 360 + 360) % 360;
|
||||
v1 = __fixp_sin32(degrees);
|
||||
|
||||
v2 = fixp_sin32(degrees + 1);
|
||||
|
||||
dx = twopi / 360;
|
||||
dy = v2 - v1;
|
||||
|
||||
tmp *= dy;
|
||||
|
||||
return v1 + div_s64(tmp, dx);
|
||||
}
|
||||
|
||||
static inline fixp_t fixp_sin(unsigned int degrees)
|
||||
{
|
||||
return -fixp_cos(degrees + 90);
|
||||
}
|
||||
/* cos(x) = sin(x + pi/2 radians) */
|
||||
|
||||
static inline fixp_t fixp_mult(fixp_t a, fixp_t b)
|
||||
{
|
||||
return ((s32)(a*b))>>FRAC_N;
|
||||
}
|
||||
#define fixp_cos32_rad(rad, twopi) \
|
||||
fixp_sin32_rad(rad + twopi / 4, twopi)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1820,7 +1820,7 @@ struct super_operations {
|
|||
#define I_SYNC (1 << __I_SYNC)
|
||||
#define I_REFERENCED (1 << 8)
|
||||
#define __I_DIO_WAKEUP 9
|
||||
#define I_DIO_WAKEUP (1 << I_DIO_WAKEUP)
|
||||
#define I_DIO_WAKEUP (1 << __I_DIO_WAKEUP)
|
||||
#define I_LINKABLE (1 << 10)
|
||||
#define I_DIRTY_TIME (1 << 11)
|
||||
#define __I_DIRTY_TIME_EXPIRED 12
|
||||
|
|
@ -2644,6 +2644,9 @@ enum {
|
|||
|
||||
/* filesystem can handle aio writes beyond i_size */
|
||||
DIO_ASYNC_EXTEND = 0x04,
|
||||
|
||||
/* inode/fs/bdev does not need truncate protection */
|
||||
DIO_SKIP_DIO_COUNT = 0x08,
|
||||
};
|
||||
|
||||
void dio_end_io(struct bio *bio, int error);
|
||||
|
|
@ -2666,7 +2669,31 @@ static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
|
|||
#endif
|
||||
|
||||
void inode_dio_wait(struct inode *inode);
|
||||
void inode_dio_done(struct inode *inode);
|
||||
|
||||
/*
|
||||
* inode_dio_begin - signal start of a direct I/O requests
|
||||
* @inode: inode the direct I/O happens on
|
||||
*
|
||||
* This is called once we've finished processing a direct I/O request,
|
||||
* and is used to wake up callers waiting for direct I/O to be quiesced.
|
||||
*/
|
||||
static inline void inode_dio_begin(struct inode *inode)
|
||||
{
|
||||
atomic_inc(&inode->i_dio_count);
|
||||
}
|
||||
|
||||
/*
|
||||
* inode_dio_end - signal finish of a direct I/O requests
|
||||
* @inode: inode the direct I/O happens on
|
||||
*
|
||||
* This is called once we've finished processing a direct I/O request,
|
||||
* and is used to wake up callers waiting for direct I/O to be quiesced.
|
||||
*/
|
||||
static inline void inode_dio_end(struct inode *inode)
|
||||
{
|
||||
if (atomic_dec_and_test(&inode->i_dio_count))
|
||||
wake_up_bit(&inode->i_state, __I_DIO_WAKEUP);
|
||||
}
|
||||
|
||||
extern void inode_set_flags(struct inode *inode, unsigned int flags,
|
||||
unsigned int mask);
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ const char *ftrace_print_hex_seq(struct trace_seq *p,
|
|||
const unsigned char *buf, int len);
|
||||
|
||||
const char *ftrace_print_array_seq(struct trace_seq *p,
|
||||
const void *buf, int buf_len,
|
||||
const void *buf, int count,
|
||||
size_t el_size);
|
||||
|
||||
struct trace_iterator;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ struct vm_area_struct;
|
|||
#define ___GFP_HARDWALL 0x20000u
|
||||
#define ___GFP_THISNODE 0x40000u
|
||||
#define ___GFP_RECLAIMABLE 0x80000u
|
||||
#define ___GFP_NOACCOUNT 0x100000u
|
||||
#define ___GFP_NOTRACK 0x200000u
|
||||
#define ___GFP_NO_KSWAPD 0x400000u
|
||||
#define ___GFP_OTHER_NODE 0x800000u
|
||||
|
|
@ -87,6 +88,7 @@ struct vm_area_struct;
|
|||
#define __GFP_HARDWALL ((__force gfp_t)___GFP_HARDWALL) /* Enforce hardwall cpuset memory allocs */
|
||||
#define __GFP_THISNODE ((__force gfp_t)___GFP_THISNODE)/* No fallback, no policies */
|
||||
#define __GFP_RECLAIMABLE ((__force gfp_t)___GFP_RECLAIMABLE) /* Page is reclaimable */
|
||||
#define __GFP_NOACCOUNT ((__force gfp_t)___GFP_NOACCOUNT) /* Don't account to kmemcg */
|
||||
#define __GFP_NOTRACK ((__force gfp_t)___GFP_NOTRACK) /* Don't track with kmemcheck */
|
||||
|
||||
#define __GFP_NO_KSWAPD ((__force gfp_t)___GFP_NO_KSWAPD)
|
||||
|
|
|
|||
|
|
@ -646,12 +646,13 @@ struct hv_input_signal_event_buffer {
|
|||
};
|
||||
|
||||
struct vmbus_channel {
|
||||
/* Unique channel id */
|
||||
int id;
|
||||
|
||||
struct list_head listentry;
|
||||
|
||||
struct hv_device *device_obj;
|
||||
|
||||
struct work_struct work;
|
||||
|
||||
enum vmbus_channel_state state;
|
||||
|
||||
struct vmbus_channel_offer_channel offermsg;
|
||||
|
|
@ -672,7 +673,6 @@ struct vmbus_channel {
|
|||
struct hv_ring_buffer_info outbound; /* send to parent */
|
||||
struct hv_ring_buffer_info inbound; /* receive from parent */
|
||||
spinlock_t inbound_lock;
|
||||
struct workqueue_struct *controlwq;
|
||||
|
||||
struct vmbus_close_msg close_msg;
|
||||
|
||||
|
|
@ -758,6 +758,9 @@ struct vmbus_channel {
|
|||
* link up channels based on their CPU affinity.
|
||||
*/
|
||||
struct list_head percpu_list;
|
||||
|
||||
int num_sc;
|
||||
int next_oc;
|
||||
};
|
||||
|
||||
static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
|
||||
|
|
@ -861,6 +864,14 @@ extern int vmbus_sendpacket(struct vmbus_channel *channel,
|
|||
enum vmbus_packet_type type,
|
||||
u32 flags);
|
||||
|
||||
extern int vmbus_sendpacket_ctl(struct vmbus_channel *channel,
|
||||
void *buffer,
|
||||
u32 bufferLen,
|
||||
u64 requestid,
|
||||
enum vmbus_packet_type type,
|
||||
u32 flags,
|
||||
bool kick_q);
|
||||
|
||||
extern int vmbus_sendpacket_pagebuffer(struct vmbus_channel *channel,
|
||||
struct hv_page_buffer pagebuffers[],
|
||||
u32 pagecount,
|
||||
|
|
@ -868,6 +879,15 @@ extern int vmbus_sendpacket_pagebuffer(struct vmbus_channel *channel,
|
|||
u32 bufferlen,
|
||||
u64 requestid);
|
||||
|
||||
extern int vmbus_sendpacket_pagebuffer_ctl(struct vmbus_channel *channel,
|
||||
struct hv_page_buffer pagebuffers[],
|
||||
u32 pagecount,
|
||||
void *buffer,
|
||||
u32 bufferlen,
|
||||
u64 requestid,
|
||||
u32 flags,
|
||||
bool kick_q);
|
||||
|
||||
extern int vmbus_sendpacket_multipagebuffer(struct vmbus_channel *channel,
|
||||
struct hv_multipage_buffer *mpb,
|
||||
void *buffer,
|
||||
|
|
@ -1106,6 +1126,16 @@ void vmbus_driver_unregister(struct hv_driver *hv_driver);
|
|||
0x9A, 0xE7, 0x6B, 0x17, 0x49, 0x77, 0xC1, 0x92 \
|
||||
}
|
||||
|
||||
/*
|
||||
* NetworkDirect. This is the guest RDMA service.
|
||||
* {8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}
|
||||
*/
|
||||
#define HV_ND_GUID \
|
||||
.guid = { \
|
||||
0x3d, 0xaf, 0x2e, 0x8c, 0xa7, 0x32, 0x09, 0x4b, \
|
||||
0xab, 0x99, 0xbd, 0x1f, 0x1c, 0x86, 0xb5, 0x01 \
|
||||
}
|
||||
|
||||
/*
|
||||
* Common header for Hyper-V ICs
|
||||
*/
|
||||
|
|
@ -1213,6 +1243,7 @@ void hv_kvp_onchannelcallback(void *);
|
|||
int hv_vss_init(struct hv_util_service *);
|
||||
void hv_vss_deinit(void);
|
||||
void hv_vss_onchannelcallback(void *);
|
||||
void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid);
|
||||
|
||||
extern struct resource hyperv_mmio;
|
||||
|
||||
|
|
|
|||
|
|
@ -115,10 +115,19 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
|
|||
* Extended Capability Register
|
||||
*/
|
||||
|
||||
#define ecap_niotlb_iunits(e) ((((e) >> 24) & 0xff) + 1)
|
||||
#define ecap_pss(e) ((e >> 35) & 0x1f)
|
||||
#define ecap_eafs(e) ((e >> 34) & 0x1)
|
||||
#define ecap_nwfs(e) ((e >> 33) & 0x1)
|
||||
#define ecap_srs(e) ((e >> 31) & 0x1)
|
||||
#define ecap_ers(e) ((e >> 30) & 0x1)
|
||||
#define ecap_prs(e) ((e >> 29) & 0x1)
|
||||
#define ecap_pasid(e) ((e >> 28) & 0x1)
|
||||
#define ecap_dis(e) ((e >> 27) & 0x1)
|
||||
#define ecap_nest(e) ((e >> 26) & 0x1)
|
||||
#define ecap_mts(e) ((e >> 25) & 0x1)
|
||||
#define ecap_ecs(e) ((e >> 24) & 0x1)
|
||||
#define ecap_iotlb_offset(e) ((((e) >> 8) & 0x3ff) * 16)
|
||||
#define ecap_max_iotlb_offset(e) \
|
||||
(ecap_iotlb_offset(e) + ecap_niotlb_iunits(e) * 16)
|
||||
#define ecap_max_iotlb_offset(e) (ecap_iotlb_offset(e) + 16)
|
||||
#define ecap_coherent(e) ((e) & 0x1)
|
||||
#define ecap_qis(e) ((e) & 0x2)
|
||||
#define ecap_pass_through(e) ((e >> 6) & 0x1)
|
||||
|
|
@ -180,6 +189,9 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
|
|||
#define DMA_GSTS_IRES (((u32)1) << 25)
|
||||
#define DMA_GSTS_CFIS (((u32)1) << 23)
|
||||
|
||||
/* DMA_RTADDR_REG */
|
||||
#define DMA_RTADDR_RTT (((u64)1) << 11)
|
||||
|
||||
/* CCMD_REG */
|
||||
#define DMA_CCMD_ICC (((u64)1) << 63)
|
||||
#define DMA_CCMD_GLOBAL_INVL (((u64)1) << 61)
|
||||
|
|
|
|||
|
|
@ -72,6 +72,8 @@ void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
|
|||
resource_size_t size);
|
||||
void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
|
||||
resource_size_t size);
|
||||
void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset,
|
||||
resource_size_t size);
|
||||
void devm_iounmap(struct device *dev, void __iomem *addr);
|
||||
int check_signature(const volatile void __iomem *io_addr,
|
||||
const unsigned char *signature, int length);
|
||||
|
|
|
|||
31
include/linux/irqchip/arm-gic-acpi.h
Normal file
31
include/linux/irqchip/arm-gic-acpi.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Copyright (C) 2014, Linaro Ltd.
|
||||
* Author: Tomasz Nowicki <tomasz.nowicki@linaro.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef ARM_GIC_ACPI_H_
|
||||
#define ARM_GIC_ACPI_H_
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
/*
|
||||
* Hard code here, we can not get memory size from MADT (but FDT does),
|
||||
* Actually no need to do that, because this size can be inferred
|
||||
* from GIC spec.
|
||||
*/
|
||||
#define ACPI_GICV2_DIST_MEM_SIZE (SZ_4K)
|
||||
#define ACPI_GIC_CPU_IF_MEM_SIZE (SZ_8K)
|
||||
|
||||
struct acpi_table_header;
|
||||
|
||||
int gic_v2_acpi_init(struct acpi_table_header *table);
|
||||
void acpi_gic_init(void);
|
||||
#else
|
||||
static inline void acpi_gic_init(void) { }
|
||||
#endif
|
||||
|
||||
#endif /* ARM_GIC_ACPI_H_ */
|
||||
|
|
@ -95,8 +95,6 @@
|
|||
|
||||
struct device_node;
|
||||
|
||||
extern struct irq_chip gic_arch_extn;
|
||||
|
||||
void gic_set_irqchip_flags(unsigned long flags);
|
||||
void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *,
|
||||
u32 offset, struct device_node *);
|
||||
|
|
|
|||
43
include/linux/jz4780-nemc.h
Normal file
43
include/linux/jz4780-nemc.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* JZ4780 NAND/external memory controller (NEMC)
|
||||
*
|
||||
* Copyright (c) 2015 Imagination Technologies
|
||||
* Author: Alex Smith <alex@alex-smith.me.uk>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_JZ4780_NEMC_H__
|
||||
#define __LINUX_JZ4780_NEMC_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct device;
|
||||
|
||||
/*
|
||||
* Number of NEMC banks. Note that there are actually 6, but they are numbered
|
||||
* from 1.
|
||||
*/
|
||||
#define JZ4780_NEMC_NUM_BANKS 7
|
||||
|
||||
/**
|
||||
* enum jz4780_nemc_bank_type - device types which can be connected to a bank
|
||||
* @JZ4780_NEMC_BANK_SRAM: SRAM
|
||||
* @JZ4780_NEMC_BANK_NAND: NAND
|
||||
*/
|
||||
enum jz4780_nemc_bank_type {
|
||||
JZ4780_NEMC_BANK_SRAM,
|
||||
JZ4780_NEMC_BANK_NAND,
|
||||
};
|
||||
|
||||
extern unsigned int jz4780_nemc_num_banks(struct device *dev);
|
||||
|
||||
extern void jz4780_nemc_set_type(struct device *dev, unsigned int bank,
|
||||
enum jz4780_nemc_bank_type type);
|
||||
extern void jz4780_nemc_assert(struct device *dev, unsigned int bank,
|
||||
bool assert);
|
||||
|
||||
#endif /* __LINUX_JZ4780_NEMC_H__ */
|
||||
|
|
@ -35,6 +35,15 @@
|
|||
*/
|
||||
#define IS_MODULE(option) config_enabled(option##_MODULE)
|
||||
|
||||
/*
|
||||
* IS_REACHABLE(CONFIG_FOO) evaluates to 1 if the currently compiled
|
||||
* code can call a function defined in code compiled based on CONFIG_FOO.
|
||||
* This is similar to IS_ENABLED(), but returns false when invoked from
|
||||
* built-in code when CONFIG_FOO is set to 'm'.
|
||||
*/
|
||||
#define IS_REACHABLE(option) (config_enabled(option) || \
|
||||
(config_enabled(option##_MODULE) && config_enabled(MODULE)))
|
||||
|
||||
/*
|
||||
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
||||
* 0 otherwise.
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@
|
|||
#error KEXEC_CONTROL_MEMORY_LIMIT not defined
|
||||
#endif
|
||||
|
||||
#ifndef KEXEC_CONTROL_MEMORY_GFP
|
||||
#define KEXEC_CONTROL_MEMORY_GFP GFP_KERNEL
|
||||
#endif
|
||||
|
||||
#ifndef KEXEC_CONTROL_PAGE_SIZE
|
||||
#error KEXEC_CONTROL_PAGE_SIZE not defined
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ struct lguest_data {
|
|||
u32 tsc_khz;
|
||||
|
||||
/* Fields initialized by the Guest at boot: */
|
||||
/* Instruction range to suppress interrupts even if enabled */
|
||||
unsigned long noirq_start, noirq_end;
|
||||
/* Instruction to suppress interrupts even if enabled */
|
||||
unsigned long noirq_iret;
|
||||
/* Address above which page tables are all identical. */
|
||||
unsigned long kernel_address;
|
||||
/* The vector to try to use for system calls (0x40 or 0x80). */
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ enum {
|
|||
ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */
|
||||
ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */
|
||||
ATA_LFLAG_RST_ONCE = (1 << 9), /* limit recovery to one reset */
|
||||
ATA_LFLAG_CHANGED = (1 << 10), /* LPM state changed on this link */
|
||||
|
||||
/* struct ata_port flags */
|
||||
ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */
|
||||
|
|
@ -309,6 +310,12 @@ enum {
|
|||
*/
|
||||
ATA_TMOUT_PMP_SRST_WAIT = 5000,
|
||||
|
||||
/* When the LPM policy is set to ATA_LPM_MAX_POWER, there might
|
||||
* be a spurious PHY event, so ignore the first PHY event that
|
||||
* occurs within 10s after the policy change.
|
||||
*/
|
||||
ATA_TMOUT_SPURIOUS_PHY = 10000,
|
||||
|
||||
/* ATA bus states */
|
||||
BUS_UNKNOWN = 0,
|
||||
BUS_DMA = 1,
|
||||
|
|
@ -788,6 +795,8 @@ struct ata_link {
|
|||
struct ata_eh_context eh_context;
|
||||
|
||||
struct ata_device device[ATA_MAX_DEVICES];
|
||||
|
||||
unsigned long last_lpm_change; /* when last LPM change happened */
|
||||
};
|
||||
#define ATA_LINK_CLEAR_BEGIN offsetof(struct ata_link, active_tag)
|
||||
#define ATA_LINK_CLEAR_END offsetof(struct ata_link, device[0])
|
||||
|
|
@ -1201,6 +1210,7 @@ extern struct ata_device *ata_dev_pair(struct ata_device *adev);
|
|||
extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
|
||||
extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap);
|
||||
extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_q);
|
||||
extern bool sata_lpm_ignore_phy_events(struct ata_link *link);
|
||||
|
||||
extern int ata_cable_40wire(struct ata_port *ap);
|
||||
extern int ata_cable_80wire(struct ata_port *ap);
|
||||
|
|
|
|||
|
|
@ -463,6 +463,8 @@ memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg, int order)
|
|||
if (!memcg_kmem_enabled())
|
||||
return true;
|
||||
|
||||
if (gfp & __GFP_NOACCOUNT)
|
||||
return true;
|
||||
/*
|
||||
* __GFP_NOFAIL allocations will move on even if charging is not
|
||||
* possible. Therefore we don't even try, and have this allocation
|
||||
|
|
@ -522,6 +524,8 @@ memcg_kmem_get_cache(struct kmem_cache *cachep, gfp_t gfp)
|
|||
{
|
||||
if (!memcg_kmem_enabled())
|
||||
return cachep;
|
||||
if (gfp & __GFP_NOACCOUNT)
|
||||
return cachep;
|
||||
if (gfp & __GFP_NOFAIL)
|
||||
return cachep;
|
||||
if (in_interrupt() || (!current->mm) || (current->flags & PF_KTHREAD))
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ struct arizona {
|
|||
struct regmap_irq_chip_data *aod_irq_chip;
|
||||
struct regmap_irq_chip_data *irq_chip;
|
||||
|
||||
bool hpdet_magic;
|
||||
bool hpdet_clamp;
|
||||
unsigned int hp_ena;
|
||||
|
||||
struct mutex clk_lock;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#ifndef __LINUX_MFD_CROS_EC_H
|
||||
#define __LINUX_MFD_CROS_EC_H
|
||||
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/mfd/cros_ec_commands.h>
|
||||
#include <linux/mutex.h>
|
||||
|
|
@ -38,20 +39,20 @@ enum {
|
|||
/*
|
||||
* @version: Command version number (often 0)
|
||||
* @command: Command to send (EC_CMD_...)
|
||||
* @outdata: Outgoing data to EC
|
||||
* @outsize: Outgoing length in bytes
|
||||
* @indata: Where to put the incoming data from EC
|
||||
* @insize: Max number of bytes to accept from EC
|
||||
* @result: EC's response to the command (separate from communication failure)
|
||||
* @outdata: Outgoing data to EC
|
||||
* @indata: Where to put the incoming data from EC
|
||||
*/
|
||||
struct cros_ec_command {
|
||||
uint32_t version;
|
||||
uint32_t command;
|
||||
uint8_t *outdata;
|
||||
uint32_t outsize;
|
||||
uint8_t *indata;
|
||||
uint32_t insize;
|
||||
uint32_t result;
|
||||
uint8_t outdata[EC_PROTO2_MAX_PARAM_SIZE];
|
||||
uint8_t indata[EC_PROTO2_MAX_PARAM_SIZE];
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -59,9 +60,17 @@ struct cros_ec_command {
|
|||
*
|
||||
* @ec_name: name of EC device (e.g. 'chromeos-ec')
|
||||
* @phys_name: name of physical comms layer (e.g. 'i2c-4')
|
||||
* @dev: Device pointer
|
||||
* @dev: Device pointer for physical comms device
|
||||
* @vdev: Device pointer for virtual comms device
|
||||
* @cdev: Character device structure for virtual comms device
|
||||
* @was_wake_device: true if this device was set to wake the system from
|
||||
* sleep at the last suspend
|
||||
* @cmd_readmem: direct read of the EC memory-mapped region, if supported
|
||||
* @offset is within EC_LPC_ADDR_MEMMAP region.
|
||||
* @bytes: number of bytes to read. zero means "read a string" (including
|
||||
* the trailing '\0'). At most only EC_MEMMAP_SIZE bytes can be read.
|
||||
* Caller must ensure that the buffer is large enough for the result when
|
||||
* reading a string.
|
||||
*
|
||||
* @priv: Private data
|
||||
* @irq: Interrupt to use
|
||||
|
|
@ -90,8 +99,12 @@ struct cros_ec_device {
|
|||
const char *ec_name;
|
||||
const char *phys_name;
|
||||
struct device *dev;
|
||||
struct device *vdev;
|
||||
struct cdev cdev;
|
||||
bool was_wake_device;
|
||||
struct class *cros_class;
|
||||
int (*cmd_readmem)(struct cros_ec_device *ec, unsigned int offset,
|
||||
unsigned int bytes, void *dest);
|
||||
|
||||
/* These are used to implement the platform-specific interface */
|
||||
void *priv;
|
||||
|
|
|
|||
49
include/linux/mfd/syscon/atmel-st.h
Normal file
49
include/linux/mfd/syscon/atmel-st.h
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright (C) 2005 Ivan Kokshaysky
|
||||
* Copyright (C) SAN People
|
||||
*
|
||||
* System Timer (ST) - System peripherals registers.
|
||||
* Based on AT91RM9200 datasheet revision E.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_MFD_SYSCON_ATMEL_ST_H
|
||||
#define _LINUX_MFD_SYSCON_ATMEL_ST_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#define AT91_ST_CR 0x00 /* Control Register */
|
||||
#define AT91_ST_WDRST BIT(0) /* Watchdog Timer Restart */
|
||||
|
||||
#define AT91_ST_PIMR 0x04 /* Period Interval Mode Register */
|
||||
#define AT91_ST_PIV 0xffff /* Period Interval Value */
|
||||
|
||||
#define AT91_ST_WDMR 0x08 /* Watchdog Mode Register */
|
||||
#define AT91_ST_WDV 0xffff /* Watchdog Counter Value */
|
||||
#define AT91_ST_RSTEN BIT(16) /* Reset Enable */
|
||||
#define AT91_ST_EXTEN BIT(17) /* External Signal Assertion Enable */
|
||||
|
||||
#define AT91_ST_RTMR 0x0c /* Real-time Mode Register */
|
||||
#define AT91_ST_RTPRES 0xffff /* Real-time Prescalar Value */
|
||||
|
||||
#define AT91_ST_SR 0x10 /* Status Register */
|
||||
#define AT91_ST_PITS BIT(0) /* Period Interval Timer Status */
|
||||
#define AT91_ST_WDOVF BIT(1) /* Watchdog Overflow */
|
||||
#define AT91_ST_RTTINC BIT(2) /* Real-time Timer Increment */
|
||||
#define AT91_ST_ALMS BIT(3) /* Alarm Status */
|
||||
|
||||
#define AT91_ST_IER 0x14 /* Interrupt Enable Register */
|
||||
#define AT91_ST_IDR 0x18 /* Interrupt Disable Register */
|
||||
#define AT91_ST_IMR 0x1c /* Interrupt Mask Register */
|
||||
|
||||
#define AT91_ST_RTAR 0x20 /* Real-time Alarm Register */
|
||||
#define AT91_ST_ALMV 0xfffff /* Alarm Value */
|
||||
|
||||
#define AT91_ST_CRTR 0x24 /* Current Real-time Register */
|
||||
#define AT91_ST_CRTV 0xfffff /* Current Real-Time Value */
|
||||
|
||||
#endif /* _LINUX_MFD_SYSCON_ATMEL_ST_H */
|
||||
|
|
@ -207,6 +207,7 @@
|
|||
#define IMX6Q_GPR3_LVDS0_MUX_CTL_IPU1_DI1 (0x1 << 6)
|
||||
#define IMX6Q_GPR3_LVDS0_MUX_CTL_IPU2_DI0 (0x2 << 6)
|
||||
#define IMX6Q_GPR3_LVDS0_MUX_CTL_IPU2_DI1 (0x3 << 6)
|
||||
#define IMX6Q_GPR3_MIPI_MUX_CTL_SHIFT 4
|
||||
#define IMX6Q_GPR3_MIPI_MUX_CTL_MASK (0x3 << 4)
|
||||
#define IMX6Q_GPR3_MIPI_MUX_CTL_IPU1_DI0 (0x0 << 4)
|
||||
#define IMX6Q_GPR3_MIPI_MUX_CTL_IPU1_DI1 (0x1 << 4)
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ struct dma_chan;
|
|||
* data for the MMC controller
|
||||
*/
|
||||
struct tmio_mmc_data {
|
||||
void *chan_priv_tx;
|
||||
void *chan_priv_rx;
|
||||
unsigned int hclk;
|
||||
unsigned long capabilities;
|
||||
unsigned long capabilities2;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
#define MISC_DYNAMIC_MINOR 255
|
||||
|
||||
struct device;
|
||||
struct attribute_group;
|
||||
|
||||
struct miscdevice {
|
||||
int minor;
|
||||
|
|
@ -60,6 +61,7 @@ struct miscdevice {
|
|||
struct list_head list;
|
||||
struct device *parent;
|
||||
struct device *this_device;
|
||||
const struct attribute_group **groups;
|
||||
const char *nodename;
|
||||
umode_t mode;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1345,6 +1345,10 @@ int mlx4_wol_write(struct mlx4_dev *dev, u64 config, int port);
|
|||
int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx);
|
||||
void mlx4_counter_free(struct mlx4_dev *dev, u32 idx);
|
||||
|
||||
void mlx4_set_admin_guid(struct mlx4_dev *dev, __be64 guid, int entry,
|
||||
int port);
|
||||
__be64 mlx4_get_admin_guid(struct mlx4_dev *dev, int entry, int port);
|
||||
void mlx4_set_random_admin_guid(struct mlx4_dev *dev, int entry, int port);
|
||||
int mlx4_flow_attach(struct mlx4_dev *dev,
|
||||
struct mlx4_net_trans_rule *rule, u64 *reg_id);
|
||||
int mlx4_flow_detach(struct mlx4_dev *dev, u64 reg_id);
|
||||
|
|
|
|||
|
|
@ -499,7 +499,7 @@ static inline int page_count(struct page *page)
|
|||
|
||||
static inline bool __compound_tail_refcounted(struct page *page)
|
||||
{
|
||||
return PageAnon(page) && !PageSlab(page) && !PageHeadHuge(page);
|
||||
return !PageSlab(page) && !PageHeadHuge(page);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -512,8 +512,18 @@ static inline int mmc_card_broken_irq_polling(const struct mmc_card *c)
|
|||
|
||||
#define mmc_dev_to_card(d) container_of(d, struct mmc_card, dev)
|
||||
|
||||
extern int mmc_register_driver(struct device_driver *);
|
||||
extern void mmc_unregister_driver(struct device_driver *);
|
||||
/*
|
||||
* MMC device driver (e.g., Flash card, I/O card...)
|
||||
*/
|
||||
struct mmc_driver {
|
||||
struct device_driver drv;
|
||||
int (*probe)(struct mmc_card *);
|
||||
void (*remove)(struct mmc_card *);
|
||||
void (*shutdown)(struct mmc_card *);
|
||||
};
|
||||
|
||||
extern int mmc_register_driver(struct mmc_driver *);
|
||||
extern void mmc_unregister_driver(struct mmc_driver *);
|
||||
|
||||
extern void mmc_fixup_device(struct mmc_card *card,
|
||||
const struct mmc_fixup *table);
|
||||
|
|
|
|||
|
|
@ -7,14 +7,4 @@
|
|||
#define SH_MOBILE_SDHI_IRQ_SDCARD "sdcard"
|
||||
#define SH_MOBILE_SDHI_IRQ_SDIO "sdio"
|
||||
|
||||
struct sh_mobile_sdhi_info {
|
||||
int dma_slave_tx;
|
||||
int dma_slave_rx;
|
||||
unsigned long tmio_flags;
|
||||
unsigned long tmio_caps;
|
||||
unsigned long tmio_caps2;
|
||||
u32 tmio_ocr_mask; /* available MMC voltages */
|
||||
unsigned int cd_gpio;
|
||||
};
|
||||
|
||||
#endif /* LINUX_MMC_SH_MOBILE_SDHI_H */
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
/* ensure we never evaluate anything shorted than an unsigned long
|
||||
* to zero, and ensure we'll never miss the end of an comparison (bjd) */
|
||||
|
||||
#define map_calc_words(map) ((map_bankwidth(map) + (sizeof(unsigned long)-1))/ sizeof(unsigned long))
|
||||
#define map_calc_words(map) ((map_bankwidth(map) + (sizeof(unsigned long)-1)) / sizeof(unsigned long))
|
||||
|
||||
#ifdef CONFIG_MTD_MAP_BANK_WIDTH_8
|
||||
# ifdef map_bankwidth
|
||||
|
|
@ -181,7 +181,7 @@ static inline int map_bankwidth_supported(int w)
|
|||
}
|
||||
}
|
||||
|
||||
#define MAX_MAP_LONGS ( ((MAX_MAP_BANKWIDTH*8) + BITS_PER_LONG - 1) / BITS_PER_LONG )
|
||||
#define MAX_MAP_LONGS (((MAX_MAP_BANKWIDTH * 8) + BITS_PER_LONG - 1) / BITS_PER_LONG)
|
||||
|
||||
typedef union {
|
||||
unsigned long x[MAX_MAP_LONGS];
|
||||
|
|
@ -264,20 +264,22 @@ void unregister_mtd_chip_driver(struct mtd_chip_driver *);
|
|||
struct mtd_info *do_map_probe(const char *name, struct map_info *map);
|
||||
void map_destroy(struct mtd_info *mtd);
|
||||
|
||||
#define ENABLE_VPP(map) do { if(map->set_vpp) map->set_vpp(map, 1); } while(0)
|
||||
#define DISABLE_VPP(map) do { if(map->set_vpp) map->set_vpp(map, 0); } while(0)
|
||||
#define ENABLE_VPP(map) do { if (map->set_vpp) map->set_vpp(map, 1); } while (0)
|
||||
#define DISABLE_VPP(map) do { if (map->set_vpp) map->set_vpp(map, 0); } while (0)
|
||||
|
||||
#define INVALIDATE_CACHED_RANGE(map, from, size) \
|
||||
do { if(map->inval_cache) map->inval_cache(map, from, size); } while(0)
|
||||
do { if (map->inval_cache) map->inval_cache(map, from, size); } while (0)
|
||||
|
||||
|
||||
static inline int map_word_equal(struct map_info *map, map_word val1, map_word val2)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
|
||||
for (i = 0; i < map_words(map); i++) {
|
||||
if (val1.x[i] != val2.x[i])
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -286,9 +288,9 @@ static inline map_word map_word_and(struct map_info *map, map_word val1, map_wor
|
|||
map_word r;
|
||||
int i;
|
||||
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
for (i = 0; i < map_words(map); i++)
|
||||
r.x[i] = val1.x[i] & val2.x[i];
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -297,9 +299,9 @@ static inline map_word map_word_clr(struct map_info *map, map_word val1, map_wor
|
|||
map_word r;
|
||||
int i;
|
||||
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
for (i = 0; i < map_words(map); i++)
|
||||
r.x[i] = val1.x[i] & ~val2.x[i];
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -308,22 +310,33 @@ static inline map_word map_word_or(struct map_info *map, map_word val1, map_word
|
|||
map_word r;
|
||||
int i;
|
||||
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
for (i = 0; i < map_words(map); i++)
|
||||
r.x[i] = val1.x[i] | val2.x[i];
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
#define map_word_andequal(m, a, b, z) map_word_equal(m, z, map_word_and(m, a, b))
|
||||
static inline int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < map_words(map); i++) {
|
||||
if ((val1.x[i] & val2.x[i]) != val3.x[i])
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
for (i = 0; i < map_words(map); i++) {
|
||||
if (val1.x[i] & val2.x[i])
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -355,14 +368,16 @@ static inline map_word map_word_load_partial(struct map_info *map, map_word orig
|
|||
|
||||
if (map_bankwidth_is_large(map)) {
|
||||
char *dest = (char *)&orig;
|
||||
|
||||
memcpy(dest+start, buf, len);
|
||||
} else {
|
||||
for (i=start; i < start+len; i++) {
|
||||
for (i = start; i < start+len; i++) {
|
||||
int bitpos;
|
||||
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
bitpos = i*8;
|
||||
bitpos = i * 8;
|
||||
#else /* __BIG_ENDIAN */
|
||||
bitpos = (map_bankwidth(map)-1-i)*8;
|
||||
bitpos = (map_bankwidth(map) - 1 - i) * 8;
|
||||
#endif
|
||||
orig.x[0] &= ~(0xff << bitpos);
|
||||
orig.x[0] |= (unsigned long)buf[i-start] << bitpos;
|
||||
|
|
@ -384,9 +399,10 @@ static inline map_word map_word_ff(struct map_info *map)
|
|||
|
||||
if (map_bankwidth(map) < MAP_FF_LIMIT) {
|
||||
int bw = 8 * map_bankwidth(map);
|
||||
|
||||
r.x[0] = (1UL << bw) - 1;
|
||||
} else {
|
||||
for (i=0; i<map_words(map); i++)
|
||||
for (i = 0; i < map_words(map); i++)
|
||||
r.x[i] = ~0UL;
|
||||
}
|
||||
return r;
|
||||
|
|
@ -407,7 +423,7 @@ static inline map_word inline_map_read(struct map_info *map, unsigned long ofs)
|
|||
r.x[0] = __raw_readq(map->virt + ofs);
|
||||
#endif
|
||||
else if (map_bankwidth_is_large(map))
|
||||
memcpy_fromio(r.x, map->virt+ofs, map->bankwidth);
|
||||
memcpy_fromio(r.x, map->virt + ofs, map->bankwidth);
|
||||
else
|
||||
BUG();
|
||||
|
||||
|
|
|
|||
|
|
@ -155,6 +155,8 @@ enum spi_nor_option_flags {
|
|||
* @write: [DRIVER-SPECIFIC] write data to the SPI NOR
|
||||
* @erase: [DRIVER-SPECIFIC] erase a sector of the SPI NOR
|
||||
* at the offset @offs
|
||||
* @lock: [FLASH-SPECIFIC] lock a region of the SPI NOR
|
||||
* @unlock: [FLASH-SPECIFIC] unlock a region of the SPI NOR
|
||||
* @priv: the private data
|
||||
*/
|
||||
struct spi_nor {
|
||||
|
|
@ -189,6 +191,9 @@ struct spi_nor {
|
|||
size_t len, size_t *retlen, const u_char *write_buf);
|
||||
int (*erase)(struct spi_nor *nor, loff_t offs);
|
||||
|
||||
int (*flash_lock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
|
||||
int (*flash_unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
|
||||
|
||||
void *priv;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#ifndef _LINUX_NETDEVICE_H
|
||||
#define _LINUX_NETDEVICE_H
|
||||
|
||||
#include <linux/pm_qos.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/bug.h>
|
||||
#include <linux/delay.h>
|
||||
|
|
@ -60,6 +59,7 @@ struct phy_device;
|
|||
struct wireless_dev;
|
||||
/* 802.15.4 specific */
|
||||
struct wpan_dev;
|
||||
struct mpls_dev;
|
||||
|
||||
void netdev_set_default_ethtool_ops(struct net_device *dev,
|
||||
const struct ethtool_ops *ops);
|
||||
|
|
@ -976,7 +976,8 @@ typedef u16 (*select_queue_fallback_t)(struct net_device *dev,
|
|||
* int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh,
|
||||
* u16 flags)
|
||||
* int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq,
|
||||
* struct net_device *dev, u32 filter_mask)
|
||||
* struct net_device *dev, u32 filter_mask,
|
||||
* int nlflags)
|
||||
* int (*ndo_bridge_dellink)(struct net_device *dev, struct nlmsghdr *nlh,
|
||||
* u16 flags);
|
||||
*
|
||||
|
|
@ -1172,7 +1173,8 @@ struct net_device_ops {
|
|||
int (*ndo_bridge_getlink)(struct sk_buff *skb,
|
||||
u32 pid, u32 seq,
|
||||
struct net_device *dev,
|
||||
u32 filter_mask);
|
||||
u32 filter_mask,
|
||||
int nlflags);
|
||||
int (*ndo_bridge_dellink)(struct net_device *dev,
|
||||
struct nlmsghdr *nlh,
|
||||
u16 flags);
|
||||
|
|
@ -1496,8 +1498,6 @@ enum netdev_priv_flags {
|
|||
*
|
||||
* @qdisc_tx_busylock: XXX: need comments on this one
|
||||
*
|
||||
* @pm_qos_req: Power Management QoS object
|
||||
*
|
||||
* FIXME: cleanup struct net_device such that network protocol info
|
||||
* moves out.
|
||||
*/
|
||||
|
|
@ -1627,6 +1627,9 @@ struct net_device {
|
|||
void *ax25_ptr;
|
||||
struct wireless_dev *ieee80211_ptr;
|
||||
struct wpan_dev *ieee802154_ptr;
|
||||
#if IS_ENABLED(CONFIG_MPLS_ROUTING)
|
||||
struct mpls_dev __rcu *mpls_ptr;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Cache lines mostly used on receive path (including eth_type_trans())
|
||||
|
|
@ -2021,10 +2024,10 @@ struct pcpu_sw_netstats {
|
|||
({ \
|
||||
typeof(type) __percpu *pcpu_stats = alloc_percpu(type); \
|
||||
if (pcpu_stats) { \
|
||||
int i; \
|
||||
for_each_possible_cpu(i) { \
|
||||
int __cpu; \
|
||||
for_each_possible_cpu(__cpu) { \
|
||||
typeof(type) *stat; \
|
||||
stat = per_cpu_ptr(pcpu_stats, i); \
|
||||
stat = per_cpu_ptr(pcpu_stats, __cpu); \
|
||||
u64_stats_init(&stat->syncp); \
|
||||
} \
|
||||
} \
|
||||
|
|
|
|||
|
|
@ -39,12 +39,24 @@ static inline void br_drop_fake_rtable(struct sk_buff *skb)
|
|||
|
||||
static inline int nf_bridge_get_physinif(const struct sk_buff *skb)
|
||||
{
|
||||
return skb->nf_bridge ? skb->nf_bridge->physindev->ifindex : 0;
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
|
||||
if (skb->nf_bridge == NULL)
|
||||
return 0;
|
||||
|
||||
nf_bridge = skb->nf_bridge;
|
||||
return nf_bridge->physindev ? nf_bridge->physindev->ifindex : 0;
|
||||
}
|
||||
|
||||
static inline int nf_bridge_get_physoutif(const struct sk_buff *skb)
|
||||
{
|
||||
return skb->nf_bridge ? skb->nf_bridge->physoutdev->ifindex : 0;
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
|
||||
if (skb->nf_bridge == NULL)
|
||||
return 0;
|
||||
|
||||
nf_bridge = skb->nf_bridge;
|
||||
return nf_bridge->physoutdev ? nf_bridge->physoutdev->ifindex : 0;
|
||||
}
|
||||
|
||||
static inline struct net_device *
|
||||
|
|
|
|||
|
|
@ -16,6 +16,13 @@
|
|||
#include <linux/uidgid.h>
|
||||
#include <uapi/linux/nfs4.h>
|
||||
|
||||
enum nfs4_acl_whotype {
|
||||
NFS4_ACL_WHO_NAMED = 0,
|
||||
NFS4_ACL_WHO_OWNER,
|
||||
NFS4_ACL_WHO_GROUP,
|
||||
NFS4_ACL_WHO_EVERYONE,
|
||||
};
|
||||
|
||||
struct nfs4_ace {
|
||||
uint32_t type;
|
||||
uint32_t flag;
|
||||
|
|
|
|||
|
|
@ -511,6 +511,7 @@ extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned
|
|||
* Try to write back everything synchronously (but check the
|
||||
* return value!)
|
||||
*/
|
||||
extern int nfs_sync_inode(struct inode *inode);
|
||||
extern int nfs_wb_all(struct inode *inode);
|
||||
extern int nfs_wb_page(struct inode *inode, struct page* page);
|
||||
extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);
|
||||
|
|
|
|||
|
|
@ -1,79 +0,0 @@
|
|||
/*
|
||||
* include/linux/nfs_idmap.h
|
||||
*
|
||||
* UID and GID to name mapping for clients.
|
||||
*
|
||||
* Copyright (c) 2002 The Regents of the University of Michigan.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Marius Aamodt Eriksen <marius@umich.edu>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. Neither the name of the University 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 ``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 REGENTS 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.
|
||||
*/
|
||||
#ifndef NFS_IDMAP_H
|
||||
#define NFS_IDMAP_H
|
||||
|
||||
#include <linux/uidgid.h>
|
||||
#include <uapi/linux/nfs_idmap.h>
|
||||
|
||||
|
||||
/* Forward declaration to make this header independent of others */
|
||||
struct nfs_client;
|
||||
struct nfs_server;
|
||||
struct nfs_fattr;
|
||||
struct nfs4_string;
|
||||
|
||||
#if IS_ENABLED(CONFIG_NFS_V4)
|
||||
int nfs_idmap_init(void);
|
||||
void nfs_idmap_quit(void);
|
||||
#else
|
||||
static inline int nfs_idmap_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void nfs_idmap_quit(void)
|
||||
{}
|
||||
#endif
|
||||
|
||||
int nfs_idmap_new(struct nfs_client *);
|
||||
void nfs_idmap_delete(struct nfs_client *);
|
||||
|
||||
void nfs_fattr_init_names(struct nfs_fattr *fattr,
|
||||
struct nfs4_string *owner_name,
|
||||
struct nfs4_string *group_name);
|
||||
void nfs_fattr_free_names(struct nfs_fattr *);
|
||||
void nfs_fattr_map_and_free_names(struct nfs_server *, struct nfs_fattr *);
|
||||
|
||||
int nfs_map_name_to_uid(const struct nfs_server *, const char *, size_t, kuid_t *);
|
||||
int nfs_map_group_to_gid(const struct nfs_server *, const char *, size_t, kgid_t *);
|
||||
int nfs_map_uid_to_name(const struct nfs_server *, kuid_t, char *, size_t);
|
||||
int nfs_map_gid_to_group(const struct nfs_server *, kgid_t, char *, size_t);
|
||||
|
||||
int nfs_map_string_to_numeric(const char *name, size_t namelen, __u32 *res);
|
||||
|
||||
extern unsigned int nfs_idmap_cache_timeout;
|
||||
#endif /* NFS_IDMAP_H */
|
||||
|
|
@ -255,11 +255,13 @@ struct nfs4_layoutget {
|
|||
struct nfs4_getdeviceinfo_args {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
struct pnfs_device *pdev;
|
||||
__u32 notify_types;
|
||||
};
|
||||
|
||||
struct nfs4_getdeviceinfo_res {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
struct pnfs_device *pdev;
|
||||
__u32 notification;
|
||||
};
|
||||
|
||||
struct nfs4_layoutcommit_args {
|
||||
|
|
@ -1271,11 +1273,15 @@ struct nfs42_falloc_args {
|
|||
nfs4_stateid falloc_stateid;
|
||||
u64 falloc_offset;
|
||||
u64 falloc_length;
|
||||
const u32 *falloc_bitmask;
|
||||
};
|
||||
|
||||
struct nfs42_falloc_res {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
unsigned int status;
|
||||
|
||||
struct nfs_fattr *falloc_fattr;
|
||||
const struct nfs_server *falloc_server;
|
||||
};
|
||||
|
||||
struct nfs42_seek_args {
|
||||
|
|
|
|||
|
|
@ -460,7 +460,7 @@ struct nilfs_btree_node {
|
|||
/* level */
|
||||
#define NILFS_BTREE_LEVEL_DATA 0
|
||||
#define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1)
|
||||
#define NILFS_BTREE_LEVEL_MAX 14
|
||||
#define NILFS_BTREE_LEVEL_MAX 14 /* Max level (exclusive) */
|
||||
|
||||
/**
|
||||
* struct nilfs_palloc_group_desc - block group descriptor
|
||||
|
|
|
|||
|
|
@ -305,6 +305,7 @@ extern int of_property_read_string_helper(struct device_node *np,
|
|||
extern int of_device_is_compatible(const struct device_node *device,
|
||||
const char *);
|
||||
extern bool of_device_is_available(const struct device_node *device);
|
||||
extern bool of_device_is_big_endian(const struct device_node *device);
|
||||
extern const void *of_get_property(const struct device_node *node,
|
||||
const char *name,
|
||||
int *lenp);
|
||||
|
|
@ -467,6 +468,11 @@ static inline bool of_device_is_available(const struct device_node *device)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline bool of_device_is_big_endian(const struct device_node *device)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline struct property *of_find_property(const struct device_node *np,
|
||||
const char *name,
|
||||
int *lenp)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ extern void *of_fdt_get_property(const void *blob,
|
|||
extern int of_fdt_is_compatible(const void *blob,
|
||||
unsigned long node,
|
||||
const char *compat);
|
||||
extern bool of_fdt_is_big_endian(const void *blob,
|
||||
unsigned long node);
|
||||
extern int of_fdt_match(const void *blob, unsigned long node,
|
||||
const char *const *compat);
|
||||
extern void of_fdt_unflatten_tree(unsigned long *blob,
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@ extern int of_irq_parse_one(struct device_node *device, int index,
|
|||
extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data);
|
||||
extern int of_irq_to_resource(struct device_node *dev, int index,
|
||||
struct resource *r);
|
||||
extern int of_irq_to_resource_table(struct device_node *dev,
|
||||
struct resource *res, int nr_irqs);
|
||||
|
||||
extern void of_irq_init(const struct of_device_id *matches);
|
||||
|
||||
|
|
@ -46,6 +44,8 @@ extern void of_irq_init(const struct of_device_id *matches);
|
|||
extern int of_irq_count(struct device_node *dev);
|
||||
extern int of_irq_get(struct device_node *dev, int index);
|
||||
extern int of_irq_get_byname(struct device_node *dev, const char *name);
|
||||
extern int of_irq_to_resource_table(struct device_node *dev,
|
||||
struct resource *res, int nr_irqs);
|
||||
#else
|
||||
static inline int of_irq_count(struct device_node *dev)
|
||||
{
|
||||
|
|
@ -59,6 +59,11 @@ static inline int of_irq_get_byname(struct device_node *dev, const char *name)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int of_irq_to_resource_table(struct device_node *dev,
|
||||
struct resource *res, int nr_irqs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
|
|
|
|||
|
|
@ -163,7 +163,8 @@ extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);
|
|||
|
||||
extern void gpmc_cs_write_reg(int cs, int idx, u32 val);
|
||||
extern int gpmc_calc_divider(unsigned int sync_clk);
|
||||
extern int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t);
|
||||
extern int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t,
|
||||
const struct gpmc_settings *s);
|
||||
extern int gpmc_cs_program_settings(int cs, struct gpmc_settings *p);
|
||||
extern int gpmc_cs_request(int cs, unsigned long size, unsigned long *base);
|
||||
extern void gpmc_cs_free(int cs);
|
||||
|
|
|
|||
|
|
@ -2541,10 +2541,6 @@
|
|||
|
||||
#define PCI_VENDOR_ID_INTEL 0x8086
|
||||
#define PCI_DEVICE_ID_INTEL_EESSC 0x0008
|
||||
#define PCI_DEVICE_ID_INTEL_SNB_IMC 0x0100
|
||||
#define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
|
||||
#define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
|
||||
#define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
|
||||
#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
|
||||
#define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
|
||||
#define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
|
||||
|
|
|
|||
25
include/linux/platform_data/dma-hsu.h
Normal file
25
include/linux/platform_data/dma-hsu.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Driver for the High Speed UART DMA
|
||||
*
|
||||
* Copyright (C) 2015 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _PLATFORM_DATA_DMA_HSU_H
|
||||
#define _PLATFORM_DATA_DMA_HSU_H
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
struct hsu_dma_slave {
|
||||
struct device *dma_dev;
|
||||
int chan_id;
|
||||
};
|
||||
|
||||
struct hsu_dma_platform_data {
|
||||
unsigned short nr_channels;
|
||||
};
|
||||
|
||||
#endif /* _PLATFORM_DATA_DMA_HSU_H */
|
||||
|
|
@ -48,6 +48,9 @@ struct sdma_script_start_addrs {
|
|||
s32 ssish_2_mcu_addr;
|
||||
s32 hdmi_dma_addr;
|
||||
/* End of v2 array */
|
||||
s32 zcanfd_2_mcu_addr;
|
||||
s32 zqspi_2_mcu_addr;
|
||||
/* End of v3 array */
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,27 +0,0 @@
|
|||
#ifndef __MMC_MSM_SDCC_H
|
||||
#define __MMC_MSM_SDCC_H
|
||||
|
||||
#include <linux/mmc/host.h>
|
||||
#include <linux/mmc/card.h>
|
||||
#include <linux/mmc/sdio_func.h>
|
||||
|
||||
struct msm_mmc_gpio {
|
||||
unsigned no;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
struct msm_mmc_gpio_data {
|
||||
struct msm_mmc_gpio *gpio;
|
||||
u8 size;
|
||||
};
|
||||
|
||||
struct msm_mmc_platform_data {
|
||||
unsigned int ocr_mask; /* available voltages */
|
||||
u32 (*translate_vdd)(struct device *, unsigned int);
|
||||
unsigned int (*status)(struct device *);
|
||||
int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
|
||||
struct msm_mmc_gpio_data *gpio_data;
|
||||
void (*init_card)(struct mmc_card *card);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2008 Google, Inc.
|
||||
* Author: Nick Pelly <npelly@google.com>
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MSM_SERIAL_HS_H
|
||||
#define __ASM_ARCH_MSM_SERIAL_HS_H
|
||||
|
||||
#include <linux/serial_core.h>
|
||||
|
||||
/* API to request the uart clock off or on for low power management
|
||||
* Clients should call request_clock_off() when no uart data is expected,
|
||||
* and must call request_clock_on() before any further uart data can be
|
||||
* received. */
|
||||
extern void msm_hs_request_clock_off(struct uart_port *uport);
|
||||
extern void msm_hs_request_clock_on(struct uart_port *uport);
|
||||
|
||||
/**
|
||||
* struct msm_serial_hs_platform_data
|
||||
* @rx_wakeup_irq: Rx activity irq
|
||||
* @rx_to_inject: extra character to be inserted to Rx tty on wakeup
|
||||
* @inject_rx: 1 = insert rx_to_inject. 0 = do not insert extra character
|
||||
* @exit_lpm_cb: function called before every Tx transaction
|
||||
*
|
||||
* This is an optional structure required for UART Rx GPIO IRQ based
|
||||
* wakeup from low power state. UART wakeup can be triggered by RX activity
|
||||
* (using a wakeup GPIO on the UART RX pin). This should only be used if
|
||||
* there is not a wakeup GPIO on the UART CTS, and the first RX byte is
|
||||
* known (eg., with the Bluetooth Texas Instruments HCILL protocol),
|
||||
* since the first RX byte will always be lost. RTS will be asserted even
|
||||
* while the UART is clocked off in this mode of operation.
|
||||
*/
|
||||
struct msm_serial_hs_platform_data {
|
||||
int rx_wakeup_irq;
|
||||
unsigned char inject_rx_on_wakeup;
|
||||
char rx_to_inject;
|
||||
void (*exit_lpm_cb)(struct uart_port *);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -20,14 +20,9 @@
|
|||
#define ASMARM_ARCH_UART_H
|
||||
|
||||
#define IMXUART_HAVE_RTSCTS (1<<0)
|
||||
#define IMXUART_IRDA (1<<1)
|
||||
|
||||
struct imxuart_platform_data {
|
||||
unsigned int flags;
|
||||
void (*irda_enable)(int enable);
|
||||
unsigned int irda_inv_rx:1;
|
||||
unsigned int irda_inv_tx:1;
|
||||
unsigned short transceiver_delay;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
28
include/linux/qcom_scm.h
Normal file
28
include/linux/qcom_scm.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/* Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
|
||||
* Copyright (C) 2015 Linaro Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only 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.
|
||||
*/
|
||||
#ifndef __QCOM_SCM_H
|
||||
#define __QCOM_SCM_H
|
||||
|
||||
extern int qcom_scm_set_cold_boot_addr(void *entry, const cpumask_t *cpus);
|
||||
extern int qcom_scm_set_warm_boot_addr(void *entry, const cpumask_t *cpus);
|
||||
|
||||
#define QCOM_SCM_CPU_PWR_DOWN_L2_ON 0x0
|
||||
#define QCOM_SCM_CPU_PWR_DOWN_L2_OFF 0x1
|
||||
|
||||
extern void qcom_scm_cpu_power_down(u32 flags);
|
||||
|
||||
#define QCOM_SCM_VERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
|
||||
|
||||
extern u32 qcom_scm_get_version(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -72,6 +72,7 @@ extern const char raid6_empty_zero_page[PAGE_SIZE];
|
|||
/* Routine choices */
|
||||
struct raid6_calls {
|
||||
void (*gen_syndrome)(int, size_t, void **);
|
||||
void (*xor_syndrome)(int, int, int, size_t, void **);
|
||||
int (*valid)(void); /* Returns 1 if this routine set is usable */
|
||||
const char *name; /* Name of this routine set */
|
||||
int prefer; /* Has special performance attribute */
|
||||
|
|
|
|||
|
|
@ -282,7 +282,8 @@ static inline bool rht_shrink_below_30(const struct rhashtable *ht,
|
|||
static inline bool rht_grow_above_100(const struct rhashtable *ht,
|
||||
const struct bucket_table *tbl)
|
||||
{
|
||||
return atomic_read(&ht->nelems) > tbl->size;
|
||||
return atomic_read(&ht->nelems) > tbl->size &&
|
||||
(!ht->p.max_size || tbl->size < ht->p.max_size);
|
||||
}
|
||||
|
||||
/* The bucket lock is selected based on the hash and protects mutations
|
||||
|
|
|
|||
|
|
@ -122,5 +122,5 @@ extern int ndo_dflt_fdb_del(struct ndmsg *ndm,
|
|||
|
||||
extern int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
||||
struct net_device *dev, u16 mode,
|
||||
u32 flags, u32 mask);
|
||||
u32 flags, u32 mask, int nlflags);
|
||||
#endif /* __LINUX_RTNETLINK_H */
|
||||
|
|
|
|||
|
|
@ -175,14 +175,6 @@ extern void get_iowait_load(unsigned long *nr_waiters, unsigned long *load);
|
|||
extern void calc_global_load(unsigned long ticks);
|
||||
extern void update_cpu_load_nohz(void);
|
||||
|
||||
/* Notifier for when a task gets migrated to a new CPU */
|
||||
struct task_migration_notifier {
|
||||
struct task_struct *task;
|
||||
int from_cpu;
|
||||
int to_cpu;
|
||||
};
|
||||
extern void register_task_migration_notifier(struct notifier_block *n);
|
||||
|
||||
extern unsigned long get_parent_ip(unsigned long addr);
|
||||
|
||||
extern void dump_cpu_task(int cpu);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ static inline int rt_task(struct task_struct *p)
|
|||
#ifdef CONFIG_RT_MUTEXES
|
||||
extern int rt_mutex_getprio(struct task_struct *p);
|
||||
extern void rt_mutex_setprio(struct task_struct *p, int prio);
|
||||
extern int rt_mutex_check_prio(struct task_struct *task, int newprio);
|
||||
extern int rt_mutex_get_effective_prio(struct task_struct *task, int newprio);
|
||||
extern struct task_struct *rt_mutex_get_top_task(struct task_struct *task);
|
||||
extern void rt_mutex_adjust_pi(struct task_struct *p);
|
||||
static inline bool tsk_is_pi_blocked(struct task_struct *tsk)
|
||||
|
|
@ -31,9 +31,10 @@ static inline int rt_mutex_getprio(struct task_struct *p)
|
|||
return p->normal_prio;
|
||||
}
|
||||
|
||||
static inline int rt_mutex_check_prio(struct task_struct *task, int newprio)
|
||||
static inline int rt_mutex_get_effective_prio(struct task_struct *task,
|
||||
int newprio)
|
||||
{
|
||||
return 0;
|
||||
return newprio;
|
||||
}
|
||||
|
||||
static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task)
|
||||
|
|
|
|||
|
|
@ -60,6 +60,20 @@ enum {
|
|||
};
|
||||
|
||||
struct uart_8250_dma;
|
||||
struct uart_8250_port;
|
||||
|
||||
/**
|
||||
* 8250 core driver operations
|
||||
*
|
||||
* @setup_irq() Setup irq handling. The universal 8250 driver links this
|
||||
* port to the irq chain. Other drivers may @request_irq().
|
||||
* @release_irq() Undo irq handling. The universal 8250 driver unlinks
|
||||
* the port from the irq chain.
|
||||
*/
|
||||
struct uart_8250_ops {
|
||||
int (*setup_irq)(struct uart_8250_port *);
|
||||
void (*release_irq)(struct uart_8250_port *);
|
||||
};
|
||||
|
||||
/*
|
||||
* This should be used by drivers which want to register
|
||||
|
|
@ -88,6 +102,8 @@ struct uart_8250_port {
|
|||
unsigned char canary; /* non-zero during system sleep
|
||||
* if no_console_suspend
|
||||
*/
|
||||
unsigned char probe;
|
||||
#define UART_PROBE_RSA (1 << 0)
|
||||
|
||||
/*
|
||||
* Some bits in registers are cleared on a read, so they must
|
||||
|
|
@ -100,6 +116,7 @@ struct uart_8250_port {
|
|||
unsigned char msr_saved_flags;
|
||||
|
||||
struct uart_8250_dma *dma;
|
||||
const struct uart_8250_ops *ops;
|
||||
|
||||
/* 8250 specific callbacks */
|
||||
int (*dl_read)(struct uart_8250_port *);
|
||||
|
|
@ -118,11 +135,8 @@ void serial8250_resume_port(int line);
|
|||
|
||||
extern int early_serial_setup(struct uart_port *port);
|
||||
|
||||
extern int serial8250_find_port(struct uart_port *p);
|
||||
extern int serial8250_find_port_for_earlycon(void);
|
||||
extern unsigned int serial8250_early_in(struct uart_port *port, int offset);
|
||||
extern void serial8250_early_out(struct uart_port *port, int offset, int value);
|
||||
extern int setup_early_serial8250_console(char *cmdline);
|
||||
extern void serial8250_do_set_termios(struct uart_port *port,
|
||||
struct ktermios *termios, struct ktermios *old);
|
||||
extern int serial8250_do_startup(struct uart_port *port);
|
||||
|
|
|
|||
|
|
@ -235,7 +235,9 @@ struct uart_port {
|
|||
const struct uart_ops *ops;
|
||||
unsigned int custom_divisor;
|
||||
unsigned int line; /* port index */
|
||||
unsigned int minor;
|
||||
resource_size_t mapbase; /* for ioremap */
|
||||
resource_size_t mapsize;
|
||||
struct device *dev; /* parent device */
|
||||
unsigned char hub6; /* this should be in the 8250 driver */
|
||||
unsigned char suspended;
|
||||
|
|
@ -336,24 +338,29 @@ struct earlycon_device {
|
|||
char options[16]; /* e.g., 115200n8 */
|
||||
unsigned int baud;
|
||||
};
|
||||
int setup_earlycon(char *buf, const char *match,
|
||||
int (*setup)(struct earlycon_device *, const char *));
|
||||
|
||||
struct earlycon_id {
|
||||
char name[16];
|
||||
int (*setup)(struct earlycon_device *, const char *options);
|
||||
} __aligned(32);
|
||||
|
||||
extern int setup_earlycon(char *buf);
|
||||
extern int of_setup_earlycon(unsigned long addr,
|
||||
int (*setup)(struct earlycon_device *, const char *));
|
||||
|
||||
#define EARLYCON_DECLARE(name, func) \
|
||||
static int __init name ## _setup_earlycon(char *buf) \
|
||||
{ \
|
||||
return setup_earlycon(buf, __stringify(name), func); \
|
||||
} \
|
||||
early_param("earlycon", name ## _setup_earlycon);
|
||||
#define EARLYCON_DECLARE(_name, func) \
|
||||
static const struct earlycon_id __earlycon_##_name \
|
||||
__used __section(__earlycon_table) \
|
||||
= { .name = __stringify(_name), \
|
||||
.setup = func }
|
||||
|
||||
#define OF_EARLYCON_DECLARE(name, compat, fn) \
|
||||
_OF_DECLARE(earlycon, name, compat, fn, void *)
|
||||
|
||||
struct uart_port *uart_get_console(struct uart_port *ports, int nr,
|
||||
struct console *c);
|
||||
int uart_parse_earlycon(char *p, unsigned char *iotype, unsigned long *addr,
|
||||
char **options);
|
||||
void uart_parse_options(char *options, int *baud, int *parity, int *bits,
|
||||
int *flow);
|
||||
int uart_set_options(struct uart_port *port, struct console *co, int baud,
|
||||
|
|
|
|||
|
|
@ -1,47 +0,0 @@
|
|||
#ifndef _SERIAL_MFD_H_
|
||||
#define _SERIAL_MFD_H_
|
||||
|
||||
/* HW register offset definition */
|
||||
#define UART_FOR 0x08
|
||||
#define UART_PS 0x0C
|
||||
#define UART_MUL 0x0D
|
||||
#define UART_DIV 0x0E
|
||||
|
||||
#define HSU_GBL_IEN 0x0
|
||||
#define HSU_GBL_IST 0x4
|
||||
|
||||
#define HSU_GBL_INT_BIT_PORT0 0x0
|
||||
#define HSU_GBL_INT_BIT_PORT1 0x1
|
||||
#define HSU_GBL_INT_BIT_PORT2 0x2
|
||||
#define HSU_GBL_INT_BIT_IRI 0x3
|
||||
#define HSU_GBL_INT_BIT_HDLC 0x4
|
||||
#define HSU_GBL_INT_BIT_DMA 0x5
|
||||
|
||||
#define HSU_GBL_ISR 0x8
|
||||
#define HSU_GBL_DMASR 0x400
|
||||
#define HSU_GBL_DMAISR 0x404
|
||||
|
||||
#define HSU_PORT_REG_OFFSET 0x80
|
||||
#define HSU_PORT0_REG_OFFSET 0x80
|
||||
#define HSU_PORT1_REG_OFFSET 0x100
|
||||
#define HSU_PORT2_REG_OFFSET 0x180
|
||||
#define HSU_PORT_REG_LENGTH 0x80
|
||||
|
||||
#define HSU_DMA_CHANS_REG_OFFSET 0x500
|
||||
#define HSU_DMA_CHANS_REG_LENGTH 0x40
|
||||
|
||||
#define HSU_CH_SR 0x0 /* channel status reg */
|
||||
#define HSU_CH_CR 0x4 /* control reg */
|
||||
#define HSU_CH_DCR 0x8 /* descriptor control reg */
|
||||
#define HSU_CH_BSR 0x10 /* max fifo buffer size reg */
|
||||
#define HSU_CH_MOTSR 0x14 /* minimum ocp transfer size */
|
||||
#define HSU_CH_D0SAR 0x20 /* desc 0 start addr */
|
||||
#define HSU_CH_D0TSR 0x24 /* desc 0 transfer size */
|
||||
#define HSU_CH_D1SAR 0x28
|
||||
#define HSU_CH_D1TSR 0x2C
|
||||
#define HSU_CH_D2SAR 0x30
|
||||
#define HSU_CH_D2TSR 0x34
|
||||
#define HSU_CH_D3SAR 0x38
|
||||
#define HSU_CH_D3TSR 0x3C
|
||||
|
||||
#endif
|
||||
|
|
@ -69,6 +69,7 @@ struct shdma_chan {
|
|||
int id; /* Raw id of this channel */
|
||||
int irq; /* Channel IRQ */
|
||||
int slave_id; /* Client ID for slave DMA */
|
||||
int real_slave_id; /* argument passed to filter function */
|
||||
int hw_req; /* DMA request line for slave DMA - same
|
||||
* as MID/RID, used with DT */
|
||||
enum shdma_pm_state pm_state;
|
||||
|
|
|
|||
|
|
@ -773,6 +773,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from,
|
|||
|
||||
struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
|
||||
int node);
|
||||
struct sk_buff *__build_skb(void *data, unsigned int frag_size);
|
||||
struct sk_buff *build_skb(void *data, unsigned int frag_size);
|
||||
static inline struct sk_buff *alloc_skb(unsigned int size,
|
||||
gfp_t priority)
|
||||
|
|
@ -3016,6 +3017,18 @@ static inline bool __skb_checksum_validate_needed(struct sk_buff *skb,
|
|||
*/
|
||||
#define CHECKSUM_BREAK 76
|
||||
|
||||
/* Unset checksum-complete
|
||||
*
|
||||
* Unset checksum complete can be done when packet is being modified
|
||||
* (uncompressed for instance) and checksum-complete value is
|
||||
* invalidated.
|
||||
*/
|
||||
static inline void skb_checksum_complete_unset(struct sk_buff *skb)
|
||||
{
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
}
|
||||
|
||||
/* Validate (init) checksum based on checksum complete.
|
||||
*
|
||||
* Return values:
|
||||
|
|
|
|||
|
|
@ -142,12 +142,18 @@ typedef __be32 rpc_fraghdr;
|
|||
(RPC_REPHDRSIZE + (2 + RPC_MAX_AUTH_SIZE/4))
|
||||
|
||||
/*
|
||||
* RFC1833/RFC3530 rpcbind (v3+) well-known netid's.
|
||||
* Well-known netids. See:
|
||||
*
|
||||
* http://www.iana.org/assignments/rpc-netids/rpc-netids.xhtml
|
||||
*/
|
||||
#define RPCBIND_NETID_UDP "udp"
|
||||
#define RPCBIND_NETID_TCP "tcp"
|
||||
#define RPCBIND_NETID_RDMA "rdma"
|
||||
#define RPCBIND_NETID_SCTP "sctp"
|
||||
#define RPCBIND_NETID_UDP6 "udp6"
|
||||
#define RPCBIND_NETID_TCP6 "tcp6"
|
||||
#define RPCBIND_NETID_RDMA6 "rdma6"
|
||||
#define RPCBIND_NETID_SCTP6 "sctp6"
|
||||
#define RPCBIND_NETID_LOCAL "local"
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -40,11 +40,6 @@
|
|||
#ifndef _LINUX_SUNRPC_XPRTRDMA_H
|
||||
#define _LINUX_SUNRPC_XPRTRDMA_H
|
||||
|
||||
/*
|
||||
* rpcbind (v3+) RDMA netid.
|
||||
*/
|
||||
#define RPCBIND_NETID_RDMA "rdma"
|
||||
|
||||
/*
|
||||
* Constants. Max RPC/NFS header is big enough to account for
|
||||
* additional marshaling buffers passed down by Linux client.
|
||||
|
|
|
|||
|
|
@ -145,11 +145,19 @@ struct tcp_sock {
|
|||
* read the code and the spec side by side (and laugh ...)
|
||||
* See RFC793 and RFC1122. The RFC writes these in capitals.
|
||||
*/
|
||||
u64 bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived
|
||||
* sum(delta(rcv_nxt)), or how many bytes
|
||||
* were acked.
|
||||
*/
|
||||
u32 rcv_nxt; /* What we want to receive next */
|
||||
u32 copied_seq; /* Head of yet unread data */
|
||||
u32 rcv_wup; /* rcv_nxt on last window update sent */
|
||||
u32 snd_nxt; /* Next sequence we send */
|
||||
|
||||
u64 bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked
|
||||
* sum(delta(snd_una)), or how many bytes
|
||||
* were acked.
|
||||
*/
|
||||
u32 snd_una; /* First byte we want an ack for */
|
||||
u32 snd_sml; /* Last byte of the most recently transmitted small packet */
|
||||
u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */
|
||||
|
|
|
|||
|
|
@ -339,6 +339,7 @@ struct tty_file_private {
|
|||
#define TTY_EXCLUSIVE 3 /* Exclusive open mode */
|
||||
#define TTY_DEBUG 4 /* Debugging */
|
||||
#define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */
|
||||
#define TTY_OTHER_DONE 6 /* Closed pty has completed input processing */
|
||||
#define TTY_LDISC_OPEN 11 /* Line discipline is open */
|
||||
#define TTY_PTY_LOCK 16 /* pty private */
|
||||
#define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */
|
||||
|
|
@ -462,7 +463,6 @@ extern int tty_hung_up_p(struct file *filp);
|
|||
extern void do_SAK(struct tty_struct *tty);
|
||||
extern void __do_SAK(struct tty_struct *tty);
|
||||
extern void no_tty(void);
|
||||
extern void tty_flush_to_ldisc(struct tty_struct *tty);
|
||||
extern void tty_buffer_free_all(struct tty_port *port);
|
||||
extern void tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld);
|
||||
extern void tty_buffer_init(struct tty_port *port);
|
||||
|
|
@ -491,6 +491,7 @@ static inline speed_t tty_get_baud_rate(struct tty_struct *tty)
|
|||
|
||||
extern void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old);
|
||||
extern int tty_termios_hw_change(struct ktermios *a, struct ktermios *b);
|
||||
extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt);
|
||||
|
||||
extern struct tty_ldisc *tty_ldisc_ref(struct tty_struct *);
|
||||
extern void tty_ldisc_deref(struct tty_ldisc *);
|
||||
|
|
|
|||
|
|
@ -109,12 +109,12 @@ static inline bool gid_lte(kgid_t left, kgid_t right)
|
|||
|
||||
static inline bool uid_valid(kuid_t uid)
|
||||
{
|
||||
return !uid_eq(uid, INVALID_UID);
|
||||
return __kuid_val(uid) != (uid_t) -1;
|
||||
}
|
||||
|
||||
static inline bool gid_valid(kgid_t gid)
|
||||
{
|
||||
return !gid_eq(gid, INVALID_GID);
|
||||
return __kgid_val(gid) != (gid_t) -1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USER_NS
|
||||
|
|
|
|||
|
|
@ -77,6 +77,8 @@
|
|||
/* Cannot handle ATA_12 or ATA_16 CDBs */ \
|
||||
US_FLAG(NO_REPORT_OPCODES, 0x04000000) \
|
||||
/* Cannot handle MI_REPORT_SUPPORTED_OPERATION_CODES */ \
|
||||
US_FLAG(MAX_SECTORS_240, 0x08000000) \
|
||||
/* Sets max_sectors to 240 */ \
|
||||
|
||||
#define US_FLAG(name, value) US_FL_##name = value ,
|
||||
enum { US_DO_ALL_FLAGS };
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
({ \
|
||||
typeof(as) __fc_i, __fc_as = (as) - 1; \
|
||||
typeof(x) __fc_x = (x); \
|
||||
typeof(*a) *__fc_a = (a); \
|
||||
typeof(*a) const *__fc_a = (a); \
|
||||
for (__fc_i = 0; __fc_i < __fc_as; __fc_i++) { \
|
||||
if (__fc_x op DIV_ROUND_CLOSEST(__fc_a[__fc_i] + \
|
||||
__fc_a[__fc_i + 1], 2)) \
|
||||
|
|
|
|||
|
|
@ -108,8 +108,6 @@ struct virtio_device {
|
|||
void *priv;
|
||||
};
|
||||
|
||||
bool virtio_device_is_legacy_only(struct virtio_device_id id);
|
||||
|
||||
static inline struct virtio_device *dev_to_virtio(struct device *_dev)
|
||||
{
|
||||
return container_of(_dev, struct virtio_device, dev);
|
||||
|
|
|
|||
|
|
@ -298,13 +298,6 @@ static inline __virtio64 cpu_to_virtio64(struct virtio_device *vdev, u64 val)
|
|||
} \
|
||||
} while(0)
|
||||
|
||||
static inline u8 virtio_cread8(struct virtio_device *vdev, unsigned int offset)
|
||||
{
|
||||
u8 ret;
|
||||
vdev->config->get(vdev, offset, &ret, sizeof(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read @count fields, @bytes each. */
|
||||
static inline void __virtio_cread_many(struct virtio_device *vdev,
|
||||
unsigned int offset,
|
||||
|
|
@ -326,7 +319,6 @@ static inline void __virtio_cread_many(struct virtio_device *vdev,
|
|||
} while (gen != old);
|
||||
}
|
||||
|
||||
|
||||
static inline void virtio_cread_bytes(struct virtio_device *vdev,
|
||||
unsigned int offset,
|
||||
void *buf, size_t len)
|
||||
|
|
@ -334,6 +326,13 @@ static inline void virtio_cread_bytes(struct virtio_device *vdev,
|
|||
__virtio_cread_many(vdev, offset, buf, len, 1);
|
||||
}
|
||||
|
||||
static inline u8 virtio_cread8(struct virtio_device *vdev, unsigned int offset)
|
||||
{
|
||||
u8 ret;
|
||||
vdev->config->get(vdev, offset, &ret, sizeof(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void virtio_cwrite8(struct virtio_device *vdev,
|
||||
unsigned int offset, u8 val)
|
||||
{
|
||||
|
|
@ -374,7 +373,6 @@ static inline u64 virtio_cread64(struct virtio_device *vdev,
|
|||
unsigned int offset)
|
||||
{
|
||||
u64 ret;
|
||||
vdev->config->get(vdev, offset, &ret, sizeof(ret));
|
||||
__virtio_cread_many(vdev, offset, &ret, 1, sizeof(ret));
|
||||
return virtio64_to_cpu(vdev, (__force __virtio64)ret);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,19 +21,20 @@
|
|||
* actually quite cheap.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void virtio_mb(bool weak_barriers)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
if (weak_barriers)
|
||||
smp_mb();
|
||||
else
|
||||
#endif
|
||||
mb();
|
||||
}
|
||||
|
||||
static inline void virtio_rmb(bool weak_barriers)
|
||||
{
|
||||
if (weak_barriers)
|
||||
smp_rmb();
|
||||
dma_rmb();
|
||||
else
|
||||
rmb();
|
||||
}
|
||||
|
|
@ -41,26 +42,10 @@ static inline void virtio_rmb(bool weak_barriers)
|
|||
static inline void virtio_wmb(bool weak_barriers)
|
||||
{
|
||||
if (weak_barriers)
|
||||
smp_wmb();
|
||||
dma_wmb();
|
||||
else
|
||||
wmb();
|
||||
}
|
||||
#else
|
||||
static inline void virtio_mb(bool weak_barriers)
|
||||
{
|
||||
mb();
|
||||
}
|
||||
|
||||
static inline void virtio_rmb(bool weak_barriers)
|
||||
{
|
||||
rmb();
|
||||
}
|
||||
|
||||
static inline void virtio_wmb(bool weak_barriers)
|
||||
{
|
||||
wmb();
|
||||
}
|
||||
#endif
|
||||
|
||||
struct virtio_device;
|
||||
struct virtqueue;
|
||||
|
|
|
|||
|
|
@ -26,28 +26,6 @@
|
|||
|
||||
#include <linux/err.h>
|
||||
|
||||
/* Reference clock values */
|
||||
enum {
|
||||
WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */
|
||||
WL12XX_REFCLOCK_26 = 1, /* 26 MHz */
|
||||
WL12XX_REFCLOCK_38 = 2, /* 38.4 MHz */
|
||||
WL12XX_REFCLOCK_52 = 3, /* 52 MHz */
|
||||
WL12XX_REFCLOCK_38_XTAL = 4, /* 38.4 MHz, XTAL */
|
||||
WL12XX_REFCLOCK_26_XTAL = 5, /* 26 MHz, XTAL */
|
||||
};
|
||||
|
||||
/* TCXO clock values */
|
||||
enum {
|
||||
WL12XX_TCXOCLOCK_19_2 = 0, /* 19.2MHz */
|
||||
WL12XX_TCXOCLOCK_26 = 1, /* 26 MHz */
|
||||
WL12XX_TCXOCLOCK_38_4 = 2, /* 38.4MHz */
|
||||
WL12XX_TCXOCLOCK_52 = 3, /* 52 MHz */
|
||||
WL12XX_TCXOCLOCK_16_368 = 4, /* 16.368 MHz */
|
||||
WL12XX_TCXOCLOCK_32_736 = 5, /* 32.736 MHz */
|
||||
WL12XX_TCXOCLOCK_16_8 = 6, /* 16.8 MHz */
|
||||
WL12XX_TCXOCLOCK_33_6 = 7, /* 33.6 MHz */
|
||||
};
|
||||
|
||||
struct wl1251_platform_data {
|
||||
int power_gpio;
|
||||
/* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */
|
||||
|
|
@ -55,41 +33,14 @@ struct wl1251_platform_data {
|
|||
bool use_eeprom;
|
||||
};
|
||||
|
||||
struct wl12xx_platform_data {
|
||||
int irq;
|
||||
int board_ref_clock;
|
||||
int board_tcxo_clock;
|
||||
unsigned long platform_quirks;
|
||||
bool pwr_in_suspend;
|
||||
};
|
||||
|
||||
/* Platform does not support level trigger interrupts */
|
||||
#define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0)
|
||||
|
||||
#ifdef CONFIG_WILINK_PLATFORM_DATA
|
||||
|
||||
int wl12xx_set_platform_data(const struct wl12xx_platform_data *data);
|
||||
|
||||
struct wl12xx_platform_data *wl12xx_get_platform_data(void);
|
||||
|
||||
int wl1251_set_platform_data(const struct wl1251_platform_data *data);
|
||||
|
||||
struct wl1251_platform_data *wl1251_get_platform_data(void);
|
||||
|
||||
#else
|
||||
|
||||
static inline
|
||||
int wl12xx_set_platform_data(const struct wl12xx_platform_data *data)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline
|
||||
struct wl12xx_platform_data *wl12xx_get_platform_data(void)
|
||||
{
|
||||
return ERR_PTR(-ENODATA);
|
||||
}
|
||||
|
||||
static inline
|
||||
int wl1251_set_platform_data(const struct wl1251_platform_data *data)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue