mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 into rmobile-latest
Conflicts: arch/arm/mach-shmobile/Kconfig Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
commit
5e93c6b4ec
2575 changed files with 200821 additions and 101558 deletions
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/resource.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#define AMBA_NR_IRQS 2
|
||||
#define AMBA_CID 0xb105f00d
|
||||
|
|
@ -28,6 +29,7 @@ struct amba_device {
|
|||
struct device dev;
|
||||
struct resource res;
|
||||
struct clk *pclk;
|
||||
struct regulator *vcore;
|
||||
u64 dma_mask;
|
||||
unsigned int periphid;
|
||||
unsigned int irq[AMBA_NR_IRQS];
|
||||
|
|
@ -71,6 +73,12 @@ void amba_release_regions(struct amba_device *);
|
|||
#define amba_pclk_disable(d) \
|
||||
do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0)
|
||||
|
||||
#define amba_vcore_enable(d) \
|
||||
(IS_ERR((d)->vcore) ? 0 : regulator_enable((d)->vcore))
|
||||
|
||||
#define amba_vcore_disable(d) \
|
||||
do { if (!IS_ERR((d)->vcore)) regulator_disable((d)->vcore); } while (0)
|
||||
|
||||
/* Some drivers don't use the struct amba_device */
|
||||
#define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff)
|
||||
#define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f)
|
||||
|
|
|
|||
|
|
@ -113,6 +113,21 @@
|
|||
#define UART01x_LCRH_PEN 0x02
|
||||
#define UART01x_LCRH_BRK 0x01
|
||||
|
||||
#define ST_UART011_DMAWM_RX_1 (0 << 3)
|
||||
#define ST_UART011_DMAWM_RX_2 (1 << 3)
|
||||
#define ST_UART011_DMAWM_RX_4 (2 << 3)
|
||||
#define ST_UART011_DMAWM_RX_8 (3 << 3)
|
||||
#define ST_UART011_DMAWM_RX_16 (4 << 3)
|
||||
#define ST_UART011_DMAWM_RX_32 (5 << 3)
|
||||
#define ST_UART011_DMAWM_RX_48 (6 << 3)
|
||||
#define ST_UART011_DMAWM_TX_1 0
|
||||
#define ST_UART011_DMAWM_TX_2 1
|
||||
#define ST_UART011_DMAWM_TX_4 2
|
||||
#define ST_UART011_DMAWM_TX_8 3
|
||||
#define ST_UART011_DMAWM_TX_16 4
|
||||
#define ST_UART011_DMAWM_TX_32 5
|
||||
#define ST_UART011_DMAWM_TX_48 6
|
||||
|
||||
#define UART010_IIR_RTIS 0x08
|
||||
#define UART010_IIR_TIS 0x04
|
||||
#define UART010_IIR_RIS 0x02
|
||||
|
|
@ -180,6 +195,13 @@ struct amba_device; /* in uncompress this is included but amba/bus.h is not */
|
|||
struct amba_pl010_data {
|
||||
void (*set_mctrl)(struct amba_device *dev, void __iomem *base, unsigned int mctrl);
|
||||
};
|
||||
|
||||
struct dma_chan;
|
||||
struct amba_pl011_data {
|
||||
bool (*dma_filter)(struct dma_chan *chan, void *filter_param);
|
||||
void *dma_rx_param;
|
||||
void *dma_tx_param;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
30
include/linux/average.h
Normal file
30
include/linux/average.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef _LINUX_AVERAGE_H
|
||||
#define _LINUX_AVERAGE_H
|
||||
|
||||
/* Exponentially weighted moving average (EWMA) */
|
||||
|
||||
/* For more documentation see lib/average.c */
|
||||
|
||||
struct ewma {
|
||||
unsigned long internal;
|
||||
unsigned long factor;
|
||||
unsigned long weight;
|
||||
};
|
||||
|
||||
extern void ewma_init(struct ewma *avg, unsigned long factor,
|
||||
unsigned long weight);
|
||||
|
||||
extern struct ewma *ewma_add(struct ewma *avg, unsigned long val);
|
||||
|
||||
/**
|
||||
* ewma_read() - Get average value
|
||||
* @avg: Average structure
|
||||
*
|
||||
* Returns the average value held in @avg.
|
||||
*/
|
||||
static inline unsigned long ewma_read(const struct ewma *avg)
|
||||
{
|
||||
return avg->internal >> avg->factor;
|
||||
}
|
||||
|
||||
#endif /* _LINUX_AVERAGE_H */
|
||||
|
|
@ -109,6 +109,17 @@ static inline __u8 ror8(__u8 word, unsigned int shift)
|
|||
return (word >> shift) | (word << (8 - shift));
|
||||
}
|
||||
|
||||
/**
|
||||
* sign_extend32 - sign extend a 32-bit value using specified bit as sign-bit
|
||||
* @value: value to sign extend
|
||||
* @index: 0 based bit index (0<=index<32) to sign bit
|
||||
*/
|
||||
static inline __s32 sign_extend32(__u32 value, int index)
|
||||
{
|
||||
__u8 shift = 31 - index;
|
||||
return (__s32)(value << shift) >> shift;
|
||||
}
|
||||
|
||||
static inline unsigned fls_long(unsigned long l)
|
||||
{
|
||||
if (sizeof(l) == 4)
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ struct queue_limits {
|
|||
|
||||
unsigned char misaligned;
|
||||
unsigned char discard_misaligned;
|
||||
unsigned char no_cluster;
|
||||
unsigned char cluster;
|
||||
signed char discard_zeroes_data;
|
||||
};
|
||||
|
||||
|
|
@ -380,7 +380,6 @@ struct request_queue
|
|||
#endif
|
||||
};
|
||||
|
||||
#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */
|
||||
#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
|
||||
#define QUEUE_FLAG_STOPPED 2 /* queue is stopped */
|
||||
#define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */
|
||||
|
|
@ -403,7 +402,6 @@ struct request_queue
|
|||
#define QUEUE_FLAG_SECDISCARD 19 /* supports SECDISCARD */
|
||||
|
||||
#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
|
||||
(1 << QUEUE_FLAG_CLUSTER) | \
|
||||
(1 << QUEUE_FLAG_STACKABLE) | \
|
||||
(1 << QUEUE_FLAG_SAME_COMP) | \
|
||||
(1 << QUEUE_FLAG_ADD_RANDOM))
|
||||
|
|
@ -510,6 +508,11 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
|
|||
|
||||
#define rq_data_dir(rq) ((rq)->cmd_flags & 1)
|
||||
|
||||
static inline unsigned int blk_queue_cluster(struct request_queue *q)
|
||||
{
|
||||
return q->limits.cluster;
|
||||
}
|
||||
|
||||
/*
|
||||
* We regard a request as sync, if either a read or a sync write
|
||||
*/
|
||||
|
|
@ -805,6 +808,7 @@ extern struct request_queue *blk_init_allocated_queue(struct request_queue *,
|
|||
extern void blk_cleanup_queue(struct request_queue *);
|
||||
extern void blk_queue_make_request(struct request_queue *, make_request_fn *);
|
||||
extern void blk_queue_bounce_limit(struct request_queue *, u64);
|
||||
extern void blk_limits_max_hw_sectors(struct queue_limits *, unsigned int);
|
||||
extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int);
|
||||
extern void blk_queue_max_segments(struct request_queue *, unsigned short);
|
||||
extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
|
||||
|
|
|
|||
|
|
@ -105,6 +105,8 @@ extern void *__alloc_bootmem_low_node(pg_data_t *pgdat,
|
|||
|
||||
#define alloc_bootmem(x) \
|
||||
__alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_align(x, align) \
|
||||
__alloc_bootmem(x, align, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_nopanic(x) \
|
||||
__alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_pages(x) \
|
||||
|
|
|
|||
|
|
@ -227,8 +227,10 @@ extern int ceph_open_session(struct ceph_client *client);
|
|||
extern void ceph_release_page_vector(struct page **pages, int num_pages);
|
||||
|
||||
extern struct page **ceph_get_direct_page_vector(const char __user *data,
|
||||
int num_pages);
|
||||
extern void ceph_put_page_vector(struct page **pages, int num_pages);
|
||||
int num_pages,
|
||||
bool write_page);
|
||||
extern void ceph_put_page_vector(struct page **pages, int num_pages,
|
||||
bool dirty);
|
||||
extern void ceph_release_page_vector(struct page **pages, int num_pages);
|
||||
extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags);
|
||||
extern int ceph_copy_user_to_page_vector(struct page **pages,
|
||||
|
|
|
|||
36
include/linux/clkdev.h
Normal file
36
include/linux/clkdev.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* include/linux/clkdev.h
|
||||
*
|
||||
* Copyright (C) 2008 Russell King.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Helper for the clk API to assist looking up a struct clk.
|
||||
*/
|
||||
#ifndef __CLKDEV_H
|
||||
#define __CLKDEV_H
|
||||
|
||||
#include <asm/clkdev.h>
|
||||
|
||||
struct clk;
|
||||
struct device;
|
||||
|
||||
struct clk_lookup {
|
||||
struct list_head node;
|
||||
const char *dev_id;
|
||||
const char *con_id;
|
||||
struct clk *clk;
|
||||
};
|
||||
|
||||
struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id,
|
||||
const char *dev_fmt, ...);
|
||||
|
||||
void clkdev_add(struct clk_lookup *cl);
|
||||
void clkdev_drop(struct clk_lookup *cl);
|
||||
|
||||
void clkdev_add_table(struct clk_lookup *, size_t);
|
||||
int clk_add_alias(const char *, const char *, char *, struct device *);
|
||||
|
||||
#endif
|
||||
|
|
@ -61,13 +61,31 @@ union cnt32_to_63 {
|
|||
*
|
||||
* 2) this code must not be preempted for a duration longer than the
|
||||
* 32-bit counter half period minus the longest period between two
|
||||
* calls to this code.
|
||||
* calls to this code;
|
||||
*
|
||||
* Those requirements ensure proper update to the state bit in memory.
|
||||
* This is usually not a problem in practice, but if it is then a kernel
|
||||
* timer should be scheduled to manage for this code to be executed often
|
||||
* enough.
|
||||
*
|
||||
* And finally:
|
||||
*
|
||||
* 3) the cnt_lo argument must be seen as a globally incrementing value,
|
||||
* meaning that it should be a direct reference to the counter data which
|
||||
* can be evaluated according to a specific ordering within the macro,
|
||||
* and not the result of a previous evaluation stored in a variable.
|
||||
*
|
||||
* For example, this is wrong:
|
||||
*
|
||||
* u32 partial = get_hw_count();
|
||||
* u64 full = cnt32_to_63(partial);
|
||||
* return full;
|
||||
*
|
||||
* This is fine:
|
||||
*
|
||||
* u64 full = cnt32_to_63(get_hw_count());
|
||||
* return full;
|
||||
*
|
||||
* Note that the top bit (bit 63) in the returned value should be considered
|
||||
* as garbage. It is not cleared here because callers are likely to use a
|
||||
* multiplier on the returned value which can get rid of the top bit
|
||||
|
|
|
|||
|
|
@ -81,10 +81,10 @@ extern int wait_for_completion_interruptible(struct completion *x);
|
|||
extern int wait_for_completion_killable(struct completion *x);
|
||||
extern unsigned long wait_for_completion_timeout(struct completion *x,
|
||||
unsigned long timeout);
|
||||
extern unsigned long wait_for_completion_interruptible_timeout(
|
||||
struct completion *x, unsigned long timeout);
|
||||
extern unsigned long wait_for_completion_killable_timeout(
|
||||
struct completion *x, unsigned long timeout);
|
||||
extern long wait_for_completion_interruptible_timeout(
|
||||
struct completion *x, unsigned long timeout);
|
||||
extern long wait_for_completion_killable_timeout(
|
||||
struct completion *x, unsigned long timeout);
|
||||
extern bool try_wait_for_completion(struct completion *x);
|
||||
extern bool completion_done(struct completion *x);
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,14 @@ extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
|
|||
#define vmcore_elf_check_arch_cross(x) 0
|
||||
#endif
|
||||
|
||||
#define vmcore_elf_check_arch(x) (elf_check_arch(x) || vmcore_elf_check_arch_cross(x))
|
||||
/*
|
||||
* Architecture code can redefine this if there are any special checks
|
||||
* needed for 64-bit ELF vmcores. In case of 32-bit only architecture,
|
||||
* this can be set to zero.
|
||||
*/
|
||||
#ifndef vmcore_elf64_check_arch
|
||||
#define vmcore_elf64_check_arch(x) (elf_check_arch(x) || vmcore_elf_check_arch_cross(x))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* is_kdump_kernel() checks whether this kernel is booting after a panic of
|
||||
|
|
|
|||
|
|
@ -22,6 +22,89 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* IEEE 802.1Qaz std supported values */
|
||||
#define IEEE_8021QAZ_MAX_TCS 8
|
||||
|
||||
/* This structure contains the IEEE 802.1Qaz ETS managed object
|
||||
*
|
||||
* @willing: willing bit in ETS configuratin TLV
|
||||
* @ets_cap: indicates supported capacity of ets feature
|
||||
* @cbs: credit based shaper ets algorithm supported
|
||||
* @tc_tx_bw: tc tx bandwidth indexed by traffic class
|
||||
* @tc_rx_bw: tc rx bandwidth indexed by traffic class
|
||||
* @tc_tsa: TSA Assignment table, indexed by traffic class
|
||||
* @prio_tc: priority assignment table mapping 8021Qp to traffic class
|
||||
* @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV
|
||||
* @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV
|
||||
* @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV
|
||||
*
|
||||
* Recommended values are used to set fields in the ETS recommendation TLV
|
||||
* with hardware offloaded LLDP.
|
||||
*
|
||||
* ----
|
||||
* TSA Assignment 8 bit identifiers
|
||||
* 0 strict priority
|
||||
* 1 credit-based shaper
|
||||
* 2 enhanced transmission selection
|
||||
* 3-254 reserved
|
||||
* 255 vendor specific
|
||||
*/
|
||||
struct ieee_ets {
|
||||
__u8 willing;
|
||||
__u8 ets_cap;
|
||||
__u8 cbs;
|
||||
__u8 tc_tx_bw[IEEE_8021QAZ_MAX_TCS];
|
||||
__u8 tc_rx_bw[IEEE_8021QAZ_MAX_TCS];
|
||||
__u8 tc_tsa[IEEE_8021QAZ_MAX_TCS];
|
||||
__u8 prio_tc[IEEE_8021QAZ_MAX_TCS];
|
||||
__u8 tc_reco_bw[IEEE_8021QAZ_MAX_TCS];
|
||||
__u8 tc_reco_tsa[IEEE_8021QAZ_MAX_TCS];
|
||||
__u8 reco_prio_tc[IEEE_8021QAZ_MAX_TCS];
|
||||
};
|
||||
|
||||
/* This structure contains the IEEE 802.1Qaz PFC managed object
|
||||
*
|
||||
* @pfc_cap: Indicates the number of traffic classes on the local device
|
||||
* that may simultaneously have PFC enabled.
|
||||
* @pfc_en: bitmap indicating pfc enabled traffic classes
|
||||
* @mbc: enable macsec bypass capability
|
||||
* @delay: the allowance made for a round-trip propagation delay of the
|
||||
* link in bits.
|
||||
* @requests: count of the sent pfc frames
|
||||
* @indications: count of the received pfc frames
|
||||
*/
|
||||
struct ieee_pfc {
|
||||
__u8 pfc_cap;
|
||||
__u8 pfc_en;
|
||||
__u8 mbc;
|
||||
__u16 delay;
|
||||
__u64 requests[IEEE_8021QAZ_MAX_TCS];
|
||||
__u64 indications[IEEE_8021QAZ_MAX_TCS];
|
||||
};
|
||||
|
||||
/* This structure contains the IEEE 802.1Qaz APP managed object. This
|
||||
* object is also used for the CEE std as well. There is no difference
|
||||
* between the objects.
|
||||
*
|
||||
* @selector: protocol identifier type
|
||||
* @protocol: protocol of type indicated
|
||||
* @priority: 3-bit unsigned integer indicating priority
|
||||
*
|
||||
* ----
|
||||
* Selector field values
|
||||
* 0 Reserved
|
||||
* 1 Ethertype
|
||||
* 2 Well known port number over TCP or SCTP
|
||||
* 3 Well known port number over UDP or DCCP
|
||||
* 4 Well known port number over TCP, SCTP, UDP, or DCCP
|
||||
* 5-7 Reserved
|
||||
*/
|
||||
struct dcb_app {
|
||||
__u8 selector;
|
||||
__u32 protocol;
|
||||
__u8 priority;
|
||||
};
|
||||
|
||||
struct dcbmsg {
|
||||
__u8 dcb_family;
|
||||
__u8 cmd;
|
||||
|
|
@ -50,6 +133,12 @@ struct dcbmsg {
|
|||
* @DCB_CMD_SBCN: get backward congestion notification configration.
|
||||
* @DCB_CMD_GAPP: get application protocol configuration
|
||||
* @DCB_CMD_SAPP: set application protocol configuration
|
||||
* @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration
|
||||
* @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration
|
||||
* @DCB_CMD_GDCBX: get DCBX engine configuration
|
||||
* @DCB_CMD_SDCBX: set DCBX engine configuration
|
||||
* @DCB_CMD_GFEATCFG: get DCBX features flags
|
||||
* @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
|
||||
*/
|
||||
enum dcbnl_commands {
|
||||
DCB_CMD_UNDEFINED,
|
||||
|
|
@ -83,6 +172,15 @@ enum dcbnl_commands {
|
|||
DCB_CMD_GAPP,
|
||||
DCB_CMD_SAPP,
|
||||
|
||||
DCB_CMD_IEEE_SET,
|
||||
DCB_CMD_IEEE_GET,
|
||||
|
||||
DCB_CMD_GDCBX,
|
||||
DCB_CMD_SDCBX,
|
||||
|
||||
DCB_CMD_GFEATCFG,
|
||||
DCB_CMD_SFEATCFG,
|
||||
|
||||
__DCB_CMD_ENUM_MAX,
|
||||
DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
|
||||
};
|
||||
|
|
@ -102,6 +200,9 @@ enum dcbnl_commands {
|
|||
* @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED)
|
||||
* @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED)
|
||||
* @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED)
|
||||
* @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED)
|
||||
* @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8)
|
||||
* @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED)
|
||||
*/
|
||||
enum dcbnl_attrs {
|
||||
DCB_ATTR_UNDEFINED,
|
||||
|
|
@ -119,10 +220,32 @@ enum dcbnl_attrs {
|
|||
DCB_ATTR_BCN,
|
||||
DCB_ATTR_APP,
|
||||
|
||||
/* IEEE std attributes */
|
||||
DCB_ATTR_IEEE,
|
||||
|
||||
DCB_ATTR_DCBX,
|
||||
DCB_ATTR_FEATCFG,
|
||||
|
||||
__DCB_ATTR_ENUM_MAX,
|
||||
DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
|
||||
};
|
||||
|
||||
enum ieee_attrs {
|
||||
DCB_ATTR_IEEE_UNSPEC,
|
||||
DCB_ATTR_IEEE_ETS,
|
||||
DCB_ATTR_IEEE_PFC,
|
||||
DCB_ATTR_IEEE_APP_TABLE,
|
||||
__DCB_ATTR_IEEE_MAX
|
||||
};
|
||||
#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
|
||||
|
||||
enum ieee_attrs_app {
|
||||
DCB_ATTR_IEEE_APP_UNSPEC,
|
||||
DCB_ATTR_IEEE_APP,
|
||||
__DCB_ATTR_IEEE_APP_MAX
|
||||
};
|
||||
#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
|
||||
*
|
||||
|
|
@ -262,6 +385,8 @@ enum dcbnl_tc_attrs {
|
|||
* @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority
|
||||
* @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion
|
||||
* Notification
|
||||
* @DCB_CAP_ATTR_DCBX: (NLA_U8) device supports DCBX engine
|
||||
*
|
||||
*/
|
||||
enum dcbnl_cap_attrs {
|
||||
DCB_CAP_ATTR_UNDEFINED,
|
||||
|
|
@ -273,11 +398,44 @@ enum dcbnl_cap_attrs {
|
|||
DCB_CAP_ATTR_PFC_TCS,
|
||||
DCB_CAP_ATTR_GSP,
|
||||
DCB_CAP_ATTR_BCN,
|
||||
DCB_CAP_ATTR_DCBX,
|
||||
|
||||
__DCB_CAP_ATTR_ENUM_MAX,
|
||||
DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* DCBX capability flags
|
||||
*
|
||||
* @DCB_CAP_DCBX_HOST: DCBX negotiation is performed by the host LLDP agent.
|
||||
* 'set' routines are used to configure the device with
|
||||
* the negotiated parameters
|
||||
*
|
||||
* @DCB_CAP_DCBX_LLD_MANAGED: DCBX negotiation is not performed in the host but
|
||||
* by another entity
|
||||
* 'get' routines are used to retrieve the
|
||||
* negotiated parameters
|
||||
* 'set' routines can be used to set the initial
|
||||
* negotiation configuration
|
||||
*
|
||||
* @DCB_CAP_DCBX_VER_CEE: for a non-host DCBX engine, indicates the engine
|
||||
* supports the CEE protocol flavor
|
||||
*
|
||||
* @DCB_CAP_DCBX_VER_IEEE: for a non-host DCBX engine, indicates the engine
|
||||
* supports the IEEE protocol flavor
|
||||
*
|
||||
* @DCB_CAP_DCBX_STATIC: for a non-host DCBX engine, indicates the engine
|
||||
* supports static configuration (i.e no actual
|
||||
* negotiation is performed negotiated parameters equal
|
||||
* the initial configuration)
|
||||
*
|
||||
*/
|
||||
#define DCB_CAP_DCBX_HOST 0x01
|
||||
#define DCB_CAP_DCBX_LLD_MANAGED 0x02
|
||||
#define DCB_CAP_DCBX_VER_CEE 0x04
|
||||
#define DCB_CAP_DCBX_VER_IEEE 0x08
|
||||
#define DCB_CAP_DCBX_STATIC 0x10
|
||||
|
||||
/**
|
||||
* enum dcbnl_numtcs_attrs - number of traffic classes
|
||||
*
|
||||
|
|
@ -355,4 +513,30 @@ enum dcbnl_app_attrs {
|
|||
DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum dcbnl_featcfg_attrs - features conifiguration flags
|
||||
*
|
||||
* @DCB_FEATCFG_ATTR_UNDEFINED: unspecified attribute to catch errors
|
||||
* @DCB_FEATCFG_ATTR_ALL: (NLA_FLAG) all features configuration attributes
|
||||
* @DCB_FEATCFG_ATTR_PG: (NLA_U8) configuration flags for priority groups
|
||||
* @DCB_FEATCFG_ATTR_PFC: (NLA_U8) configuration flags for priority
|
||||
* flow control
|
||||
* @DCB_FEATCFG_ATTR_APP: (NLA_U8) configuration flags for application TLV
|
||||
*
|
||||
*/
|
||||
#define DCB_FEATCFG_ERROR 0x01 /* error in feature resolution */
|
||||
#define DCB_FEATCFG_ENABLE 0x02 /* enable feature */
|
||||
#define DCB_FEATCFG_WILLING 0x04 /* feature is willing */
|
||||
#define DCB_FEATCFG_ADVERTISE 0x08 /* advertise feature */
|
||||
enum dcbnl_featcfg_attrs {
|
||||
DCB_FEATCFG_ATTR_UNDEFINED,
|
||||
DCB_FEATCFG_ATTR_ALL,
|
||||
DCB_FEATCFG_ATTR_PG,
|
||||
DCB_FEATCFG_ATTR_PFC,
|
||||
DCB_FEATCFG_ATTR_APP,
|
||||
|
||||
__DCB_FEATCFG_ATTR_ENUM_MAX,
|
||||
DCB_FEATCFG_ATTR_MAX = __DCB_FEATCFG_ATTR_ENUM_MAX - 1,
|
||||
};
|
||||
|
||||
#endif /* __LINUX_DCBNL_H__ */
|
||||
|
|
|
|||
|
|
@ -197,6 +197,21 @@ enum dccp_feature_numbers {
|
|||
DCCPF_MAX_CCID_SPECIFIC = 255,
|
||||
};
|
||||
|
||||
/* DCCP socket control message types for cmsg */
|
||||
enum dccp_cmsg_type {
|
||||
DCCP_SCM_PRIORITY = 1,
|
||||
DCCP_SCM_QPOLICY_MAX = 0xFFFF,
|
||||
/* ^-- Up to here reserved exclusively for qpolicy parameters */
|
||||
DCCP_SCM_MAX
|
||||
};
|
||||
|
||||
/* DCCP priorities for outgoing/queued packets */
|
||||
enum dccp_packet_dequeueing_policy {
|
||||
DCCPQ_POLICY_SIMPLE,
|
||||
DCCPQ_POLICY_PRIO,
|
||||
DCCPQ_POLICY_MAX
|
||||
};
|
||||
|
||||
/* DCCP socket options */
|
||||
#define DCCP_SOCKOPT_PACKET_SIZE 1 /* XXX deprecated, without effect */
|
||||
#define DCCP_SOCKOPT_SERVICE 2
|
||||
|
|
@ -210,6 +225,8 @@ enum dccp_feature_numbers {
|
|||
#define DCCP_SOCKOPT_CCID 13
|
||||
#define DCCP_SOCKOPT_TX_CCID 14
|
||||
#define DCCP_SOCKOPT_RX_CCID 15
|
||||
#define DCCP_SOCKOPT_QPOLICY_ID 16
|
||||
#define DCCP_SOCKOPT_QPOLICY_TXQLEN 17
|
||||
#define DCCP_SOCKOPT_CCID_RX_INFO 128
|
||||
#define DCCP_SOCKOPT_CCID_TX_INFO 192
|
||||
|
||||
|
|
@ -458,10 +475,13 @@ struct dccp_ackvec;
|
|||
* @dccps_hc_rx_ccid - CCID used for the receiver (or receiving half-connection)
|
||||
* @dccps_hc_tx_ccid - CCID used for the sender (or sending half-connection)
|
||||
* @dccps_options_received - parsed set of retrieved options
|
||||
* @dccps_qpolicy - TX dequeueing policy, one of %dccp_packet_dequeueing_policy
|
||||
* @dccps_tx_qlen - maximum length of the TX queue
|
||||
* @dccps_role - role of this sock, one of %dccp_role
|
||||
* @dccps_hc_rx_insert_options - receiver wants to add options when acking
|
||||
* @dccps_hc_tx_insert_options - sender wants to add options when sending
|
||||
* @dccps_server_timewait - server holds timewait state on close (RFC 4340, 8.3)
|
||||
* @dccps_sync_scheduled - flag which signals "send out-of-band message soon"
|
||||
* @dccps_xmitlet - tasklet scheduled by the TX CCID to dequeue data packets
|
||||
* @dccps_xmit_timer - used by the TX CCID to delay sending (rate-based pacing)
|
||||
* @dccps_syn_rtt - RTT sample from Request/Response exchange (in usecs)
|
||||
|
|
@ -499,10 +519,13 @@ struct dccp_sock {
|
|||
struct ccid *dccps_hc_rx_ccid;
|
||||
struct ccid *dccps_hc_tx_ccid;
|
||||
struct dccp_options_received dccps_options_received;
|
||||
__u8 dccps_qpolicy;
|
||||
__u32 dccps_tx_qlen;
|
||||
enum dccp_role dccps_role:2;
|
||||
__u8 dccps_hc_rx_insert_options:1;
|
||||
__u8 dccps_hc_tx_insert_options:1;
|
||||
__u8 dccps_server_timewait:1;
|
||||
__u8 dccps_sync_scheduled:1;
|
||||
struct tasklet_struct dccps_xmitlet;
|
||||
struct timer_list dccps_xmit_timer;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -824,6 +824,8 @@ enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie);
|
|||
#ifdef CONFIG_DMA_ENGINE
|
||||
enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
|
||||
void dma_issue_pending_all(void);
|
||||
struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, void *fn_param);
|
||||
void dma_release_channel(struct dma_chan *chan);
|
||||
#else
|
||||
static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
|
|
@ -831,7 +833,14 @@ static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descript
|
|||
}
|
||||
static inline void dma_issue_pending_all(void)
|
||||
{
|
||||
do { } while (0);
|
||||
}
|
||||
static inline struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask,
|
||||
dma_filter_fn fn, void *fn_param)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline void dma_release_channel(struct dma_chan *chan)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -842,8 +851,6 @@ void dma_async_device_unregister(struct dma_device *device);
|
|||
void dma_run_dependencies(struct dma_async_tx_descriptor *tx);
|
||||
struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
|
||||
#define dma_request_channel(mask, x, y) __dma_request_channel(&(mask), x, y)
|
||||
struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, void *fn_param);
|
||||
void dma_release_channel(struct dma_chan *chan);
|
||||
|
||||
/* --- Helper iov-locking functions --- */
|
||||
|
||||
|
|
|
|||
|
|
@ -691,7 +691,9 @@ struct ethtool_ops {
|
|||
#define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */
|
||||
#define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */
|
||||
#define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */
|
||||
#define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */
|
||||
/* Get link status for host, i.e. whether the interface *and* the
|
||||
* physical port (if there is one) are up (ethtool_value). */
|
||||
#define ETHTOOL_GLINK 0x0000000a
|
||||
#define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */
|
||||
#define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */
|
||||
#define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */
|
||||
|
|
|
|||
|
|
@ -83,11 +83,13 @@
|
|||
FAN_ALL_PERM_EVENTS |\
|
||||
FAN_Q_OVERFLOW)
|
||||
|
||||
#define FANOTIFY_METADATA_VERSION 2
|
||||
#define FANOTIFY_METADATA_VERSION 3
|
||||
|
||||
struct fanotify_event_metadata {
|
||||
__u32 event_len;
|
||||
__u32 vers;
|
||||
__u8 vers;
|
||||
__u8 reserved;
|
||||
__u16 metadata_len;
|
||||
__aligned_u64 mask;
|
||||
__s32 fd;
|
||||
__s32 pid;
|
||||
|
|
@ -96,11 +98,13 @@ struct fanotify_event_metadata {
|
|||
struct fanotify_response {
|
||||
__s32 fd;
|
||||
__u32 response;
|
||||
} __attribute__ ((packed));
|
||||
};
|
||||
|
||||
/* Legit userspace responses to a _PERM event */
|
||||
#define FAN_ALLOW 0x01
|
||||
#define FAN_DENY 0x02
|
||||
/* No fd set in event */
|
||||
#define FAN_NOFD -1
|
||||
|
||||
/* Helper functions to deal with fanotify_event_metadata buffers */
|
||||
#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata))
|
||||
|
|
|
|||
|
|
@ -1092,6 +1092,8 @@ extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var);
|
|||
extern const unsigned char *fb_firmware_edid(struct device *device);
|
||||
extern void fb_edid_to_monspecs(unsigned char *edid,
|
||||
struct fb_monspecs *specs);
|
||||
extern void fb_edid_add_monspecs(unsigned char *edid,
|
||||
struct fb_monspecs *specs);
|
||||
extern void fb_destroy_modedb(struct fb_videomode *modedb);
|
||||
extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb);
|
||||
extern unsigned char *fb_ddc_read(struct i2c_adapter *adapter);
|
||||
|
|
@ -1150,6 +1152,7 @@ struct fb_videomode {
|
|||
|
||||
extern const char *fb_mode_option;
|
||||
extern const struct fb_videomode vesa_modes[];
|
||||
extern const struct fb_videomode cea_modes[64];
|
||||
|
||||
struct fb_modelist {
|
||||
struct list_head list;
|
||||
|
|
|
|||
|
|
@ -91,54 +91,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
|
|||
#define BPF_TAX 0x00
|
||||
#define BPF_TXA 0x80
|
||||
|
||||
enum {
|
||||
BPF_S_RET_K = 0,
|
||||
BPF_S_RET_A,
|
||||
BPF_S_ALU_ADD_K,
|
||||
BPF_S_ALU_ADD_X,
|
||||
BPF_S_ALU_SUB_K,
|
||||
BPF_S_ALU_SUB_X,
|
||||
BPF_S_ALU_MUL_K,
|
||||
BPF_S_ALU_MUL_X,
|
||||
BPF_S_ALU_DIV_X,
|
||||
BPF_S_ALU_AND_K,
|
||||
BPF_S_ALU_AND_X,
|
||||
BPF_S_ALU_OR_K,
|
||||
BPF_S_ALU_OR_X,
|
||||
BPF_S_ALU_LSH_K,
|
||||
BPF_S_ALU_LSH_X,
|
||||
BPF_S_ALU_RSH_K,
|
||||
BPF_S_ALU_RSH_X,
|
||||
BPF_S_ALU_NEG,
|
||||
BPF_S_LD_W_ABS,
|
||||
BPF_S_LD_H_ABS,
|
||||
BPF_S_LD_B_ABS,
|
||||
BPF_S_LD_W_LEN,
|
||||
BPF_S_LD_W_IND,
|
||||
BPF_S_LD_H_IND,
|
||||
BPF_S_LD_B_IND,
|
||||
BPF_S_LD_IMM,
|
||||
BPF_S_LDX_W_LEN,
|
||||
BPF_S_LDX_B_MSH,
|
||||
BPF_S_LDX_IMM,
|
||||
BPF_S_MISC_TAX,
|
||||
BPF_S_MISC_TXA,
|
||||
BPF_S_ALU_DIV_K,
|
||||
BPF_S_LD_MEM,
|
||||
BPF_S_LDX_MEM,
|
||||
BPF_S_ST,
|
||||
BPF_S_STX,
|
||||
BPF_S_JMP_JA,
|
||||
BPF_S_JMP_JEQ_K,
|
||||
BPF_S_JMP_JEQ_X,
|
||||
BPF_S_JMP_JGE_K,
|
||||
BPF_S_JMP_JGE_X,
|
||||
BPF_S_JMP_JGT_K,
|
||||
BPF_S_JMP_JGT_X,
|
||||
BPF_S_JMP_JSET_K,
|
||||
BPF_S_JMP_JSET_X,
|
||||
};
|
||||
|
||||
#ifndef BPF_MAXINSNS
|
||||
#define BPF_MAXINSNS 4096
|
||||
#endif
|
||||
|
|
@ -172,7 +124,9 @@ enum {
|
|||
#define SKF_AD_MARK 20
|
||||
#define SKF_AD_QUEUE 24
|
||||
#define SKF_AD_HATYPE 28
|
||||
#define SKF_AD_MAX 32
|
||||
#define SKF_AD_RXHASH 32
|
||||
#define SKF_AD_CPU 36
|
||||
#define SKF_AD_MAX 40
|
||||
#define SKF_NET_OFF (-0x100000)
|
||||
#define SKF_LL_OFF (-0x200000)
|
||||
|
||||
|
|
@ -194,8 +148,8 @@ struct sk_buff;
|
|||
struct sock;
|
||||
|
||||
extern int sk_filter(struct sock *sk, struct sk_buff *skb);
|
||||
extern unsigned int sk_run_filter(struct sk_buff *skb,
|
||||
struct sock_filter *filter, int flen);
|
||||
extern unsigned int sk_run_filter(const struct sk_buff *skb,
|
||||
const struct sock_filter *filter);
|
||||
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
|
||||
extern int sk_detach_filter(struct sock *sk);
|
||||
extern int sk_chk_filter(struct sock_filter *filter, int flen);
|
||||
|
|
|
|||
|
|
@ -235,9 +235,6 @@ static inline void fsnotify_open(struct file *file)
|
|||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= FS_ISDIR;
|
||||
|
||||
/* FMODE_NONOTIFY must never be set from user */
|
||||
file->f_mode &= ~FMODE_NONOTIFY;
|
||||
|
||||
fsnotify_parent(path, NULL, mask);
|
||||
fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ struct fsnotify_group {
|
|||
struct mutex access_mutex;
|
||||
struct list_head access_list;
|
||||
wait_queue_head_t access_waitq;
|
||||
bool bypass_perm; /* protected by access_mutex */
|
||||
atomic_t bypass_perm;
|
||||
#endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */
|
||||
int f_flags;
|
||||
unsigned int max_marks;
|
||||
|
|
|
|||
|
|
@ -154,12 +154,14 @@ enum {
|
|||
TRACE_EVENT_FL_ENABLED_BIT,
|
||||
TRACE_EVENT_FL_FILTERED_BIT,
|
||||
TRACE_EVENT_FL_RECORDED_CMD_BIT,
|
||||
TRACE_EVENT_FL_CAP_ANY_BIT,
|
||||
};
|
||||
|
||||
enum {
|
||||
TRACE_EVENT_FL_ENABLED = (1 << TRACE_EVENT_FL_ENABLED_BIT),
|
||||
TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT),
|
||||
TRACE_EVENT_FL_RECORDED_CMD = (1 << TRACE_EVENT_FL_RECORDED_CMD_BIT),
|
||||
TRACE_EVENT_FL_CAP_ANY = (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
|
||||
};
|
||||
|
||||
struct ftrace_event_call {
|
||||
|
|
@ -196,6 +198,14 @@ struct ftrace_event_call {
|
|||
#endif
|
||||
};
|
||||
|
||||
#define __TRACE_EVENT_FLAGS(name, value) \
|
||||
static int __init trace_init_flags_##name(void) \
|
||||
{ \
|
||||
event_##name.flags = value; \
|
||||
return 0; \
|
||||
} \
|
||||
early_initcall(trace_init_flags_##name);
|
||||
|
||||
#define PERF_MAX_TRACE_SIZE 2048
|
||||
|
||||
#define MAX_FILTER_PRED 32
|
||||
|
|
@ -215,6 +225,10 @@ enum {
|
|||
FILTER_PTR_STRING,
|
||||
};
|
||||
|
||||
#define EVENT_STORAGE_SIZE 128
|
||||
extern struct mutex event_storage_mutex;
|
||||
extern char event_storage[EVENT_STORAGE_SIZE];
|
||||
|
||||
extern int trace_event_raw_init(struct ftrace_event_call *call);
|
||||
extern int trace_define_field(struct ftrace_event_call *call, const char *type,
|
||||
const char *name, int offset, int size,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
#include <linux/wait.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/timer.h>
|
||||
|
||||
#include <linux/timerqueue.h>
|
||||
|
||||
struct hrtimer_clock_base;
|
||||
struct hrtimer_cpu_base;
|
||||
|
|
@ -79,8 +79,8 @@ enum hrtimer_restart {
|
|||
|
||||
/**
|
||||
* struct hrtimer - the basic hrtimer structure
|
||||
* @node: red black tree node for time ordered insertion
|
||||
* @_expires: the absolute expiry time in the hrtimers internal
|
||||
* @node: timerqueue node, which also manages node.expires,
|
||||
* the absolute expiry time in the hrtimers internal
|
||||
* representation. The time is related to the clock on
|
||||
* which the timer is based. Is setup by adding
|
||||
* slack to the _softexpires value. For non range timers
|
||||
|
|
@ -101,8 +101,7 @@ enum hrtimer_restart {
|
|||
* The hrtimer structure must be initialized by hrtimer_init()
|
||||
*/
|
||||
struct hrtimer {
|
||||
struct rb_node node;
|
||||
ktime_t _expires;
|
||||
struct timerqueue_node node;
|
||||
ktime_t _softexpires;
|
||||
enum hrtimer_restart (*function)(struct hrtimer *);
|
||||
struct hrtimer_clock_base *base;
|
||||
|
|
@ -141,8 +140,7 @@ struct hrtimer_sleeper {
|
|||
struct hrtimer_clock_base {
|
||||
struct hrtimer_cpu_base *cpu_base;
|
||||
clockid_t index;
|
||||
struct rb_root active;
|
||||
struct rb_node *first;
|
||||
struct timerqueue_head active;
|
||||
ktime_t resolution;
|
||||
ktime_t (*get_time)(void);
|
||||
ktime_t softirq_time;
|
||||
|
|
@ -158,7 +156,6 @@ struct hrtimer_clock_base {
|
|||
* @lock: lock protecting the base and associated clock bases
|
||||
* and timers
|
||||
* @clock_base: array of clock bases for this cpu
|
||||
* @curr_timer: the timer which is executing a callback right now
|
||||
* @expires_next: absolute time of the next event which was scheduled
|
||||
* via clock_set_next_event()
|
||||
* @hres_active: State of high resolution mode
|
||||
|
|
@ -184,43 +181,43 @@ struct hrtimer_cpu_base {
|
|||
|
||||
static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time)
|
||||
{
|
||||
timer->_expires = time;
|
||||
timer->node.expires = time;
|
||||
timer->_softexpires = time;
|
||||
}
|
||||
|
||||
static inline void hrtimer_set_expires_range(struct hrtimer *timer, ktime_t time, ktime_t delta)
|
||||
{
|
||||
timer->_softexpires = time;
|
||||
timer->_expires = ktime_add_safe(time, delta);
|
||||
timer->node.expires = ktime_add_safe(time, delta);
|
||||
}
|
||||
|
||||
static inline void hrtimer_set_expires_range_ns(struct hrtimer *timer, ktime_t time, unsigned long delta)
|
||||
{
|
||||
timer->_softexpires = time;
|
||||
timer->_expires = ktime_add_safe(time, ns_to_ktime(delta));
|
||||
timer->node.expires = ktime_add_safe(time, ns_to_ktime(delta));
|
||||
}
|
||||
|
||||
static inline void hrtimer_set_expires_tv64(struct hrtimer *timer, s64 tv64)
|
||||
{
|
||||
timer->_expires.tv64 = tv64;
|
||||
timer->node.expires.tv64 = tv64;
|
||||
timer->_softexpires.tv64 = tv64;
|
||||
}
|
||||
|
||||
static inline void hrtimer_add_expires(struct hrtimer *timer, ktime_t time)
|
||||
{
|
||||
timer->_expires = ktime_add_safe(timer->_expires, time);
|
||||
timer->node.expires = ktime_add_safe(timer->node.expires, time);
|
||||
timer->_softexpires = ktime_add_safe(timer->_softexpires, time);
|
||||
}
|
||||
|
||||
static inline void hrtimer_add_expires_ns(struct hrtimer *timer, u64 ns)
|
||||
{
|
||||
timer->_expires = ktime_add_ns(timer->_expires, ns);
|
||||
timer->node.expires = ktime_add_ns(timer->node.expires, ns);
|
||||
timer->_softexpires = ktime_add_ns(timer->_softexpires, ns);
|
||||
}
|
||||
|
||||
static inline ktime_t hrtimer_get_expires(const struct hrtimer *timer)
|
||||
{
|
||||
return timer->_expires;
|
||||
return timer->node.expires;
|
||||
}
|
||||
|
||||
static inline ktime_t hrtimer_get_softexpires(const struct hrtimer *timer)
|
||||
|
|
@ -230,7 +227,7 @@ static inline ktime_t hrtimer_get_softexpires(const struct hrtimer *timer)
|
|||
|
||||
static inline s64 hrtimer_get_expires_tv64(const struct hrtimer *timer)
|
||||
{
|
||||
return timer->_expires.tv64;
|
||||
return timer->node.expires.tv64;
|
||||
}
|
||||
static inline s64 hrtimer_get_softexpires_tv64(const struct hrtimer *timer)
|
||||
{
|
||||
|
|
@ -239,12 +236,12 @@ static inline s64 hrtimer_get_softexpires_tv64(const struct hrtimer *timer)
|
|||
|
||||
static inline s64 hrtimer_get_expires_ns(const struct hrtimer *timer)
|
||||
{
|
||||
return ktime_to_ns(timer->_expires);
|
||||
return ktime_to_ns(timer->node.expires);
|
||||
}
|
||||
|
||||
static inline ktime_t hrtimer_expires_remaining(const struct hrtimer *timer)
|
||||
{
|
||||
return ktime_sub(timer->_expires, timer->base->get_time());
|
||||
return ktime_sub(timer->node.expires, timer->base->get_time());
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@
|
|||
|
||||
/* U-APSD queue for WMM IEs sent by AP */
|
||||
#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7)
|
||||
#define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f
|
||||
|
||||
/* U-APSD queues for WMM IEs sent by STA */
|
||||
#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO (1<<0)
|
||||
|
|
@ -535,7 +536,6 @@ struct ieee80211s_hdr {
|
|||
__le32 seqnum;
|
||||
u8 eaddr1[6];
|
||||
u8 eaddr2[6];
|
||||
u8 eaddr3[6];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* Mesh flags */
|
||||
|
|
@ -1223,6 +1223,9 @@ enum ieee80211_eid {
|
|||
WLAN_EID_BSS_AC_ACCESS_DELAY = 68,
|
||||
WLAN_EID_RRM_ENABLED_CAPABILITIES = 70,
|
||||
WLAN_EID_MULTIPLE_BSSID = 71,
|
||||
WLAN_EID_BSS_COEX_2040 = 72,
|
||||
WLAN_EID_OVERLAP_BSS_SCAN_PARAM = 74,
|
||||
WLAN_EID_EXT_CAPABILITY = 127,
|
||||
|
||||
WLAN_EID_MOBILITY_DOMAIN = 54,
|
||||
WLAN_EID_FAST_BSS_TRANSITION = 55,
|
||||
|
|
@ -1287,6 +1290,31 @@ enum ieee80211_key_len {
|
|||
WLAN_KEY_LEN_AES_CMAC = 16,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum - mesh path selection protocol identifier
|
||||
*
|
||||
* @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol
|
||||
* @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will
|
||||
* be specified in a vendor specific information element
|
||||
*/
|
||||
enum {
|
||||
IEEE80211_PATH_PROTOCOL_HWMP = 0,
|
||||
IEEE80211_PATH_PROTOCOL_VENDOR = 255,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum - mesh path selection metric identifier
|
||||
*
|
||||
* @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric
|
||||
* @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be
|
||||
* specified in a vendor specific information element
|
||||
*/
|
||||
enum {
|
||||
IEEE80211_PATH_METRIC_AIRTIME = 0,
|
||||
IEEE80211_PATH_METRIC_VENDOR = 255,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* IEEE 802.11-2007 7.3.2.9 Country information element
|
||||
*
|
||||
|
|
|
|||
|
|
@ -102,7 +102,9 @@ struct __fdb_entry {
|
|||
#include <linux/netdevice.h>
|
||||
|
||||
extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
|
||||
extern int (*br_should_route_hook)(struct sk_buff *skb);
|
||||
|
||||
typedef int (*br_should_route_hook_t)(struct sk_buff *skb);
|
||||
extern br_should_route_hook_t __rcu *br_should_route_hook;
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
#define ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */
|
||||
#define ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */
|
||||
#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */
|
||||
#define ETH_P_LINK_CTL 0x886c /* HPNA, wlan link local tunnel */
|
||||
#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport
|
||||
* over Ethernet
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -80,6 +80,24 @@ struct rtnl_link_ifmap {
|
|||
__u8 port;
|
||||
};
|
||||
|
||||
/*
|
||||
* IFLA_AF_SPEC
|
||||
* Contains nested attributes for address family specific attributes.
|
||||
* Each address family may create a attribute with the address family
|
||||
* number as type and create its own attribute structure in it.
|
||||
*
|
||||
* Example:
|
||||
* [IFLA_AF_SPEC] = {
|
||||
* [AF_INET] = {
|
||||
* [IFLA_INET_CONF] = ...,
|
||||
* },
|
||||
* [AF_INET6] = {
|
||||
* [IFLA_INET6_FLAGS] = ...,
|
||||
* [IFLA_INET6_CONF] = ...,
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
|
||||
enum {
|
||||
IFLA_UNSPEC,
|
||||
IFLA_ADDRESS,
|
||||
|
|
@ -116,6 +134,7 @@ enum {
|
|||
IFLA_STATS64,
|
||||
IFLA_VF_PORTS,
|
||||
IFLA_PORT_SELF,
|
||||
IFLA_AF_SPEC,
|
||||
__IFLA_MAX
|
||||
};
|
||||
|
||||
|
|
@ -128,6 +147,14 @@ enum {
|
|||
#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
|
||||
#endif
|
||||
|
||||
enum {
|
||||
IFLA_INET_UNSPEC,
|
||||
IFLA_INET_CONF,
|
||||
__IFLA_INET_MAX,
|
||||
};
|
||||
|
||||
#define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
|
||||
|
||||
/* ifi_flags.
|
||||
|
||||
IFF_* flags.
|
||||
|
|
@ -232,6 +259,7 @@ enum macvlan_mode {
|
|||
MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
|
||||
MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */
|
||||
MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */
|
||||
MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
|
||||
};
|
||||
|
||||
/* SR-IOV virtual function management section */
|
||||
|
|
|
|||
|
|
@ -25,19 +25,25 @@ struct macvlan_port;
|
|||
struct macvtap_queue;
|
||||
|
||||
/**
|
||||
* struct macvlan_rx_stats - MACVLAN percpu rx stats
|
||||
* struct macvlan_pcpu_stats - MACVLAN percpu stats
|
||||
* @rx_packets: number of received packets
|
||||
* @rx_bytes: number of received bytes
|
||||
* @rx_multicast: number of received multicast packets
|
||||
* @tx_packets: number of transmitted packets
|
||||
* @tx_bytes: number of transmitted bytes
|
||||
* @syncp: synchronization point for 64bit counters
|
||||
* @rx_errors: number of errors
|
||||
* @rx_errors: number of rx errors
|
||||
* @tx_dropped: number of tx dropped packets
|
||||
*/
|
||||
struct macvlan_rx_stats {
|
||||
struct macvlan_pcpu_stats {
|
||||
u64 rx_packets;
|
||||
u64 rx_bytes;
|
||||
u64 rx_multicast;
|
||||
u64 tx_packets;
|
||||
u64 tx_bytes;
|
||||
struct u64_stats_sync syncp;
|
||||
unsigned long rx_errors;
|
||||
u32 rx_errors;
|
||||
u32 tx_dropped;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -52,7 +58,7 @@ struct macvlan_dev {
|
|||
struct hlist_node hlist;
|
||||
struct macvlan_port *port;
|
||||
struct net_device *lowerdev;
|
||||
struct macvlan_rx_stats __percpu *rx_stats;
|
||||
struct macvlan_pcpu_stats __percpu *pcpu_stats;
|
||||
enum macvlan_mode mode;
|
||||
int (*receive)(struct sk_buff *skb);
|
||||
int (*forward)(struct net_device *dev, struct sk_buff *skb);
|
||||
|
|
@ -64,18 +70,18 @@ static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
|
|||
unsigned int len, bool success,
|
||||
bool multicast)
|
||||
{
|
||||
struct macvlan_rx_stats *rx_stats;
|
||||
|
||||
rx_stats = this_cpu_ptr(vlan->rx_stats);
|
||||
if (likely(success)) {
|
||||
u64_stats_update_begin(&rx_stats->syncp);
|
||||
rx_stats->rx_packets++;;
|
||||
rx_stats->rx_bytes += len;
|
||||
struct macvlan_pcpu_stats *pcpu_stats;
|
||||
|
||||
pcpu_stats = this_cpu_ptr(vlan->pcpu_stats);
|
||||
u64_stats_update_begin(&pcpu_stats->syncp);
|
||||
pcpu_stats->rx_packets++;
|
||||
pcpu_stats->rx_bytes += len;
|
||||
if (multicast)
|
||||
rx_stats->rx_multicast++;
|
||||
u64_stats_update_end(&rx_stats->syncp);
|
||||
pcpu_stats->rx_multicast++;
|
||||
u64_stats_update_end(&pcpu_stats->syncp);
|
||||
} else {
|
||||
rx_stats->rx_errors++;
|
||||
this_cpu_inc(vlan->pcpu_stats->rx_errors);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,9 +85,9 @@ struct igmpv3_query {
|
|||
#define IGMP_DVMRP 0x13 /* DVMRP routing */
|
||||
#define IGMP_PIM 0x14 /* PIM routing */
|
||||
#define IGMP_TRACE 0x15
|
||||
#define IGMPV2_HOST_MEMBERSHIP_REPORT 0x16 /* V2 version of 0x11 */
|
||||
#define IGMPV2_HOST_MEMBERSHIP_REPORT 0x16 /* V2 version of 0x12 */
|
||||
#define IGMP_HOST_LEAVE_MESSAGE 0x17
|
||||
#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x11 */
|
||||
#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x12 */
|
||||
|
||||
#define IGMP_MTRACE_RESP 0x1e
|
||||
#define IGMP_MTRACE 0x1f
|
||||
|
|
@ -167,10 +167,10 @@ struct ip_sf_socklist {
|
|||
*/
|
||||
|
||||
struct ip_mc_socklist {
|
||||
struct ip_mc_socklist *next;
|
||||
struct ip_mc_socklist __rcu *next_rcu;
|
||||
struct ip_mreqn multi;
|
||||
unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
|
||||
struct ip_sf_socklist *sflist;
|
||||
struct ip_sf_socklist __rcu *sflist;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
|
|
@ -186,11 +186,14 @@ struct ip_sf_list {
|
|||
struct ip_mc_list {
|
||||
struct in_device *interface;
|
||||
__be32 multiaddr;
|
||||
unsigned int sfmode;
|
||||
struct ip_sf_list *sources;
|
||||
struct ip_sf_list *tomb;
|
||||
unsigned int sfmode;
|
||||
unsigned long sfcount[2];
|
||||
struct ip_mc_list *next;
|
||||
union {
|
||||
struct ip_mc_list *next;
|
||||
struct ip_mc_list __rcu *next_rcu;
|
||||
};
|
||||
struct timer_list timer;
|
||||
int users;
|
||||
atomic_t refcnt;
|
||||
|
|
@ -201,6 +204,7 @@ struct ip_mc_list {
|
|||
char loaded;
|
||||
unsigned char gsquery; /* check source marks? */
|
||||
unsigned char crcount;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
/* V3 exponential field decoding */
|
||||
|
|
@ -234,7 +238,7 @@ extern void ip_mc_unmap(struct in_device *);
|
|||
extern void ip_mc_remap(struct in_device *);
|
||||
extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr);
|
||||
extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr);
|
||||
extern void ip_mc_rejoin_group(struct ip_mc_list *im);
|
||||
extern void ip_mc_rejoin_groups(struct in_device *in_dev);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -41,10 +41,12 @@ enum
|
|||
__IPV4_DEVCONF_MAX
|
||||
};
|
||||
|
||||
#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
|
||||
|
||||
struct ipv4_devconf {
|
||||
void *sysctl;
|
||||
int data[__IPV4_DEVCONF_MAX - 1];
|
||||
DECLARE_BITMAP(state, __IPV4_DEVCONF_MAX - 1);
|
||||
int data[IPV4_DEVCONF_MAX];
|
||||
DECLARE_BITMAP(state, IPV4_DEVCONF_MAX);
|
||||
};
|
||||
|
||||
struct in_device {
|
||||
|
|
@ -52,9 +54,8 @@ struct in_device {
|
|||
atomic_t refcnt;
|
||||
int dead;
|
||||
struct in_ifaddr *ifa_list; /* IP ifaddr chain */
|
||||
rwlock_t mc_list_lock;
|
||||
struct ip_mc_list *mc_list; /* IP multicast filter chain */
|
||||
int mc_count; /* Number of installed mcasts */
|
||||
struct ip_mc_list __rcu *mc_list; /* IP multicast filter chain */
|
||||
int mc_count; /* Number of installed mcasts */
|
||||
spinlock_t mc_tomb_lock;
|
||||
struct ip_mc_list *mc_tomb;
|
||||
unsigned long mr_v1_seen;
|
||||
|
|
@ -91,7 +92,7 @@ static inline void ipv4_devconf_set(struct in_device *in_dev, int index,
|
|||
|
||||
static inline void ipv4_devconf_setall(struct in_device *in_dev)
|
||||
{
|
||||
bitmap_fill(in_dev->cnf.state, __IPV4_DEVCONF_MAX - 1);
|
||||
bitmap_fill(in_dev->cnf.state, IPV4_DEVCONF_MAX);
|
||||
}
|
||||
|
||||
#define IN_DEV_CONF_GET(in_dev, attr) \
|
||||
|
|
@ -221,7 +222,7 @@ static inline struct in_device *in_dev_get(const struct net_device *dev)
|
|||
|
||||
static inline struct in_device *__in_dev_get_rtnl(const struct net_device *dev)
|
||||
{
|
||||
return rcu_dereference_check(dev->ip_ptr, lockdep_rtnl_is_held());
|
||||
return rtnl_dereference(dev->ip_ptr);
|
||||
}
|
||||
|
||||
extern void in_dev_finish_destroy(struct in_device *idev);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,13 @@
|
|||
#include <linux/securebits.h>
|
||||
#include <net/net_namespace.h>
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
# define INIT_PUSHABLE_TASKS(tsk) \
|
||||
.pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO),
|
||||
#else
|
||||
# define INIT_PUSHABLE_TASKS(tsk)
|
||||
#endif
|
||||
|
||||
extern struct files_struct init_files;
|
||||
extern struct fs_struct init_fs;
|
||||
|
||||
|
|
@ -83,6 +90,12 @@ extern struct group_info init_groups;
|
|||
*/
|
||||
# define CAP_INIT_BSET CAP_FULL_SET
|
||||
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
#define INIT_TASK_RCU_BOOST() \
|
||||
.rcu_boost_mutex = NULL,
|
||||
#else
|
||||
#define INIT_TASK_RCU_BOOST()
|
||||
#endif
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
#define INIT_TASK_RCU_TREE_PREEMPT() \
|
||||
.rcu_blocked_node = NULL,
|
||||
|
|
@ -94,7 +107,8 @@ extern struct group_info init_groups;
|
|||
.rcu_read_lock_nesting = 0, \
|
||||
.rcu_read_unlock_special = 0, \
|
||||
.rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), \
|
||||
INIT_TASK_RCU_TREE_PREEMPT()
|
||||
INIT_TASK_RCU_TREE_PREEMPT() \
|
||||
INIT_TASK_RCU_BOOST()
|
||||
#else
|
||||
#define INIT_TASK_RCU_PREEMPT(tsk)
|
||||
#endif
|
||||
|
|
@ -137,7 +151,7 @@ extern struct cred init_cred;
|
|||
.nr_cpus_allowed = NR_CPUS, \
|
||||
}, \
|
||||
.tasks = LIST_HEAD_INIT(tsk.tasks), \
|
||||
.pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO), \
|
||||
INIT_PUSHABLE_TASKS(tsk) \
|
||||
.ptraced = LIST_HEAD_INIT(tsk.ptraced), \
|
||||
.ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \
|
||||
.real_parent = &tsk, \
|
||||
|
|
|
|||
|
|
@ -114,15 +114,15 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
|
|||
struct irqaction {
|
||||
irq_handler_t handler;
|
||||
unsigned long flags;
|
||||
const char *name;
|
||||
void *dev_id;
|
||||
struct irqaction *next;
|
||||
int irq;
|
||||
struct proc_dir_entry *dir;
|
||||
irq_handler_t thread_fn;
|
||||
struct task_struct *thread;
|
||||
unsigned long thread_flags;
|
||||
};
|
||||
const char *name;
|
||||
struct proc_dir_entry *dir;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
extern irqreturn_t no_action(int cpl, void *dev_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,6 @@ struct resource_list {
|
|||
/* PC/ISA/whatever - the normal PC address spaces: IO and memory */
|
||||
extern struct resource ioport_resource;
|
||||
extern struct resource iomem_resource;
|
||||
extern int resource_alloc_from_bottom;
|
||||
|
||||
extern struct resource *request_resource_conflict(struct resource *root, struct resource *new);
|
||||
extern int request_resource(struct resource *root, struct resource *new);
|
||||
|
|
@ -124,6 +123,7 @@ extern void reserve_region_with_split(struct resource *root,
|
|||
extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new);
|
||||
extern int insert_resource(struct resource *parent, struct resource *new);
|
||||
extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
|
||||
extern void arch_remove_reservations(struct resource *avail);
|
||||
extern int allocate_resource(struct resource *root, struct resource *new,
|
||||
resource_size_t size, resource_size_t min,
|
||||
resource_size_t max, resource_size_t align,
|
||||
|
|
|
|||
|
|
@ -364,7 +364,7 @@ struct ipv6_pinfo {
|
|||
|
||||
__u32 dst_cookie;
|
||||
|
||||
struct ipv6_mc_socklist *ipv6_mc_list;
|
||||
struct ipv6_mc_socklist __rcu *ipv6_mc_list;
|
||||
struct ipv6_ac_socklist *ipv6_ac_list;
|
||||
struct ipv6_fl_socklist *ipv6_fl_list;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,129 +3,156 @@
|
|||
|
||||
/* jhash.h: Jenkins hash support.
|
||||
*
|
||||
* Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)
|
||||
* Copyright (C) 2006. Bob Jenkins (bob_jenkins@burtleburtle.net)
|
||||
*
|
||||
* http://burtleburtle.net/bob/hash/
|
||||
*
|
||||
* These are the credits from Bob's sources:
|
||||
*
|
||||
* lookup2.c, by Bob Jenkins, December 1996, Public Domain.
|
||||
* hash(), hash2(), hash3, and mix() are externally useful functions.
|
||||
* Routines to test the hash are included if SELF_TEST is defined.
|
||||
* You can use this free for any purpose. It has no warranty.
|
||||
* lookup3.c, by Bob Jenkins, May 2006, Public Domain.
|
||||
*
|
||||
* Copyright (C) 2003 David S. Miller (davem@redhat.com)
|
||||
* These are functions for producing 32-bit hashes for hash table lookup.
|
||||
* hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final()
|
||||
* are externally useful functions. Routines to test the hash are included
|
||||
* if SELF_TEST is defined. You can use this free for any purpose. It's in
|
||||
* the public domain. It has no warranty.
|
||||
*
|
||||
* Copyright (C) 2009-2010 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
|
||||
*
|
||||
* I've modified Bob's hash to be useful in the Linux kernel, and
|
||||
* any bugs present are surely my fault. -DaveM
|
||||
* any bugs present are my fault.
|
||||
* Jozsef
|
||||
*/
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/unaligned/packed_struct.h>
|
||||
|
||||
/* NOTE: Arguments are modified. */
|
||||
#define __jhash_mix(a, b, c) \
|
||||
{ \
|
||||
a -= b; a -= c; a ^= (c>>13); \
|
||||
b -= c; b -= a; b ^= (a<<8); \
|
||||
c -= a; c -= b; c ^= (b>>13); \
|
||||
a -= b; a -= c; a ^= (c>>12); \
|
||||
b -= c; b -= a; b ^= (a<<16); \
|
||||
c -= a; c -= b; c ^= (b>>5); \
|
||||
a -= b; a -= c; a ^= (c>>3); \
|
||||
b -= c; b -= a; b ^= (a<<10); \
|
||||
c -= a; c -= b; c ^= (b>>15); \
|
||||
/* Best hash sizes are of power of two */
|
||||
#define jhash_size(n) ((u32)1<<(n))
|
||||
/* Mask the hash value, i.e (value & jhash_mask(n)) instead of (value % n) */
|
||||
#define jhash_mask(n) (jhash_size(n)-1)
|
||||
|
||||
/* __jhash_mix -- mix 3 32-bit values reversibly. */
|
||||
#define __jhash_mix(a, b, c) \
|
||||
{ \
|
||||
a -= c; a ^= rol32(c, 4); c += b; \
|
||||
b -= a; b ^= rol32(a, 6); a += c; \
|
||||
c -= b; c ^= rol32(b, 8); b += a; \
|
||||
a -= c; a ^= rol32(c, 16); c += b; \
|
||||
b -= a; b ^= rol32(a, 19); a += c; \
|
||||
c -= b; c ^= rol32(b, 4); b += a; \
|
||||
}
|
||||
|
||||
/* The golden ration: an arbitrary value */
|
||||
#define JHASH_GOLDEN_RATIO 0x9e3779b9
|
||||
/* __jhash_final - final mixing of 3 32-bit values (a,b,c) into c */
|
||||
#define __jhash_final(a, b, c) \
|
||||
{ \
|
||||
c ^= b; c -= rol32(b, 14); \
|
||||
a ^= c; a -= rol32(c, 11); \
|
||||
b ^= a; b -= rol32(a, 25); \
|
||||
c ^= b; c -= rol32(b, 16); \
|
||||
a ^= c; a -= rol32(c, 4); \
|
||||
b ^= a; b -= rol32(a, 14); \
|
||||
c ^= b; c -= rol32(b, 24); \
|
||||
}
|
||||
|
||||
/* The most generic version, hashes an arbitrary sequence
|
||||
* of bytes. No alignment or length assumptions are made about
|
||||
* the input key.
|
||||
/* An arbitrary initial parameter */
|
||||
#define JHASH_INITVAL 0xdeadbeef
|
||||
|
||||
/* jhash - hash an arbitrary key
|
||||
* @k: sequence of bytes as key
|
||||
* @length: the length of the key
|
||||
* @initval: the previous hash, or an arbitray value
|
||||
*
|
||||
* The generic version, hashes an arbitrary sequence of bytes.
|
||||
* No alignment or length assumptions are made about the input key.
|
||||
*
|
||||
* Returns the hash value of the key. The result depends on endianness.
|
||||
*/
|
||||
static inline u32 jhash(const void *key, u32 length, u32 initval)
|
||||
{
|
||||
u32 a, b, c, len;
|
||||
u32 a, b, c;
|
||||
const u8 *k = key;
|
||||
|
||||
len = length;
|
||||
a = b = JHASH_GOLDEN_RATIO;
|
||||
c = initval;
|
||||
|
||||
while (len >= 12) {
|
||||
a += (k[0] +((u32)k[1]<<8) +((u32)k[2]<<16) +((u32)k[3]<<24));
|
||||
b += (k[4] +((u32)k[5]<<8) +((u32)k[6]<<16) +((u32)k[7]<<24));
|
||||
c += (k[8] +((u32)k[9]<<8) +((u32)k[10]<<16)+((u32)k[11]<<24));
|
||||
|
||||
__jhash_mix(a,b,c);
|
||||
/* Set up the internal state */
|
||||
a = b = c = JHASH_INITVAL + length + initval;
|
||||
|
||||
/* All but the last block: affect some 32 bits of (a,b,c) */
|
||||
while (length > 12) {
|
||||
a += __get_unaligned_cpu32(k);
|
||||
b += __get_unaligned_cpu32(k + 4);
|
||||
c += __get_unaligned_cpu32(k + 8);
|
||||
__jhash_mix(a, b, c);
|
||||
length -= 12;
|
||||
k += 12;
|
||||
len -= 12;
|
||||
}
|
||||
|
||||
c += length;
|
||||
switch (len) {
|
||||
case 11: c += ((u32)k[10]<<24);
|
||||
case 10: c += ((u32)k[9]<<16);
|
||||
case 9 : c += ((u32)k[8]<<8);
|
||||
case 8 : b += ((u32)k[7]<<24);
|
||||
case 7 : b += ((u32)k[6]<<16);
|
||||
case 6 : b += ((u32)k[5]<<8);
|
||||
case 5 : b += k[4];
|
||||
case 4 : a += ((u32)k[3]<<24);
|
||||
case 3 : a += ((u32)k[2]<<16);
|
||||
case 2 : a += ((u32)k[1]<<8);
|
||||
case 1 : a += k[0];
|
||||
};
|
||||
|
||||
__jhash_mix(a,b,c);
|
||||
/* Last block: affect all 32 bits of (c) */
|
||||
/* All the case statements fall through */
|
||||
switch (length) {
|
||||
case 12: c += (u32)k[11]<<24;
|
||||
case 11: c += (u32)k[10]<<16;
|
||||
case 10: c += (u32)k[9]<<8;
|
||||
case 9: c += k[8];
|
||||
case 8: b += (u32)k[7]<<24;
|
||||
case 7: b += (u32)k[6]<<16;
|
||||
case 6: b += (u32)k[5]<<8;
|
||||
case 5: b += k[4];
|
||||
case 4: a += (u32)k[3]<<24;
|
||||
case 3: a += (u32)k[2]<<16;
|
||||
case 2: a += (u32)k[1]<<8;
|
||||
case 1: a += k[0];
|
||||
__jhash_final(a, b, c);
|
||||
case 0: /* Nothing left to add */
|
||||
break;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
/* A special optimized version that handles 1 or more of u32s.
|
||||
* The length parameter here is the number of u32s in the key.
|
||||
/* jhash2 - hash an array of u32's
|
||||
* @k: the key which must be an array of u32's
|
||||
* @length: the number of u32's in the key
|
||||
* @initval: the previous hash, or an arbitray value
|
||||
*
|
||||
* Returns the hash value of the key.
|
||||
*/
|
||||
static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
|
||||
{
|
||||
u32 a, b, c, len;
|
||||
u32 a, b, c;
|
||||
|
||||
a = b = JHASH_GOLDEN_RATIO;
|
||||
c = initval;
|
||||
len = length;
|
||||
/* Set up the internal state */
|
||||
a = b = c = JHASH_INITVAL + (length<<2) + initval;
|
||||
|
||||
while (len >= 3) {
|
||||
/* Handle most of the key */
|
||||
while (length > 3) {
|
||||
a += k[0];
|
||||
b += k[1];
|
||||
c += k[2];
|
||||
__jhash_mix(a, b, c);
|
||||
k += 3; len -= 3;
|
||||
length -= 3;
|
||||
k += 3;
|
||||
}
|
||||
|
||||
c += length * 4;
|
||||
|
||||
switch (len) {
|
||||
case 2 : b += k[1];
|
||||
case 1 : a += k[0];
|
||||
};
|
||||
|
||||
__jhash_mix(a,b,c);
|
||||
/* Handle the last 3 u32's: all the case statements fall through */
|
||||
switch (length) {
|
||||
case 3: c += k[2];
|
||||
case 2: b += k[1];
|
||||
case 1: a += k[0];
|
||||
__jhash_final(a, b, c);
|
||||
case 0: /* Nothing left to add */
|
||||
break;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/* A special ultra-optimized versions that knows they are hashing exactly
|
||||
* 3, 2 or 1 word(s).
|
||||
*
|
||||
* NOTE: In particular the "c += length; __jhash_mix(a,b,c);" normally
|
||||
* done at the end is not done here.
|
||||
*/
|
||||
/* jhash_3words - hash exactly 3, 2 or 1 word(s) */
|
||||
static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
|
||||
{
|
||||
a += JHASH_GOLDEN_RATIO;
|
||||
b += JHASH_GOLDEN_RATIO;
|
||||
a += JHASH_INITVAL;
|
||||
b += JHASH_INITVAL;
|
||||
c += initval;
|
||||
|
||||
__jhash_mix(a, b, c);
|
||||
__jhash_final(a, b, c);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -275,7 +275,9 @@ extern int arch_prepared_optinsn(struct arch_optimized_insn *optinsn);
|
|||
extern int arch_check_optimized_kprobe(struct optimized_kprobe *op);
|
||||
extern int arch_prepare_optimized_kprobe(struct optimized_kprobe *op);
|
||||
extern void arch_remove_optimized_kprobe(struct optimized_kprobe *op);
|
||||
extern int arch_optimize_kprobe(struct optimized_kprobe *op);
|
||||
extern void arch_optimize_kprobes(struct list_head *oplist);
|
||||
extern void arch_unoptimize_kprobes(struct list_head *oplist,
|
||||
struct list_head *done_list);
|
||||
extern void arch_unoptimize_kprobe(struct optimized_kprobe *op);
|
||||
extern kprobe_opcode_t *get_optinsn_slot(void);
|
||||
extern void free_optinsn_slot(kprobe_opcode_t *slot, int dirty);
|
||||
|
|
|
|||
|
|
@ -81,16 +81,41 @@ struct kthread_work {
|
|||
#define DEFINE_KTHREAD_WORK(work, fn) \
|
||||
struct kthread_work work = KTHREAD_WORK_INIT(work, fn)
|
||||
|
||||
static inline void init_kthread_worker(struct kthread_worker *worker)
|
||||
{
|
||||
*worker = (struct kthread_worker)KTHREAD_WORKER_INIT(*worker);
|
||||
}
|
||||
/*
|
||||
* kthread_worker.lock and kthread_work.done need their own lockdep class
|
||||
* keys if they are defined on stack with lockdep enabled. Use the
|
||||
* following macros when defining them on stack.
|
||||
*/
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
# define KTHREAD_WORKER_INIT_ONSTACK(worker) \
|
||||
({ init_kthread_worker(&worker); worker; })
|
||||
# define DEFINE_KTHREAD_WORKER_ONSTACK(worker) \
|
||||
struct kthread_worker worker = KTHREAD_WORKER_INIT_ONSTACK(worker)
|
||||
# define KTHREAD_WORK_INIT_ONSTACK(work, fn) \
|
||||
({ init_kthread_work((&work), fn); work; })
|
||||
# define DEFINE_KTHREAD_WORK_ONSTACK(work, fn) \
|
||||
struct kthread_work work = KTHREAD_WORK_INIT_ONSTACK(work, fn)
|
||||
#else
|
||||
# define DEFINE_KTHREAD_WORKER_ONSTACK(worker) DEFINE_KTHREAD_WORKER(worker)
|
||||
# define DEFINE_KTHREAD_WORK_ONSTACK(work, fn) DEFINE_KTHREAD_WORK(work, fn)
|
||||
#endif
|
||||
|
||||
static inline void init_kthread_work(struct kthread_work *work,
|
||||
kthread_work_func_t fn)
|
||||
{
|
||||
*work = (struct kthread_work)KTHREAD_WORK_INIT(*work, fn);
|
||||
}
|
||||
extern void __init_kthread_worker(struct kthread_worker *worker,
|
||||
const char *name, struct lock_class_key *key);
|
||||
|
||||
#define init_kthread_worker(worker) \
|
||||
do { \
|
||||
static struct lock_class_key __key; \
|
||||
__init_kthread_worker((worker), "("#worker")->lock", &__key); \
|
||||
} while (0)
|
||||
|
||||
#define init_kthread_work(work, fn) \
|
||||
do { \
|
||||
memset((work), 0, sizeof(struct kthread_work)); \
|
||||
INIT_LIST_HEAD(&(work)->node); \
|
||||
(work)->func = (fn); \
|
||||
init_waitqueue_head(&(work)->done); \
|
||||
} while (0)
|
||||
|
||||
int kthread_worker_fn(void *worker_ptr);
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
#define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */
|
||||
#define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */
|
||||
#define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */
|
||||
#define MDIO_AN_EEE_ADV 60 /* EEE advertisement */
|
||||
|
||||
/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */
|
||||
#define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */
|
||||
|
|
@ -235,6 +236,10 @@
|
|||
#define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */
|
||||
#define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */
|
||||
|
||||
/* AN EEE Advertisement register. */
|
||||
#define MDIO_AN_EEE_ADV_100TX 0x0002 /* Advertise 100TX EEE cap */
|
||||
#define MDIO_AN_EEE_ADV_1000T 0x0004 /* Advertise 1000T EEE cap */
|
||||
|
||||
/* LASI RX_ALARM control/status registers. */
|
||||
#define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */
|
||||
#define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */
|
||||
|
|
|
|||
|
|
@ -1,136 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) ST-Ericsson SA 2010
|
||||
*
|
||||
* License Terms: GNU General Public License, version 2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_TC35892_H
|
||||
#define __LINUX_MFD_TC35892_H
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
#define TC35892_RSTCTRL_IRQRST (1 << 4)
|
||||
#define TC35892_RSTCTRL_TIMRST (1 << 3)
|
||||
#define TC35892_RSTCTRL_ROTRST (1 << 2)
|
||||
#define TC35892_RSTCTRL_KBDRST (1 << 1)
|
||||
#define TC35892_RSTCTRL_GPIRST (1 << 0)
|
||||
|
||||
#define TC35892_IRQST 0x91
|
||||
|
||||
#define TC35892_MANFCODE_MAGIC 0x03
|
||||
#define TC35892_MANFCODE 0x80
|
||||
#define TC35892_VERSION 0x81
|
||||
#define TC35892_IOCFG 0xA7
|
||||
|
||||
#define TC35892_CLKMODE 0x88
|
||||
#define TC35892_CLKCFG 0x89
|
||||
#define TC35892_CLKEN 0x8A
|
||||
|
||||
#define TC35892_RSTCTRL 0x82
|
||||
#define TC35892_EXTRSTN 0x83
|
||||
#define TC35892_RSTINTCLR 0x84
|
||||
|
||||
#define TC35892_GPIOIS0 0xC9
|
||||
#define TC35892_GPIOIS1 0xCA
|
||||
#define TC35892_GPIOIS2 0xCB
|
||||
#define TC35892_GPIOIBE0 0xCC
|
||||
#define TC35892_GPIOIBE1 0xCD
|
||||
#define TC35892_GPIOIBE2 0xCE
|
||||
#define TC35892_GPIOIEV0 0xCF
|
||||
#define TC35892_GPIOIEV1 0xD0
|
||||
#define TC35892_GPIOIEV2 0xD1
|
||||
#define TC35892_GPIOIE0 0xD2
|
||||
#define TC35892_GPIOIE1 0xD3
|
||||
#define TC35892_GPIOIE2 0xD4
|
||||
#define TC35892_GPIORIS0 0xD6
|
||||
#define TC35892_GPIORIS1 0xD7
|
||||
#define TC35892_GPIORIS2 0xD8
|
||||
#define TC35892_GPIOMIS0 0xD9
|
||||
#define TC35892_GPIOMIS1 0xDA
|
||||
#define TC35892_GPIOMIS2 0xDB
|
||||
#define TC35892_GPIOIC0 0xDC
|
||||
#define TC35892_GPIOIC1 0xDD
|
||||
#define TC35892_GPIOIC2 0xDE
|
||||
|
||||
#define TC35892_GPIODATA0 0xC0
|
||||
#define TC35892_GPIOMASK0 0xc1
|
||||
#define TC35892_GPIODATA1 0xC2
|
||||
#define TC35892_GPIOMASK1 0xc3
|
||||
#define TC35892_GPIODATA2 0xC4
|
||||
#define TC35892_GPIOMASK2 0xC5
|
||||
|
||||
#define TC35892_GPIODIR0 0xC6
|
||||
#define TC35892_GPIODIR1 0xC7
|
||||
#define TC35892_GPIODIR2 0xC8
|
||||
|
||||
#define TC35892_GPIOSYNC0 0xE6
|
||||
#define TC35892_GPIOSYNC1 0xE7
|
||||
#define TC35892_GPIOSYNC2 0xE8
|
||||
|
||||
#define TC35892_GPIOWAKE0 0xE9
|
||||
#define TC35892_GPIOWAKE1 0xEA
|
||||
#define TC35892_GPIOWAKE2 0xEB
|
||||
|
||||
#define TC35892_GPIOODM0 0xE0
|
||||
#define TC35892_GPIOODE0 0xE1
|
||||
#define TC35892_GPIOODM1 0xE2
|
||||
#define TC35892_GPIOODE1 0xE3
|
||||
#define TC35892_GPIOODM2 0xE4
|
||||
#define TC35892_GPIOODE2 0xE5
|
||||
|
||||
#define TC35892_INT_GPIIRQ 0
|
||||
#define TC35892_INT_TI0IRQ 1
|
||||
#define TC35892_INT_TI1IRQ 2
|
||||
#define TC35892_INT_TI2IRQ 3
|
||||
#define TC35892_INT_ROTIRQ 5
|
||||
#define TC35892_INT_KBDIRQ 6
|
||||
#define TC35892_INT_PORIRQ 7
|
||||
|
||||
#define TC35892_NR_INTERNAL_IRQS 8
|
||||
#define TC35892_INT_GPIO(x) (TC35892_NR_INTERNAL_IRQS + (x))
|
||||
|
||||
struct tc35892 {
|
||||
struct mutex lock;
|
||||
struct device *dev;
|
||||
struct i2c_client *i2c;
|
||||
|
||||
int irq_base;
|
||||
int num_gpio;
|
||||
struct tc35892_platform_data *pdata;
|
||||
};
|
||||
|
||||
extern int tc35892_reg_write(struct tc35892 *tc35892, u8 reg, u8 data);
|
||||
extern int tc35892_reg_read(struct tc35892 *tc35892, u8 reg);
|
||||
extern int tc35892_block_read(struct tc35892 *tc35892, u8 reg, u8 length,
|
||||
u8 *values);
|
||||
extern int tc35892_block_write(struct tc35892 *tc35892, u8 reg, u8 length,
|
||||
const u8 *values);
|
||||
extern int tc35892_set_bits(struct tc35892 *tc35892, u8 reg, u8 mask, u8 val);
|
||||
|
||||
/**
|
||||
* struct tc35892_gpio_platform_data - TC35892 GPIO platform data
|
||||
* @gpio_base: first gpio number assigned to TC35892. A maximum of
|
||||
* %TC35892_NR_GPIOS GPIOs will be allocated.
|
||||
* @setup: callback for board-specific initialization
|
||||
* @remove: callback for board-specific teardown
|
||||
*/
|
||||
struct tc35892_gpio_platform_data {
|
||||
int gpio_base;
|
||||
void (*setup)(struct tc35892 *tc35892, unsigned gpio_base);
|
||||
void (*remove)(struct tc35892 *tc35892, unsigned gpio_base);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct tc35892_platform_data - TC35892 platform data
|
||||
* @irq_base: base IRQ number. %TC35892_NR_IRQS irqs will be used.
|
||||
* @gpio: GPIO-specific platform data
|
||||
*/
|
||||
struct tc35892_platform_data {
|
||||
int irq_base;
|
||||
struct tc35892_gpio_platform_data *gpio;
|
||||
};
|
||||
|
||||
#define TC35892_NR_GPIOS 24
|
||||
#define TC35892_NR_IRQS TC35892_INT_GPIO(TC35892_NR_GPIOS)
|
||||
|
||||
#endif
|
||||
195
include/linux/mfd/tc3589x.h
Normal file
195
include/linux/mfd/tc3589x.h
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
* Copyright (C) ST-Ericsson SA 2010
|
||||
*
|
||||
* License Terms: GNU General Public License, version 2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_TC3589x_H
|
||||
#define __LINUX_MFD_TC3589x_H
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
enum tx3589x_block {
|
||||
TC3589x_BLOCK_GPIO = 1 << 0,
|
||||
TC3589x_BLOCK_KEYPAD = 1 << 1,
|
||||
};
|
||||
|
||||
#define TC3589x_RSTCTRL_IRQRST (1 << 4)
|
||||
#define TC3589x_RSTCTRL_TIMRST (1 << 3)
|
||||
#define TC3589x_RSTCTRL_ROTRST (1 << 2)
|
||||
#define TC3589x_RSTCTRL_KBDRST (1 << 1)
|
||||
#define TC3589x_RSTCTRL_GPIRST (1 << 0)
|
||||
|
||||
/* Keyboard Configuration Registers */
|
||||
#define TC3589x_KBDSETTLE_REG 0x01
|
||||
#define TC3589x_KBDBOUNCE 0x02
|
||||
#define TC3589x_KBDSIZE 0x03
|
||||
#define TC3589x_KBCFG_LSB 0x04
|
||||
#define TC3589x_KBCFG_MSB 0x05
|
||||
#define TC3589x_KBDIC 0x08
|
||||
#define TC3589x_KBDMSK 0x09
|
||||
#define TC3589x_EVTCODE_FIFO 0x10
|
||||
#define TC3589x_KBDMFS 0x8F
|
||||
|
||||
#define TC3589x_IRQST 0x91
|
||||
|
||||
#define TC3589x_MANFCODE_MAGIC 0x03
|
||||
#define TC3589x_MANFCODE 0x80
|
||||
#define TC3589x_VERSION 0x81
|
||||
#define TC3589x_IOCFG 0xA7
|
||||
|
||||
#define TC3589x_CLKMODE 0x88
|
||||
#define TC3589x_CLKCFG 0x89
|
||||
#define TC3589x_CLKEN 0x8A
|
||||
|
||||
#define TC3589x_RSTCTRL 0x82
|
||||
#define TC3589x_EXTRSTN 0x83
|
||||
#define TC3589x_RSTINTCLR 0x84
|
||||
|
||||
/* Pull up/down configuration registers */
|
||||
#define TC3589x_IOCFG 0xA7
|
||||
#define TC3589x_IOPULLCFG0_LSB 0xAA
|
||||
#define TC3589x_IOPULLCFG0_MSB 0xAB
|
||||
#define TC3589x_IOPULLCFG1_LSB 0xAC
|
||||
#define TC3589x_IOPULLCFG1_MSB 0xAD
|
||||
#define TC3589x_IOPULLCFG2_LSB 0xAE
|
||||
|
||||
#define TC3589x_GPIOIS0 0xC9
|
||||
#define TC3589x_GPIOIS1 0xCA
|
||||
#define TC3589x_GPIOIS2 0xCB
|
||||
#define TC3589x_GPIOIBE0 0xCC
|
||||
#define TC3589x_GPIOIBE1 0xCD
|
||||
#define TC3589x_GPIOIBE2 0xCE
|
||||
#define TC3589x_GPIOIEV0 0xCF
|
||||
#define TC3589x_GPIOIEV1 0xD0
|
||||
#define TC3589x_GPIOIEV2 0xD1
|
||||
#define TC3589x_GPIOIE0 0xD2
|
||||
#define TC3589x_GPIOIE1 0xD3
|
||||
#define TC3589x_GPIOIE2 0xD4
|
||||
#define TC3589x_GPIORIS0 0xD6
|
||||
#define TC3589x_GPIORIS1 0xD7
|
||||
#define TC3589x_GPIORIS2 0xD8
|
||||
#define TC3589x_GPIOMIS0 0xD9
|
||||
#define TC3589x_GPIOMIS1 0xDA
|
||||
#define TC3589x_GPIOMIS2 0xDB
|
||||
#define TC3589x_GPIOIC0 0xDC
|
||||
#define TC3589x_GPIOIC1 0xDD
|
||||
#define TC3589x_GPIOIC2 0xDE
|
||||
|
||||
#define TC3589x_GPIODATA0 0xC0
|
||||
#define TC3589x_GPIOMASK0 0xc1
|
||||
#define TC3589x_GPIODATA1 0xC2
|
||||
#define TC3589x_GPIOMASK1 0xc3
|
||||
#define TC3589x_GPIODATA2 0xC4
|
||||
#define TC3589x_GPIOMASK2 0xC5
|
||||
|
||||
#define TC3589x_GPIODIR0 0xC6
|
||||
#define TC3589x_GPIODIR1 0xC7
|
||||
#define TC3589x_GPIODIR2 0xC8
|
||||
|
||||
#define TC3589x_GPIOSYNC0 0xE6
|
||||
#define TC3589x_GPIOSYNC1 0xE7
|
||||
#define TC3589x_GPIOSYNC2 0xE8
|
||||
|
||||
#define TC3589x_GPIOWAKE0 0xE9
|
||||
#define TC3589x_GPIOWAKE1 0xEA
|
||||
#define TC3589x_GPIOWAKE2 0xEB
|
||||
|
||||
#define TC3589x_GPIOODM0 0xE0
|
||||
#define TC3589x_GPIOODE0 0xE1
|
||||
#define TC3589x_GPIOODM1 0xE2
|
||||
#define TC3589x_GPIOODE1 0xE3
|
||||
#define TC3589x_GPIOODM2 0xE4
|
||||
#define TC3589x_GPIOODE2 0xE5
|
||||
|
||||
#define TC3589x_INT_GPIIRQ 0
|
||||
#define TC3589x_INT_TI0IRQ 1
|
||||
#define TC3589x_INT_TI1IRQ 2
|
||||
#define TC3589x_INT_TI2IRQ 3
|
||||
#define TC3589x_INT_ROTIRQ 5
|
||||
#define TC3589x_INT_KBDIRQ 6
|
||||
#define TC3589x_INT_PORIRQ 7
|
||||
|
||||
#define TC3589x_NR_INTERNAL_IRQS 8
|
||||
#define TC3589x_INT_GPIO(x) (TC3589x_NR_INTERNAL_IRQS + (x))
|
||||
|
||||
struct tc3589x {
|
||||
struct mutex lock;
|
||||
struct device *dev;
|
||||
struct i2c_client *i2c;
|
||||
|
||||
int irq_base;
|
||||
int num_gpio;
|
||||
struct tc3589x_platform_data *pdata;
|
||||
};
|
||||
|
||||
extern int tc3589x_reg_write(struct tc3589x *tc3589x, u8 reg, u8 data);
|
||||
extern int tc3589x_reg_read(struct tc3589x *tc3589x, u8 reg);
|
||||
extern int tc3589x_block_read(struct tc3589x *tc3589x, u8 reg, u8 length,
|
||||
u8 *values);
|
||||
extern int tc3589x_block_write(struct tc3589x *tc3589x, u8 reg, u8 length,
|
||||
const u8 *values);
|
||||
extern int tc3589x_set_bits(struct tc3589x *tc3589x, u8 reg, u8 mask, u8 val);
|
||||
|
||||
/*
|
||||
* Keypad related platform specific constants
|
||||
* These values may be modified for fine tuning
|
||||
*/
|
||||
#define TC_KPD_ROWS 0x8
|
||||
#define TC_KPD_COLUMNS 0x8
|
||||
#define TC_KPD_DEBOUNCE_PERIOD 0xA3
|
||||
#define TC_KPD_SETTLE_TIME 0xA3
|
||||
|
||||
/**
|
||||
* struct tc35893_platform_data - data structure for platform specific data
|
||||
* @keymap_data: matrix scan code table for keycodes
|
||||
* @krow: mask for available rows, value is 0xFF
|
||||
* @kcol: mask for available columns, value is 0xFF
|
||||
* @debounce_period: platform specific debounce time
|
||||
* @settle_time: platform specific settle down time
|
||||
* @irqtype: type of interrupt, falling or rising edge
|
||||
* @enable_wakeup: specifies if keypad event can wake up system from sleep
|
||||
* @no_autorepeat: flag for auto repetition
|
||||
*/
|
||||
struct tc3589x_keypad_platform_data {
|
||||
const struct matrix_keymap_data *keymap_data;
|
||||
u8 krow;
|
||||
u8 kcol;
|
||||
u8 debounce_period;
|
||||
u8 settle_time;
|
||||
unsigned long irqtype;
|
||||
bool enable_wakeup;
|
||||
bool no_autorepeat;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct tc3589x_gpio_platform_data - TC3589x GPIO platform data
|
||||
* @gpio_base: first gpio number assigned to TC3589x. A maximum of
|
||||
* %TC3589x_NR_GPIOS GPIOs will be allocated.
|
||||
* @setup: callback for board-specific initialization
|
||||
* @remove: callback for board-specific teardown
|
||||
*/
|
||||
struct tc3589x_gpio_platform_data {
|
||||
int gpio_base;
|
||||
void (*setup)(struct tc3589x *tc3589x, unsigned gpio_base);
|
||||
void (*remove)(struct tc3589x *tc3589x, unsigned gpio_base);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct tc3589x_platform_data - TC3589x platform data
|
||||
* @block: bitmask of blocks to enable (use TC3589x_BLOCK_*)
|
||||
* @irq_base: base IRQ number. %TC3589x_NR_IRQS irqs will be used.
|
||||
* @gpio: GPIO-specific platform data
|
||||
* @keypad: keypad-specific platform data
|
||||
*/
|
||||
struct tc3589x_platform_data {
|
||||
unsigned int block;
|
||||
int irq_base;
|
||||
struct tc3589x_gpio_platform_data *gpio;
|
||||
const struct tc3589x_keypad_platform_data *keypad;
|
||||
};
|
||||
|
||||
#define TC3589x_NR_GPIOS 24
|
||||
#define TC3589x_NR_IRQS TC3589x_INT_GPIO(TC3589x_NR_GPIOS)
|
||||
|
||||
#endif
|
||||
|
|
@ -308,6 +308,9 @@ struct module
|
|||
/* The size of the executable code in each section. */
|
||||
unsigned int init_text_size, core_text_size;
|
||||
|
||||
/* Size of RO sections of the module (text+rodata) */
|
||||
unsigned int init_ro_size, core_ro_size;
|
||||
|
||||
/* Arch-specific module values */
|
||||
struct mod_arch_specific arch;
|
||||
|
||||
|
|
@ -672,7 +675,6 @@ static inline int module_get_iter_tracepoints(struct tracepoint_iter *iter)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_MODULES */
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
|
|
@ -687,6 +689,13 @@ extern int module_sysfs_initialized;
|
|||
|
||||
#define __MODULE_STRING(x) __stringify(x)
|
||||
|
||||
#ifdef CONFIG_DEBUG_SET_MODULE_RONX
|
||||
extern void set_all_modules_text_rw(void);
|
||||
extern void set_all_modules_text_ro(void);
|
||||
#else
|
||||
static inline void set_all_modules_text_rw(void) { }
|
||||
static inline void set_all_modules_text_ro(void) { }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
|
||||
|
|
|
|||
|
|
@ -160,4 +160,8 @@ extern int mutex_trylock(struct mutex *lock);
|
|||
extern void mutex_unlock(struct mutex *lock);
|
||||
extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
|
||||
|
||||
#ifndef CONFIG_HAVE_ARCH_MUTEX_CPU_RELAX
|
||||
#define arch_mutex_cpu_relax() cpu_relax()
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -493,6 +493,8 @@ static inline void napi_synchronize(const struct napi_struct *n)
|
|||
enum netdev_queue_state_t {
|
||||
__QUEUE_STATE_XOFF,
|
||||
__QUEUE_STATE_FROZEN,
|
||||
#define QUEUE_STATE_XOFF_OR_FROZEN ((1 << __QUEUE_STATE_XOFF) | \
|
||||
(1 << __QUEUE_STATE_FROZEN))
|
||||
};
|
||||
|
||||
struct netdev_queue {
|
||||
|
|
@ -503,6 +505,12 @@ struct netdev_queue {
|
|||
struct Qdisc *qdisc;
|
||||
unsigned long state;
|
||||
struct Qdisc *qdisc_sleeping;
|
||||
#ifdef CONFIG_RPS
|
||||
struct kobject kobj;
|
||||
#endif
|
||||
#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
|
||||
int numa_node;
|
||||
#endif
|
||||
/*
|
||||
* write mostly part
|
||||
*/
|
||||
|
|
@ -517,6 +525,22 @@ struct netdev_queue {
|
|||
u64 tx_dropped;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
static inline int netdev_queue_numa_node_read(const struct netdev_queue *q)
|
||||
{
|
||||
#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
|
||||
return q->numa_node;
|
||||
#else
|
||||
return NUMA_NO_NODE;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void netdev_queue_numa_node_write(struct netdev_queue *q, int node)
|
||||
{
|
||||
#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
|
||||
q->numa_node = node;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
/*
|
||||
* This structure holds an RPS map which can be of variable length. The
|
||||
|
|
@ -592,11 +616,36 @@ struct netdev_rx_queue {
|
|||
struct rps_map __rcu *rps_map;
|
||||
struct rps_dev_flow_table __rcu *rps_flow_table;
|
||||
struct kobject kobj;
|
||||
struct netdev_rx_queue *first;
|
||||
atomic_t count;
|
||||
struct net_device *dev;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
#endif /* CONFIG_RPS */
|
||||
|
||||
#ifdef CONFIG_XPS
|
||||
/*
|
||||
* This structure holds an XPS map which can be of variable length. The
|
||||
* map is an array of queues.
|
||||
*/
|
||||
struct xps_map {
|
||||
unsigned int len;
|
||||
unsigned int alloc_len;
|
||||
struct rcu_head rcu;
|
||||
u16 queues[0];
|
||||
};
|
||||
#define XPS_MAP_SIZE(_num) (sizeof(struct xps_map) + (_num * sizeof(u16)))
|
||||
#define XPS_MIN_MAP_ALLOC ((L1_CACHE_BYTES - sizeof(struct xps_map)) \
|
||||
/ sizeof(u16))
|
||||
|
||||
/*
|
||||
* This structure holds all XPS maps for device. Maps are indexed by CPU.
|
||||
*/
|
||||
struct xps_dev_maps {
|
||||
struct rcu_head rcu;
|
||||
struct xps_map __rcu *cpu_map[0];
|
||||
};
|
||||
#define XPS_DEV_MAPS_SIZE (sizeof(struct xps_dev_maps) + \
|
||||
(nr_cpu_ids * sizeof(struct xps_map *)))
|
||||
#endif /* CONFIG_XPS */
|
||||
|
||||
/*
|
||||
* This structure defines the management hooks for network devices.
|
||||
* The following hooks can be defined; unless noted otherwise, they are
|
||||
|
|
@ -683,7 +732,7 @@ struct netdev_rx_queue {
|
|||
* neither operation.
|
||||
*
|
||||
* void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp);
|
||||
* If device support VLAN receive accleration
|
||||
* If device support VLAN receive acceleration
|
||||
* (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called
|
||||
* when vlan groups for the device changes. Note: grp is NULL
|
||||
* if no vlan's groups are being used.
|
||||
|
|
@ -951,7 +1000,7 @@ struct net_device {
|
|||
#endif
|
||||
void *atalk_ptr; /* AppleTalk link */
|
||||
struct in_device __rcu *ip_ptr; /* IPv4 specific data */
|
||||
void *dn_ptr; /* DECnet specific data */
|
||||
struct dn_dev __rcu *dn_ptr; /* DECnet specific data */
|
||||
struct inet6_dev __rcu *ip6_ptr; /* IPv6 specific data */
|
||||
void *ec_ptr; /* Econet specific data */
|
||||
void *ax25_ptr; /* AX.25 specific data */
|
||||
|
|
@ -995,8 +1044,8 @@ struct net_device {
|
|||
unsigned int real_num_rx_queues;
|
||||
#endif
|
||||
|
||||
rx_handler_func_t *rx_handler;
|
||||
void *rx_handler_data;
|
||||
rx_handler_func_t __rcu *rx_handler;
|
||||
void __rcu *rx_handler_data;
|
||||
|
||||
struct netdev_queue __rcu *ingress_queue;
|
||||
|
||||
|
|
@ -1017,6 +1066,10 @@ struct net_device {
|
|||
unsigned long tx_queue_len; /* Max frames per queue allowed */
|
||||
spinlock_t tx_global_lock;
|
||||
|
||||
#ifdef CONFIG_XPS
|
||||
struct xps_dev_maps __rcu *xps_maps;
|
||||
#endif
|
||||
|
||||
/* These may be needed for future network-power-down code. */
|
||||
|
||||
/*
|
||||
|
|
@ -1307,7 +1360,8 @@ static inline struct net_device *first_net_device(struct net *net)
|
|||
|
||||
extern int netdev_boot_setup_check(struct net_device *dev);
|
||||
extern unsigned long netdev_boot_base(const char *prefix, int unit);
|
||||
extern struct net_device *dev_getbyhwaddr(struct net *net, unsigned short type, char *hwaddr);
|
||||
extern struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
|
||||
const char *hwaddr);
|
||||
extern struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type);
|
||||
extern struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type);
|
||||
extern void dev_add_pack(struct packet_type *pt);
|
||||
|
|
@ -1600,9 +1654,9 @@ static inline int netif_queue_stopped(const struct net_device *dev)
|
|||
return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0));
|
||||
}
|
||||
|
||||
static inline int netif_tx_queue_frozen(const struct netdev_queue *dev_queue)
|
||||
static inline int netif_tx_queue_frozen_or_stopped(const struct netdev_queue *dev_queue)
|
||||
{
|
||||
return test_bit(__QUEUE_STATE_FROZEN, &dev_queue->state);
|
||||
return dev_queue->state & QUEUE_STATE_XOFF_OR_FROZEN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1693,6 +1747,16 @@ static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index)
|
|||
__netif_schedule(txq->qdisc);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns a Tx hash for the given packet when dev->real_num_tx_queues is used
|
||||
* as a distribution range limit for the returned value.
|
||||
*/
|
||||
static inline u16 skb_tx_hash(const struct net_device *dev,
|
||||
const struct sk_buff *skb)
|
||||
{
|
||||
return __skb_tx_hash(dev, skb, dev->real_num_tx_queues);
|
||||
}
|
||||
|
||||
/**
|
||||
* netif_is_multiqueue - test if device has multiple transmit queues
|
||||
* @dev: network device
|
||||
|
|
@ -2239,6 +2303,8 @@ unsigned long netdev_fix_features(unsigned long features, const char *name);
|
|||
void netif_stacked_transfer_operstate(const struct net_device *rootdev,
|
||||
struct net_device *dev);
|
||||
|
||||
int netif_get_vlan_features(struct sk_buff *skb, struct net_device *dev);
|
||||
|
||||
static inline int net_gso_ok(int features, int gso_type)
|
||||
{
|
||||
int feature = gso_type << NETIF_F_GSO_SHIFT;
|
||||
|
|
@ -2254,10 +2320,7 @@ static inline int skb_gso_ok(struct sk_buff *skb, int features)
|
|||
static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
|
||||
{
|
||||
if (skb_is_gso(skb)) {
|
||||
int features = dev->features;
|
||||
|
||||
if (skb->protocol == htons(ETH_P_8021Q) || skb->vlan_tci)
|
||||
features &= dev->vlan_features;
|
||||
int features = netif_get_vlan_features(skb, dev);
|
||||
|
||||
return (!skb_gso_ok(skb, features) ||
|
||||
unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
|
||||
#define NF_QUEUE_NR(x) ((((x) << NF_VERDICT_BITS) & NF_VERDICT_QMASK) | NF_QUEUE)
|
||||
|
||||
#define NF_DROP_ERR(x) (((-x) << NF_VERDICT_BITS) | NF_DROP)
|
||||
|
||||
/* only for userspace compatibility */
|
||||
#ifndef __KERNEL__
|
||||
/* Generic cache responses from hook functions.
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ struct nlmsghdr {
|
|||
Check NLM_F_EXCL
|
||||
*/
|
||||
|
||||
#define NLMSG_ALIGNTO 4
|
||||
#define NLMSG_ALIGNTO 4U
|
||||
#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
|
||||
#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
|
||||
#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
|
||||
|
|
|
|||
|
|
@ -172,10 +172,10 @@
|
|||
* to the specified ISO/IEC 3166-1 alpha2 country code. The core will
|
||||
* store this as a valid request and then query userspace for it.
|
||||
*
|
||||
* @NL80211_CMD_GET_MESH_PARAMS: Get mesh networking properties for the
|
||||
* @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the
|
||||
* interface identified by %NL80211_ATTR_IFINDEX
|
||||
*
|
||||
* @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the
|
||||
* @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the
|
||||
* interface identified by %NL80211_ATTR_IFINDEX
|
||||
*
|
||||
* @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
|
||||
|
|
@ -358,11 +358,16 @@
|
|||
* user space application). %NL80211_ATTR_FRAME is used to specify the
|
||||
* frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and
|
||||
* optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on
|
||||
* which channel the frame is to be transmitted or was received. This
|
||||
* channel has to be the current channel (remain-on-channel or the
|
||||
* operational channel). When called, this operation returns a cookie
|
||||
* (%NL80211_ATTR_COOKIE) that will be included with the TX status event
|
||||
* pertaining to the TX request.
|
||||
* which channel the frame is to be transmitted or was received. If this
|
||||
* channel is not the current channel (remain-on-channel or the
|
||||
* operational channel) the device will switch to the given channel and
|
||||
* transmit the frame, optionally waiting for a response for the time
|
||||
* specified using %NL80211_ATTR_DURATION. When called, this operation
|
||||
* returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the
|
||||
* TX status event pertaining to the TX request.
|
||||
* @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
|
||||
* command may be used with the corresponding cookie to cancel the wait
|
||||
* time if it is known that it is no longer necessary.
|
||||
* @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility.
|
||||
* @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame
|
||||
* transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
|
||||
|
|
@ -389,6 +394,18 @@
|
|||
*
|
||||
* @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
|
||||
*
|
||||
* @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial
|
||||
* mesh config parameters may be given.
|
||||
* @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the
|
||||
* network is determined by the network interface.
|
||||
*
|
||||
* @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
|
||||
* notification. This event is used to indicate that an unprotected
|
||||
* deauthentication frame was dropped when MFP is in use.
|
||||
* @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
|
||||
* notification. This event is used to indicate that an unprotected
|
||||
* disassociation frame was dropped when MFP is in use.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -431,8 +448,8 @@ enum nl80211_commands {
|
|||
NL80211_CMD_SET_REG,
|
||||
NL80211_CMD_REQ_SET_REG,
|
||||
|
||||
NL80211_CMD_GET_MESH_PARAMS,
|
||||
NL80211_CMD_SET_MESH_PARAMS,
|
||||
NL80211_CMD_GET_MESH_CONFIG,
|
||||
NL80211_CMD_SET_MESH_CONFIG,
|
||||
|
||||
NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */,
|
||||
|
||||
|
|
@ -493,6 +510,14 @@ enum nl80211_commands {
|
|||
NL80211_CMD_SET_CHANNEL,
|
||||
NL80211_CMD_SET_WDS_PEER,
|
||||
|
||||
NL80211_CMD_FRAME_WAIT_CANCEL,
|
||||
|
||||
NL80211_CMD_JOIN_MESH,
|
||||
NL80211_CMD_LEAVE_MESH,
|
||||
|
||||
NL80211_CMD_UNPROT_DEAUTHENTICATE,
|
||||
NL80211_CMD_UNPROT_DISASSOCIATE,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
|
|
@ -513,6 +538,10 @@ enum nl80211_commands {
|
|||
#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
|
||||
#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT
|
||||
|
||||
/* source-level API compatibility */
|
||||
#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
|
||||
#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
|
||||
|
||||
/**
|
||||
* enum nl80211_attrs - nl80211 netlink attributes
|
||||
*
|
||||
|
|
@ -758,6 +787,9 @@ enum nl80211_commands {
|
|||
* cache, a wiphy attribute.
|
||||
*
|
||||
* @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32.
|
||||
* @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that
|
||||
* specifies the maximum duration that can be requested with the
|
||||
* remain-on-channel operation, in milliseconds, u32.
|
||||
*
|
||||
* @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.
|
||||
*
|
||||
|
|
@ -804,6 +836,51 @@ enum nl80211_commands {
|
|||
* @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly
|
||||
* means support for per-station GTKs.
|
||||
*
|
||||
* @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting.
|
||||
* This can be used to mask out antennas which are not attached or should
|
||||
* not be used for transmitting. If an antenna is not selected in this
|
||||
* bitmap the hardware is not allowed to transmit on this antenna.
|
||||
*
|
||||
* Each bit represents one antenna, starting with antenna 1 at the first
|
||||
* bit. Depending on which antennas are selected in the bitmap, 802.11n
|
||||
* drivers can derive which chainmasks to use (if all antennas belonging to
|
||||
* a particular chain are disabled this chain should be disabled) and if
|
||||
* a chain has diversity antennas wether diversity should be used or not.
|
||||
* HT capabilities (STBC, TX Beamforming, Antenna selection) can be
|
||||
* derived from the available chains after applying the antenna mask.
|
||||
* Non-802.11n drivers can derive wether to use diversity or not.
|
||||
* Drivers may reject configurations or RX/TX mask combinations they cannot
|
||||
* support by returning -EINVAL.
|
||||
*
|
||||
* @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving.
|
||||
* This can be used to mask out antennas which are not attached or should
|
||||
* not be used for receiving. If an antenna is not selected in this bitmap
|
||||
* the hardware should not be configured to receive on this antenna.
|
||||
* For a more detailed descripton see @NL80211_ATTR_WIPHY_ANTENNA_TX.
|
||||
*
|
||||
* @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available
|
||||
* for configuration as TX antennas via the above parameters.
|
||||
*
|
||||
* @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available
|
||||
* for configuration as RX antennas via the above parameters.
|
||||
*
|
||||
* @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS
|
||||
*
|
||||
* @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be
|
||||
* transmitted on another channel when the channel given doesn't match
|
||||
* the current channel. If the current channel doesn't match and this
|
||||
* flag isn't set, the frame will be rejected. This is also used as an
|
||||
* nl80211 capability flag.
|
||||
*
|
||||
* @NL80211_ATTR_BSS_HTOPMODE: HT operation mode (u16)
|
||||
*
|
||||
* @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags
|
||||
* attributes, specifying what a key should be set as default as.
|
||||
* See &enum nl80211_key_default_types.
|
||||
*
|
||||
* @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters. These cannot be
|
||||
* changed once the mesh is active.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -858,7 +935,7 @@ enum nl80211_attrs {
|
|||
NL80211_ATTR_REG_ALPHA2,
|
||||
NL80211_ATTR_REG_RULES,
|
||||
|
||||
NL80211_ATTR_MESH_PARAMS,
|
||||
NL80211_ATTR_MESH_CONFIG,
|
||||
|
||||
NL80211_ATTR_BSS_BASIC_RATES,
|
||||
|
||||
|
|
@ -973,6 +1050,24 @@ enum nl80211_attrs {
|
|||
|
||||
NL80211_ATTR_SUPPORT_IBSS_RSN,
|
||||
|
||||
NL80211_ATTR_WIPHY_ANTENNA_TX,
|
||||
NL80211_ATTR_WIPHY_ANTENNA_RX,
|
||||
|
||||
NL80211_ATTR_MCAST_RATE,
|
||||
|
||||
NL80211_ATTR_OFFCHANNEL_TX_OK,
|
||||
|
||||
NL80211_ATTR_BSS_HT_OPMODE,
|
||||
|
||||
NL80211_ATTR_KEY_DEFAULT_TYPES,
|
||||
|
||||
NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION,
|
||||
|
||||
NL80211_ATTR_MESH_SETUP,
|
||||
|
||||
NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX,
|
||||
NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
|
|
@ -981,6 +1076,7 @@ enum nl80211_attrs {
|
|||
|
||||
/* source-level API compatibility */
|
||||
#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION
|
||||
#define NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG
|
||||
|
||||
/*
|
||||
* Allow user space programs to use #ifdef on new attributes by defining them
|
||||
|
|
@ -1139,6 +1235,7 @@ enum nl80211_rate_info {
|
|||
* station)
|
||||
* @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station)
|
||||
* @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station)
|
||||
* @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm)
|
||||
*/
|
||||
enum nl80211_sta_info {
|
||||
__NL80211_STA_INFO_INVALID,
|
||||
|
|
@ -1154,6 +1251,7 @@ enum nl80211_sta_info {
|
|||
NL80211_STA_INFO_TX_PACKETS,
|
||||
NL80211_STA_INFO_TX_RETRIES,
|
||||
NL80211_STA_INFO_TX_FAILED,
|
||||
NL80211_STA_INFO_SIGNAL_AVG,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_INFO_AFTER_LAST,
|
||||
|
|
@ -1307,7 +1405,11 @@ enum nl80211_bitrate_attr {
|
|||
* wireless core it thinks its knows the regulatory domain we should be in.
|
||||
* @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
|
||||
* 802.11 country information element with regulatory information it
|
||||
* thinks we should consider.
|
||||
* thinks we should consider. cfg80211 only processes the country
|
||||
* code from the IE, and relies on the regulatory domain information
|
||||
* structure pased by userspace (CRDA) from our wireless-regdb.
|
||||
* If a channel is enabled but the country code indicates it should
|
||||
* be disabled we disable the channel and re-enable it upon disassociation.
|
||||
*/
|
||||
enum nl80211_reg_initiator {
|
||||
NL80211_REGDOM_SET_BY_CORE,
|
||||
|
|
@ -1476,7 +1578,8 @@ enum nl80211_mntr_flags {
|
|||
/**
|
||||
* enum nl80211_meshconf_params - mesh configuration parameters
|
||||
*
|
||||
* Mesh configuration parameters
|
||||
* Mesh configuration parameters. These can be changed while the mesh is
|
||||
* active.
|
||||
*
|
||||
* @__NL80211_MESHCONF_INVALID: internal use
|
||||
*
|
||||
|
|
@ -1525,6 +1628,9 @@ enum nl80211_mntr_flags {
|
|||
*
|
||||
* @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not
|
||||
*
|
||||
* @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a
|
||||
* source mesh point for path selection elements.
|
||||
*
|
||||
* @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
|
||||
*
|
||||
* @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
|
||||
|
|
@ -1545,12 +1651,46 @@ enum nl80211_meshconf_params {
|
|||
NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
|
||||
NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
|
||||
NL80211_MESHCONF_HWMP_ROOTMODE,
|
||||
NL80211_MESHCONF_ELEMENT_TTL,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MESHCONF_ATTR_AFTER_LAST,
|
||||
NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_mesh_setup_params - mesh setup parameters
|
||||
*
|
||||
* Mesh setup parameters. These are used to start/join a mesh and cannot be
|
||||
* changed while the mesh is active.
|
||||
*
|
||||
* @__NL80211_MESH_SETUP_INVALID: Internal use
|
||||
*
|
||||
* @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a
|
||||
* vendor specific path selection algorithm or disable it to use the default
|
||||
* HWMP.
|
||||
*
|
||||
* @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a
|
||||
* vendor specific path metric or disable it to use the default Airtime
|
||||
* metric.
|
||||
*
|
||||
* @NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE: A vendor specific information
|
||||
* element that vendors will use to identify the path selection methods and
|
||||
* metrics in use.
|
||||
*
|
||||
* @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
|
||||
*/
|
||||
enum nl80211_mesh_setup_params {
|
||||
__NL80211_MESH_SETUP_INVALID,
|
||||
NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL,
|
||||
NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC,
|
||||
NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MESH_SETUP_ATTR_AFTER_LAST,
|
||||
NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_txq_attr - TX queue parameter attributes
|
||||
* @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved
|
||||
|
|
@ -1708,6 +1848,23 @@ enum nl80211_wpa_versions {
|
|||
NL80211_WPA_VERSION_2 = 1 << 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_key_default_types - key default types
|
||||
* @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid
|
||||
* @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default
|
||||
* unicast key
|
||||
* @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default
|
||||
* multicast key
|
||||
* @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types
|
||||
*/
|
||||
enum nl80211_key_default_types {
|
||||
__NL80211_KEY_DEFAULT_TYPE_INVALID,
|
||||
NL80211_KEY_DEFAULT_TYPE_UNICAST,
|
||||
NL80211_KEY_DEFAULT_TYPE_MULTICAST,
|
||||
|
||||
NUM_NL80211_KEY_DEFAULT_TYPES
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_key_attributes - key attributes
|
||||
* @__NL80211_KEY_INVALID: invalid
|
||||
|
|
@ -1724,6 +1881,9 @@ enum nl80211_wpa_versions {
|
|||
* @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not
|
||||
* specified the default depends on whether a MAC address was
|
||||
* given with the command using the key or not (u32)
|
||||
* @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
|
||||
* attributes, specifying what a key should be set as default as.
|
||||
* See &enum nl80211_key_default_types.
|
||||
* @__NL80211_KEY_AFTER_LAST: internal
|
||||
* @NL80211_KEY_MAX: highest key attribute
|
||||
*/
|
||||
|
|
@ -1736,6 +1896,7 @@ enum nl80211_key_attributes {
|
|||
NL80211_KEY_DEFAULT,
|
||||
NL80211_KEY_DEFAULT_MGMT,
|
||||
NL80211_KEY_TYPE,
|
||||
NL80211_KEY_DEFAULT_TYPES,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_KEY_AFTER_LAST,
|
||||
|
|
@ -1786,6 +1947,8 @@ enum nl80211_ps_state {
|
|||
* the minimum amount the RSSI level must change after an event before a
|
||||
* new event may be issued (to reduce effects of RSSI oscillation).
|
||||
* @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event
|
||||
* @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many
|
||||
* consecutive packets were not acknowledged by the peer
|
||||
* @__NL80211_ATTR_CQM_AFTER_LAST: internal
|
||||
* @NL80211_ATTR_CQM_MAX: highest key attribute
|
||||
*/
|
||||
|
|
@ -1794,6 +1957,7 @@ enum nl80211_attr_cqm {
|
|||
NL80211_ATTR_CQM_RSSI_THOLD,
|
||||
NL80211_ATTR_CQM_RSSI_HYST,
|
||||
NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT,
|
||||
NL80211_ATTR_CQM_PKT_LOSS_EVENT,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_ATTR_CQM_AFTER_LAST,
|
||||
|
|
|
|||
|
|
@ -14,22 +14,14 @@
|
|||
* may be used to reset the timeout - for code which intentionally
|
||||
* disables interrupts for a long time. This call is stateless.
|
||||
*/
|
||||
#ifdef ARCH_HAS_NMI_WATCHDOG
|
||||
#if defined(ARCH_HAS_NMI_WATCHDOG) || defined(CONFIG_HARDLOCKUP_DETECTOR)
|
||||
#include <asm/nmi.h>
|
||||
extern void touch_nmi_watchdog(void);
|
||||
extern void acpi_nmi_disable(void);
|
||||
extern void acpi_nmi_enable(void);
|
||||
#else
|
||||
#ifndef CONFIG_HARDLOCKUP_DETECTOR
|
||||
static inline void touch_nmi_watchdog(void)
|
||||
{
|
||||
touch_softlockup_watchdog();
|
||||
}
|
||||
#else
|
||||
extern void touch_nmi_watchdog(void);
|
||||
#endif
|
||||
static inline void acpi_nmi_disable(void) { }
|
||||
static inline void acpi_nmi_enable(void) { }
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -215,8 +215,9 @@ struct perf_event_attr {
|
|||
*/
|
||||
precise_ip : 2, /* skid constraint */
|
||||
mmap_data : 1, /* non-exec mmap data */
|
||||
sample_id_all : 1, /* sample_type all events */
|
||||
|
||||
__reserved_1 : 46;
|
||||
__reserved_1 : 45;
|
||||
|
||||
union {
|
||||
__u32 wakeup_events; /* wakeup every n events */
|
||||
|
|
@ -327,6 +328,15 @@ struct perf_event_header {
|
|||
enum perf_event_type {
|
||||
|
||||
/*
|
||||
* If perf_event_attr.sample_id_all is set then all event types will
|
||||
* have the sample_type selected fields related to where/when
|
||||
* (identity) an event took place (TID, TIME, ID, CPU, STREAM_ID)
|
||||
* described in PERF_RECORD_SAMPLE below, it will be stashed just after
|
||||
* the perf_event_header and the fields already present for the existing
|
||||
* fields, i.e. at the end of the payload. That way a newer perf.data
|
||||
* file will be supported by older perf tools, with these new optional
|
||||
* fields being ignored.
|
||||
*
|
||||
* The MMAP events record the PROT_EXEC mappings so that we can
|
||||
* correlate userspace IPs to code. They have the following structure:
|
||||
*
|
||||
|
|
@ -578,6 +588,10 @@ struct perf_event;
|
|||
struct pmu {
|
||||
struct list_head entry;
|
||||
|
||||
struct device *dev;
|
||||
char *name;
|
||||
int type;
|
||||
|
||||
int * __percpu pmu_disable_count;
|
||||
struct perf_cpu_context * __percpu pmu_cpu_context;
|
||||
int task_ctx_nr;
|
||||
|
|
@ -758,6 +772,9 @@ struct perf_event {
|
|||
u64 shadow_ctx_time;
|
||||
|
||||
struct perf_event_attr attr;
|
||||
u16 header_size;
|
||||
u16 id_header_size;
|
||||
u16 read_size;
|
||||
struct hw_perf_event hw;
|
||||
|
||||
struct perf_event_context *ctx;
|
||||
|
|
@ -887,6 +904,7 @@ struct perf_cpu_context {
|
|||
int exclusive;
|
||||
struct list_head rotation_list;
|
||||
int jiffies_interval;
|
||||
struct pmu *active_pmu;
|
||||
};
|
||||
|
||||
struct perf_output_handle {
|
||||
|
|
@ -902,7 +920,7 @@ struct perf_output_handle {
|
|||
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
|
||||
extern int perf_pmu_register(struct pmu *pmu);
|
||||
extern int perf_pmu_register(struct pmu *pmu, char *name, int type);
|
||||
extern void perf_pmu_unregister(struct pmu *pmu);
|
||||
|
||||
extern int perf_num_counters(void);
|
||||
|
|
@ -969,6 +987,11 @@ extern int perf_event_overflow(struct perf_event *event, int nmi,
|
|||
struct perf_sample_data *data,
|
||||
struct pt_regs *regs);
|
||||
|
||||
static inline bool is_sampling_event(struct perf_event *event)
|
||||
{
|
||||
return event->attr.sample_period != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return 1 for a software event, 0 for a hardware event
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -77,7 +77,8 @@ static inline void device_set_run_wake(struct device *dev, bool enable)
|
|||
|
||||
static inline bool pm_runtime_suspended(struct device *dev)
|
||||
{
|
||||
return dev->power.runtime_status == RPM_SUSPENDED;
|
||||
return dev->power.runtime_status == RPM_SUSPENDED
|
||||
&& !dev->power.disable_depth;
|
||||
}
|
||||
|
||||
static inline void pm_runtime_mark_last_busy(struct device *dev)
|
||||
|
|
|
|||
|
|
@ -241,11 +241,6 @@ static inline void list_splice_init_rcu(struct list_head *list,
|
|||
#define list_first_entry_rcu(ptr, type, member) \
|
||||
list_entry_rcu((ptr)->next, type, member)
|
||||
|
||||
#define __list_for_each_rcu(pos, head) \
|
||||
for (pos = rcu_dereference_raw(list_next_rcu(head)); \
|
||||
pos != (head); \
|
||||
pos = rcu_dereference_raw(list_next_rcu((pos)))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_rcu - iterate over rcu list of given type
|
||||
* @pos: the type * to use as a loop cursor.
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@
|
|||
extern int rcutorture_runnable; /* for sysctl */
|
||||
#endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
|
||||
|
||||
#define UINT_CMP_GE(a, b) (UINT_MAX / 2 >= (a) - (b))
|
||||
#define UINT_CMP_LT(a, b) (UINT_MAX / 2 < (a) - (b))
|
||||
#define ULONG_CMP_GE(a, b) (ULONG_MAX / 2 >= (a) - (b))
|
||||
#define ULONG_CMP_LT(a, b) (ULONG_MAX / 2 < (a) - (b))
|
||||
|
||||
|
|
@ -66,7 +68,6 @@ extern void call_rcu_sched(struct rcu_head *head,
|
|||
extern void synchronize_sched(void);
|
||||
extern void rcu_barrier_bh(void);
|
||||
extern void rcu_barrier_sched(void);
|
||||
extern void synchronize_sched_expedited(void);
|
||||
extern int sched_expedited_torture_stats(char *page);
|
||||
|
||||
static inline void __rcu_read_lock_bh(void)
|
||||
|
|
@ -118,7 +119,6 @@ static inline int rcu_preempt_depth(void)
|
|||
#endif /* #else #ifdef CONFIG_PREEMPT_RCU */
|
||||
|
||||
/* Internal to kernel */
|
||||
extern void rcu_init(void);
|
||||
extern void rcu_sched_qs(int cpu);
|
||||
extern void rcu_bh_qs(int cpu);
|
||||
extern void rcu_check_callbacks(int cpu, int user);
|
||||
|
|
|
|||
|
|
@ -27,7 +27,9 @@
|
|||
|
||||
#include <linux/cache.h>
|
||||
|
||||
#define rcu_init_sched() do { } while (0)
|
||||
static inline void rcu_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TINY_RCU
|
||||
|
||||
|
|
@ -58,6 +60,11 @@ static inline void synchronize_rcu_bh_expedited(void)
|
|||
synchronize_sched();
|
||||
}
|
||||
|
||||
static inline void synchronize_sched_expedited(void)
|
||||
{
|
||||
synchronize_sched();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TINY_RCU
|
||||
|
||||
static inline void rcu_preempt_note_context_switch(void)
|
||||
|
|
@ -125,16 +132,12 @@ static inline void rcu_cpu_stall_reset(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
|
||||
extern int rcu_scheduler_active __read_mostly;
|
||||
extern void rcu_scheduler_starting(void);
|
||||
|
||||
#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
|
||||
|
||||
static inline void rcu_scheduler_starting(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
|
||||
|
||||
#endif /* __LINUX_RCUTINY_H */
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#ifndef __LINUX_RCUTREE_H
|
||||
#define __LINUX_RCUTREE_H
|
||||
|
||||
extern void rcu_init(void);
|
||||
extern void rcu_note_context_switch(int cpu);
|
||||
extern int rcu_needs_cpu(int cpu);
|
||||
extern void rcu_cpu_stall_reset(void);
|
||||
|
|
@ -47,6 +48,7 @@ static inline void exit_rcu(void)
|
|||
#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
|
||||
extern void synchronize_rcu_bh(void);
|
||||
extern void synchronize_sched_expedited(void);
|
||||
extern void synchronize_rcu_expedited(void);
|
||||
|
||||
static inline void synchronize_rcu_bh_expedited(void)
|
||||
|
|
|
|||
|
|
@ -354,37 +354,6 @@ static inline bool rfkill_blocked(struct rfkill *rfkill)
|
|||
}
|
||||
#endif /* RFKILL || RFKILL_MODULE */
|
||||
|
||||
|
||||
#ifdef CONFIG_RFKILL_LEDS
|
||||
/**
|
||||
* rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED.
|
||||
* This function might return a NULL pointer if registering of the
|
||||
* LED trigger failed. Use this as "default_trigger" for the LED.
|
||||
*/
|
||||
const char *rfkill_get_led_trigger_name(struct rfkill *rfkill);
|
||||
|
||||
/**
|
||||
* rfkill_set_led_trigger_name -- set the LED trigger name
|
||||
* @rfkill: rfkill struct
|
||||
* @name: LED trigger name
|
||||
*
|
||||
* This function sets the LED trigger name of the radio LED
|
||||
* trigger that rfkill creates. It is optional, but if called
|
||||
* must be called before rfkill_register() to be effective.
|
||||
*/
|
||||
void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name);
|
||||
#else
|
||||
static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void
|
||||
rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* RFKILL_H */
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ extern unsigned long nr_iowait_cpu(int cpu);
|
|||
extern unsigned long this_cpu_load(void);
|
||||
|
||||
|
||||
extern void calc_global_load(void);
|
||||
extern void calc_global_load(unsigned long ticks);
|
||||
|
||||
extern unsigned long get_parent_ip(unsigned long addr);
|
||||
|
||||
|
|
@ -316,6 +316,7 @@ extern int proc_dowatchdog_thresh(struct ctl_table *table, int write,
|
|||
size_t *lenp, loff_t *ppos);
|
||||
extern unsigned int softlockup_panic;
|
||||
extern int softlockup_thresh;
|
||||
void lockup_detector_init(void);
|
||||
#else
|
||||
static inline void touch_softlockup_watchdog(void)
|
||||
{
|
||||
|
|
@ -326,6 +327,9 @@ static inline void touch_softlockup_watchdog_sync(void)
|
|||
static inline void touch_all_softlockup_watchdogs(void)
|
||||
{
|
||||
}
|
||||
static inline void lockup_detector_init(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DETECT_HUNG_TASK
|
||||
|
|
@ -509,6 +513,8 @@ struct thread_group_cputimer {
|
|||
spinlock_t lock;
|
||||
};
|
||||
|
||||
struct autogroup;
|
||||
|
||||
/*
|
||||
* NOTE! "signal_struct" does not have it's own
|
||||
* locking, because a shared signal_struct always
|
||||
|
|
@ -576,6 +582,9 @@ struct signal_struct {
|
|||
|
||||
struct tty_struct *tty; /* NULL if no tty */
|
||||
|
||||
#ifdef CONFIG_SCHED_AUTOGROUP
|
||||
struct autogroup *autogroup;
|
||||
#endif
|
||||
/*
|
||||
* Cumulative resource counters for dead threads in the group,
|
||||
* and for reaped dead child processes forked by this group.
|
||||
|
|
@ -1229,13 +1238,18 @@ struct task_struct {
|
|||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
struct rcu_node *rcu_blocked_node;
|
||||
#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
struct rt_mutex *rcu_boost_mutex;
|
||||
#endif /* #ifdef CONFIG_RCU_BOOST */
|
||||
|
||||
#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
|
||||
struct sched_info sched_info;
|
||||
#endif
|
||||
|
||||
struct list_head tasks;
|
||||
#ifdef CONFIG_SMP
|
||||
struct plist_node pushable_tasks;
|
||||
#endif
|
||||
|
||||
struct mm_struct *mm, *active_mm;
|
||||
#if defined(SPLIT_RSS_COUNTING)
|
||||
|
|
@ -1759,7 +1773,8 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *
|
|||
#ifdef CONFIG_PREEMPT_RCU
|
||||
|
||||
#define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */
|
||||
#define RCU_READ_UNLOCK_NEED_QS (1 << 1) /* RCU core needs CPU response. */
|
||||
#define RCU_READ_UNLOCK_BOOSTED (1 << 1) /* boosted while in RCU read-side. */
|
||||
#define RCU_READ_UNLOCK_NEED_QS (1 << 2) /* RCU core needs CPU response. */
|
||||
|
||||
static inline void rcu_copy_process(struct task_struct *p)
|
||||
{
|
||||
|
|
@ -1767,7 +1782,10 @@ static inline void rcu_copy_process(struct task_struct *p)
|
|||
p->rcu_read_unlock_special = 0;
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
p->rcu_blocked_node = NULL;
|
||||
#endif
|
||||
#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
p->rcu_boost_mutex = NULL;
|
||||
#endif /* #ifdef CONFIG_RCU_BOOST */
|
||||
INIT_LIST_HEAD(&p->rcu_node_entry);
|
||||
}
|
||||
|
||||
|
|
@ -1872,14 +1890,11 @@ extern void sched_clock_idle_sleep_event(void);
|
|||
extern void sched_clock_idle_wakeup_event(u64 delta_ns);
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
extern void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p);
|
||||
extern void idle_task_exit(void);
|
||||
#else
|
||||
static inline void idle_task_exit(void) {}
|
||||
#endif
|
||||
|
||||
extern void sched_idle_next(void);
|
||||
|
||||
#if defined(CONFIG_NO_HZ) && defined(CONFIG_SMP)
|
||||
extern void wake_up_idle_cpu(int cpu);
|
||||
#else
|
||||
|
|
@ -1889,8 +1904,6 @@ static inline void wake_up_idle_cpu(int cpu) { }
|
|||
extern unsigned int sysctl_sched_latency;
|
||||
extern unsigned int sysctl_sched_min_granularity;
|
||||
extern unsigned int sysctl_sched_wakeup_granularity;
|
||||
extern unsigned int sysctl_sched_shares_ratelimit;
|
||||
extern unsigned int sysctl_sched_shares_thresh;
|
||||
extern unsigned int sysctl_sched_child_runs_first;
|
||||
|
||||
enum sched_tunable_scaling {
|
||||
|
|
@ -1906,6 +1919,7 @@ extern unsigned int sysctl_sched_migration_cost;
|
|||
extern unsigned int sysctl_sched_nr_migrate;
|
||||
extern unsigned int sysctl_sched_time_avg;
|
||||
extern unsigned int sysctl_timer_migration;
|
||||
extern unsigned int sysctl_sched_shares_window;
|
||||
|
||||
int sched_proc_update_handler(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *length,
|
||||
|
|
@ -1931,6 +1945,24 @@ int sched_rt_handler(struct ctl_table *table, int write,
|
|||
|
||||
extern unsigned int sysctl_sched_compat_yield;
|
||||
|
||||
#ifdef CONFIG_SCHED_AUTOGROUP
|
||||
extern unsigned int sysctl_sched_autogroup_enabled;
|
||||
|
||||
extern void sched_autogroup_create_attach(struct task_struct *p);
|
||||
extern void sched_autogroup_detach(struct task_struct *p);
|
||||
extern void sched_autogroup_fork(struct signal_struct *sig);
|
||||
extern void sched_autogroup_exit(struct signal_struct *sig);
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_file *m);
|
||||
extern int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice);
|
||||
#endif
|
||||
#else
|
||||
static inline void sched_autogroup_create_attach(struct task_struct *p) { }
|
||||
static inline void sched_autogroup_detach(struct task_struct *p) { }
|
||||
static inline void sched_autogroup_fork(struct signal_struct *sig) { }
|
||||
static inline void sched_autogroup_exit(struct signal_struct *sig) { }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
extern int rt_mutex_getprio(struct task_struct *p);
|
||||
extern void rt_mutex_setprio(struct task_struct *p, int prio);
|
||||
|
|
@ -1949,9 +1981,10 @@ extern int task_nice(const struct task_struct *p);
|
|||
extern int can_nice(const struct task_struct *p, const int nice);
|
||||
extern int task_curr(const struct task_struct *p);
|
||||
extern int idle_cpu(int cpu);
|
||||
extern int sched_setscheduler(struct task_struct *, int, struct sched_param *);
|
||||
extern int sched_setscheduler(struct task_struct *, int,
|
||||
const struct sched_param *);
|
||||
extern int sched_setscheduler_nocheck(struct task_struct *, int,
|
||||
struct sched_param *);
|
||||
const struct sched_param *);
|
||||
extern struct task_struct *idle_task(int cpu);
|
||||
extern struct task_struct *curr_task(int cpu);
|
||||
extern void set_curr_task(int cpu, struct task_struct *p);
|
||||
|
|
|
|||
|
|
@ -796,8 +796,9 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
|||
* @unix_stream_connect:
|
||||
* Check permissions before establishing a Unix domain stream connection
|
||||
* between @sock and @other.
|
||||
* @sock contains the socket structure.
|
||||
* @other contains the peer socket structure.
|
||||
* @sock contains the sock structure.
|
||||
* @other contains the peer sock structure.
|
||||
* @newsk contains the new sock structure.
|
||||
* Return 0 if permission is granted.
|
||||
* @unix_may_send:
|
||||
* Check permissions before connecting or sending datagrams from @sock to
|
||||
|
|
@ -1568,8 +1569,7 @@ struct security_operations {
|
|||
int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen);
|
||||
|
||||
#ifdef CONFIG_SECURITY_NETWORK
|
||||
int (*unix_stream_connect) (struct socket *sock,
|
||||
struct socket *other, struct sock *newsk);
|
||||
int (*unix_stream_connect) (struct sock *sock, struct sock *other, struct sock *newsk);
|
||||
int (*unix_may_send) (struct socket *sock, struct socket *other);
|
||||
|
||||
int (*socket_create) (int family, int type, int protocol, int kern);
|
||||
|
|
@ -2525,8 +2525,7 @@ static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32
|
|||
|
||||
#ifdef CONFIG_SECURITY_NETWORK
|
||||
|
||||
int security_unix_stream_connect(struct socket *sock, struct socket *other,
|
||||
struct sock *newsk);
|
||||
int security_unix_stream_connect(struct sock *sock, struct sock *other, struct sock *newsk);
|
||||
int security_unix_may_send(struct socket *sock, struct socket *other);
|
||||
int security_socket_create(int family, int type, int protocol, int kern);
|
||||
int security_socket_post_create(struct socket *sock, int family,
|
||||
|
|
@ -2567,8 +2566,8 @@ void security_tun_dev_post_create(struct sock *sk);
|
|||
int security_tun_dev_attach(struct sock *sk);
|
||||
|
||||
#else /* CONFIG_SECURITY_NETWORK */
|
||||
static inline int security_unix_stream_connect(struct socket *sock,
|
||||
struct socket *other,
|
||||
static inline int security_unix_stream_connect(struct sock *sock,
|
||||
struct sock *other,
|
||||
struct sock *newsk)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -77,6 +77,8 @@
|
|||
#define SFI_OEM_ID_SIZE 6
|
||||
#define SFI_OEM_TABLE_ID_SIZE 8
|
||||
|
||||
#define SFI_NAME_LEN 16
|
||||
|
||||
#define SFI_SYST_SEARCH_BEGIN 0x000E0000
|
||||
#define SFI_SYST_SEARCH_END 0x000FFFFF
|
||||
|
||||
|
|
@ -156,13 +158,13 @@ struct sfi_device_table_entry {
|
|||
u16 addr;
|
||||
u8 irq;
|
||||
u32 max_freq;
|
||||
char name[16];
|
||||
char name[SFI_NAME_LEN];
|
||||
} __packed;
|
||||
|
||||
struct sfi_gpio_table_entry {
|
||||
char controller_name[16];
|
||||
char controller_name[SFI_NAME_LEN];
|
||||
u16 pin_no;
|
||||
char pin_name[16];
|
||||
char pin_name[SFI_NAME_LEN];
|
||||
} __packed;
|
||||
|
||||
typedef int (*sfi_table_handler) (struct sfi_table_header *table);
|
||||
|
|
|
|||
|
|
@ -386,9 +386,10 @@ struct sk_buff {
|
|||
#else
|
||||
__u8 deliver_no_wcard:1;
|
||||
#endif
|
||||
__u8 ooo_okay:1;
|
||||
kmemcheck_bitfield_end(flags2);
|
||||
|
||||
/* 0/14 bit hole */
|
||||
/* 0/13 bit hole */
|
||||
|
||||
#ifdef CONFIG_NET_DMA
|
||||
dma_cookie_t dma_cookie;
|
||||
|
|
@ -1354,6 +1355,11 @@ static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
|
|||
}
|
||||
#endif /* NET_SKBUFF_DATA_USES_OFFSET */
|
||||
|
||||
static inline int skb_checksum_start_offset(const struct sk_buff *skb)
|
||||
{
|
||||
return skb->csum_start - skb_headroom(skb);
|
||||
}
|
||||
|
||||
static inline int skb_transport_offset(const struct sk_buff *skb)
|
||||
{
|
||||
return skb_transport_header(skb) - skb->data;
|
||||
|
|
@ -2164,8 +2170,9 @@ static inline bool skb_rx_queue_recorded(const struct sk_buff *skb)
|
|||
return skb->queue_mapping != 0;
|
||||
}
|
||||
|
||||
extern u16 skb_tx_hash(const struct net_device *dev,
|
||||
const struct sk_buff *skb);
|
||||
extern u16 __skb_tx_hash(const struct net_device *dev,
|
||||
const struct sk_buff *skb,
|
||||
unsigned int num_tx_queues);
|
||||
|
||||
#ifdef CONFIG_XFRM
|
||||
static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
|
||||
|
|
|
|||
|
|
@ -30,12 +30,10 @@ struct cred;
|
|||
#define __sockaddr_check_size(size) \
|
||||
BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage)))
|
||||
|
||||
#ifdef __KERNEL__
|
||||
# ifdef CONFIG_PROC_FS
|
||||
#ifdef CONFIG_PROC_FS
|
||||
struct seq_file;
|
||||
extern void socket_seq_show(struct seq_file *seq);
|
||||
# endif
|
||||
#endif /* __KERNEL__ */
|
||||
#endif
|
||||
|
||||
typedef unsigned short sa_family_t;
|
||||
|
||||
|
|
@ -311,7 +309,6 @@ struct ucred {
|
|||
/* IPX options */
|
||||
#define IPX_TYPE 1
|
||||
|
||||
#ifdef __KERNEL__
|
||||
extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);
|
||||
|
||||
extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
|
||||
|
|
@ -333,6 +330,5 @@ struct timespec;
|
|||
|
||||
extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
|
||||
unsigned int flags, struct timespec *timeout);
|
||||
#endif
|
||||
#endif /* not kernel and not glibc */
|
||||
#endif /* _LINUX_SOCKET_H */
|
||||
|
|
|
|||
|
|
@ -55,6 +55,10 @@ struct ssb_sprom {
|
|||
u8 tri5gl; /* 5.2GHz TX isolation */
|
||||
u8 tri5g; /* 5.3GHz TX isolation */
|
||||
u8 tri5gh; /* 5.8GHz TX isolation */
|
||||
u8 txpid2g[4]; /* 2GHz TX power index */
|
||||
u8 txpid5gl[4]; /* 4.9 - 5.1GHz TX power index */
|
||||
u8 txpid5g[4]; /* 5.1 - 5.5GHz TX power index */
|
||||
u8 txpid5gh[4]; /* 5.5 - ...GHz TX power index */
|
||||
u8 rxpo2g; /* 2GHz RX power offset */
|
||||
u8 rxpo5g; /* 5GHz RX power offset */
|
||||
u8 rssisav2g; /* 2GHz RSSI params */
|
||||
|
|
|
|||
|
|
@ -96,16 +96,21 @@ static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
extern char * nvram_get(const char *name);
|
||||
#ifdef CONFIG_BCM47XX
|
||||
#include <asm/mach-bcm47xx/nvram.h>
|
||||
/* Get the device MAC address */
|
||||
static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
|
||||
{
|
||||
#ifdef CONFIG_BCM47XX
|
||||
char *res = nvram_get("et0macaddr");
|
||||
if (res)
|
||||
memcpy(macaddr, res, 6);
|
||||
#endif
|
||||
char buf[20];
|
||||
if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0)
|
||||
return;
|
||||
nvram_parse_macaddr(buf, macaddr);
|
||||
}
|
||||
#else
|
||||
static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev,
|
||||
struct pci_dev *pdev);
|
||||
|
|
|
|||
|
|
@ -299,6 +299,46 @@
|
|||
#define SSB_SPROM4_AGAIN2_SHIFT 0
|
||||
#define SSB_SPROM4_AGAIN3 0xFF00 /* Antenna 3 */
|
||||
#define SSB_SPROM4_AGAIN3_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID2G01 0x0062 /* TX Power Index 2GHz */
|
||||
#define SSB_SPROM4_TXPID2G0 0x00FF
|
||||
#define SSB_SPROM4_TXPID2G0_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID2G1 0xFF00
|
||||
#define SSB_SPROM4_TXPID2G1_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID2G23 0x0064 /* TX Power Index 2GHz */
|
||||
#define SSB_SPROM4_TXPID2G2 0x00FF
|
||||
#define SSB_SPROM4_TXPID2G2_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID2G3 0xFF00
|
||||
#define SSB_SPROM4_TXPID2G3_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID5G01 0x0066 /* TX Power Index 5GHz middle subband */
|
||||
#define SSB_SPROM4_TXPID5G0 0x00FF
|
||||
#define SSB_SPROM4_TXPID5G0_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID5G1 0xFF00
|
||||
#define SSB_SPROM4_TXPID5G1_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID5G23 0x0068 /* TX Power Index 5GHz middle subband */
|
||||
#define SSB_SPROM4_TXPID5G2 0x00FF
|
||||
#define SSB_SPROM4_TXPID5G2_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID5G3 0xFF00
|
||||
#define SSB_SPROM4_TXPID5G3_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID5GL01 0x006A /* TX Power Index 5GHz low subband */
|
||||
#define SSB_SPROM4_TXPID5GL0 0x00FF
|
||||
#define SSB_SPROM4_TXPID5GL0_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID5GL1 0xFF00
|
||||
#define SSB_SPROM4_TXPID5GL1_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID5GL23 0x006C /* TX Power Index 5GHz low subband */
|
||||
#define SSB_SPROM4_TXPID5GL2 0x00FF
|
||||
#define SSB_SPROM4_TXPID5GL2_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID5GL3 0xFF00
|
||||
#define SSB_SPROM4_TXPID5GL3_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID5GH01 0x006E /* TX Power Index 5GHz high subband */
|
||||
#define SSB_SPROM4_TXPID5GH0 0x00FF
|
||||
#define SSB_SPROM4_TXPID5GH0_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID5GH1 0xFF00
|
||||
#define SSB_SPROM4_TXPID5GH1_SHIFT 8
|
||||
#define SSB_SPROM4_TXPID5GH23 0x0070 /* TX Power Index 5GHz high subband */
|
||||
#define SSB_SPROM4_TXPID5GH2 0x00FF
|
||||
#define SSB_SPROM4_TXPID5GH2_SHIFT 0
|
||||
#define SSB_SPROM4_TXPID5GH3 0xFF00
|
||||
#define SSB_SPROM4_TXPID5GH3_SHIFT 8
|
||||
#define SSB_SPROM4_MAXP_BG 0x0080 /* Max Power BG in path 1 */
|
||||
#define SSB_SPROM4_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */
|
||||
#define SSB_SPROM4_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define __LINUX_STACKTRACE_H
|
||||
|
||||
struct task_struct;
|
||||
struct pt_regs;
|
||||
|
||||
#ifdef CONFIG_STACKTRACE
|
||||
struct task_struct;
|
||||
|
|
@ -13,7 +14,8 @@ struct stack_trace {
|
|||
};
|
||||
|
||||
extern void save_stack_trace(struct stack_trace *trace);
|
||||
extern void save_stack_trace_bp(struct stack_trace *trace, unsigned long bp);
|
||||
extern void save_stack_trace_regs(struct stack_trace *trace,
|
||||
struct pt_regs *regs);
|
||||
extern void save_stack_trace_tsk(struct task_struct *tsk,
|
||||
struct stack_trace *trace);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@ struct plat_stmmacenet_data {
|
|||
int pmt;
|
||||
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
||||
void (*bus_setup)(void __iomem *ioaddr);
|
||||
#ifdef CONFIG_STM_DRIVERS
|
||||
struct stm_pad_config *pad_config;
|
||||
#endif
|
||||
int (*init)(struct platform_device *pdev);
|
||||
void (*exit)(struct platform_device *pdev);
|
||||
void *custom_cfg;
|
||||
void *bsp_priv;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -127,8 +127,6 @@ extern struct trace_event_functions exit_syscall_print_funcs;
|
|||
#define SYSCALL_TRACE_ENTER_EVENT(sname) \
|
||||
static struct syscall_metadata \
|
||||
__attribute__((__aligned__(4))) __syscall_meta_##sname; \
|
||||
static struct ftrace_event_call \
|
||||
__attribute__((__aligned__(4))) event_enter_##sname; \
|
||||
static struct ftrace_event_call __used \
|
||||
__attribute__((__aligned__(4))) \
|
||||
__attribute__((section("_ftrace_events"))) \
|
||||
|
|
@ -137,13 +135,12 @@ extern struct trace_event_functions exit_syscall_print_funcs;
|
|||
.class = &event_class_syscall_enter, \
|
||||
.event.funcs = &enter_syscall_print_funcs, \
|
||||
.data = (void *)&__syscall_meta_##sname,\
|
||||
}
|
||||
}; \
|
||||
__TRACE_EVENT_FLAGS(enter_##sname, TRACE_EVENT_FL_CAP_ANY)
|
||||
|
||||
#define SYSCALL_TRACE_EXIT_EVENT(sname) \
|
||||
static struct syscall_metadata \
|
||||
__attribute__((__aligned__(4))) __syscall_meta_##sname; \
|
||||
static struct ftrace_event_call \
|
||||
__attribute__((__aligned__(4))) event_exit_##sname; \
|
||||
static struct ftrace_event_call __used \
|
||||
__attribute__((__aligned__(4))) \
|
||||
__attribute__((section("_ftrace_events"))) \
|
||||
|
|
@ -152,7 +149,8 @@ extern struct trace_event_functions exit_syscall_print_funcs;
|
|||
.class = &event_class_syscall_exit, \
|
||||
.event.funcs = &exit_syscall_print_funcs, \
|
||||
.data = (void *)&__syscall_meta_##sname,\
|
||||
}
|
||||
}; \
|
||||
__TRACE_EVENT_FLAGS(exit_##sname, TRACE_EVENT_FL_CAP_ANY)
|
||||
|
||||
#define SYSCALL_METADATA(sname, nb) \
|
||||
SYSCALL_TRACE_ENTER_EVENT(sname); \
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#define TASKSTATS_VERSION 7
|
||||
#define TASKSTATS_VERSION 8
|
||||
#define TS_COMM_LEN 32 /* should be >= TASK_COMM_LEN
|
||||
* in linux/sched.h */
|
||||
|
||||
|
|
@ -188,6 +188,7 @@ enum {
|
|||
TASKSTATS_TYPE_STATS, /* taskstats structure */
|
||||
TASKSTATS_TYPE_AGGR_PID, /* contains pid + stats */
|
||||
TASKSTATS_TYPE_AGGR_TGID, /* contains tgid + stats */
|
||||
TASKSTATS_TYPE_NULL, /* contains nothing */
|
||||
__TASKSTATS_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ struct timer_list {
|
|||
int slack;
|
||||
|
||||
#ifdef CONFIG_TIMER_STATS
|
||||
int start_pid;
|
||||
void *start_site;
|
||||
char start_comm[16];
|
||||
int start_pid;
|
||||
#endif
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
struct lockdep_map lockdep_map;
|
||||
|
|
@ -48,12 +48,38 @@ extern struct tvec_base boot_tvec_bases;
|
|||
#define __TIMER_LOCKDEP_MAP_INITIALIZER(_kn)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Note that all tvec_bases are 2 byte aligned and lower bit of
|
||||
* base in timer_list is guaranteed to be zero. Use the LSB to
|
||||
* indicate whether the timer is deferrable.
|
||||
*
|
||||
* A deferrable timer will work normally when the system is busy, but
|
||||
* will not cause a CPU to come out of idle just to service it; instead,
|
||||
* the timer will be serviced when the CPU eventually wakes up with a
|
||||
* subsequent non-deferrable timer.
|
||||
*/
|
||||
#define TBASE_DEFERRABLE_FLAG (0x1)
|
||||
|
||||
#define TIMER_INITIALIZER(_function, _expires, _data) { \
|
||||
.entry = { .prev = TIMER_ENTRY_STATIC }, \
|
||||
.function = (_function), \
|
||||
.expires = (_expires), \
|
||||
.data = (_data), \
|
||||
.base = &boot_tvec_bases, \
|
||||
.slack = -1, \
|
||||
__TIMER_LOCKDEP_MAP_INITIALIZER( \
|
||||
__FILE__ ":" __stringify(__LINE__)) \
|
||||
}
|
||||
|
||||
#define TBASE_MAKE_DEFERRED(ptr) ((struct tvec_base *) \
|
||||
((unsigned char *)(ptr) + TBASE_DEFERRABLE_FLAG))
|
||||
|
||||
#define TIMER_DEFERRED_INITIALIZER(_function, _expires, _data) {\
|
||||
.entry = { .prev = TIMER_ENTRY_STATIC }, \
|
||||
.function = (_function), \
|
||||
.expires = (_expires), \
|
||||
.data = (_data), \
|
||||
.base = TBASE_MAKE_DEFERRED(&boot_tvec_bases), \
|
||||
__TIMER_LOCKDEP_MAP_INITIALIZER( \
|
||||
__FILE__ ":" __stringify(__LINE__)) \
|
||||
}
|
||||
|
|
@ -248,11 +274,11 @@ static inline void timer_stats_timer_clear_start_info(struct timer_list *timer)
|
|||
|
||||
extern void add_timer(struct timer_list *timer);
|
||||
|
||||
extern int try_to_del_timer_sync(struct timer_list *timer);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
extern int try_to_del_timer_sync(struct timer_list *timer);
|
||||
extern int del_timer_sync(struct timer_list *timer);
|
||||
#else
|
||||
# define try_to_del_timer_sync(t) del_timer(t)
|
||||
# define del_timer_sync(t) del_timer(t)
|
||||
#endif
|
||||
|
||||
|
|
|
|||
50
include/linux/timerqueue.h
Normal file
50
include/linux/timerqueue.h
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#ifndef _LINUX_TIMERQUEUE_H
|
||||
#define _LINUX_TIMERQUEUE_H
|
||||
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/ktime.h>
|
||||
|
||||
|
||||
struct timerqueue_node {
|
||||
struct rb_node node;
|
||||
ktime_t expires;
|
||||
};
|
||||
|
||||
struct timerqueue_head {
|
||||
struct rb_root head;
|
||||
struct timerqueue_node *next;
|
||||
};
|
||||
|
||||
|
||||
extern void timerqueue_add(struct timerqueue_head *head,
|
||||
struct timerqueue_node *node);
|
||||
extern void timerqueue_del(struct timerqueue_head *head,
|
||||
struct timerqueue_node *node);
|
||||
extern struct timerqueue_node *timerqueue_iterate_next(
|
||||
struct timerqueue_node *node);
|
||||
|
||||
/**
|
||||
* timerqueue_getnext - Returns the timer with the earlies expiration time
|
||||
*
|
||||
* @head: head of timerqueue
|
||||
*
|
||||
* Returns a pointer to the timer node that has the
|
||||
* earliest expiration time.
|
||||
*/
|
||||
static inline
|
||||
struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head)
|
||||
{
|
||||
return head->next;
|
||||
}
|
||||
|
||||
static inline void timerqueue_init(struct timerqueue_node *node)
|
||||
{
|
||||
RB_CLEAR_NODE(&node->node);
|
||||
}
|
||||
|
||||
static inline void timerqueue_init_head(struct timerqueue_head *head)
|
||||
{
|
||||
head->head = RB_ROOT;
|
||||
head->next = NULL;
|
||||
}
|
||||
#endif /* _LINUX_TIMERQUEUE_H */
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* include/linux/tipc.h: Include file for TIPC socket interface
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2003-2006, Ericsson AB
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* All rights reserved.
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
/*
|
||||
* TIPC addressing primitives
|
||||
*/
|
||||
|
||||
|
||||
struct tipc_portid {
|
||||
__u32 ref;
|
||||
__u32 node;
|
||||
|
|
@ -89,7 +89,7 @@ static inline unsigned int tipc_node(__u32 addr)
|
|||
#define TIPC_TOP_SRV 1 /* topology service name type */
|
||||
#define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */
|
||||
|
||||
/*
|
||||
/*
|
||||
* Publication scopes when binding port names and port name sequences
|
||||
*/
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ static inline unsigned int tipc_node(__u32 addr)
|
|||
#define TIPC_HIGH_IMPORTANCE 2
|
||||
#define TIPC_CRITICAL_IMPORTANCE 3
|
||||
|
||||
/*
|
||||
/*
|
||||
* Msg rejection/connection shutdown reasons
|
||||
*/
|
||||
|
||||
|
|
@ -127,9 +127,9 @@ static inline unsigned int tipc_node(__u32 addr)
|
|||
* TIPC topology subscription service definitions
|
||||
*/
|
||||
|
||||
#define TIPC_SUB_PORTS 0x01 /* filter for port availability */
|
||||
#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */
|
||||
#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */
|
||||
#define TIPC_SUB_PORTS 0x01 /* filter for port availability */
|
||||
#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */
|
||||
#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */
|
||||
#if 0
|
||||
/* The following filter options are not currently implemented */
|
||||
#define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */
|
||||
|
|
@ -137,12 +137,12 @@ static inline unsigned int tipc_node(__u32 addr)
|
|||
#define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */
|
||||
#endif
|
||||
|
||||
#define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */
|
||||
#define TIPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */
|
||||
|
||||
struct tipc_subscr {
|
||||
struct tipc_name_seq seq; /* name sequence of interest */
|
||||
__u32 timeout; /* subscription duration (in ms) */
|
||||
__u32 filter; /* bitmask of filter options */
|
||||
__u32 filter; /* bitmask of filter options */
|
||||
char usr_handle[8]; /* available for subscriber use */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* include/linux/tipc_config.h: Include file for TIPC configuration interface
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2003-2006, Ericsson AB
|
||||
* Copyright (c) 2005-2007, Wind River Systems
|
||||
* All rights reserved.
|
||||
|
|
@ -54,19 +54,19 @@
|
|||
* which specify parameters or results for the operation.
|
||||
*
|
||||
* For many operations, the request and reply messages have a fixed number
|
||||
* of TLVs (usually zero or one); however, some reply messages may return
|
||||
* of TLVs (usually zero or one); however, some reply messages may return
|
||||
* a variable number of TLVs. A failed request is denoted by the presence
|
||||
* of an "error string" TLV in the reply message instead of the TLV(s) the
|
||||
* reply should contain if the request succeeds.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* Public commands:
|
||||
* May be issued by any process.
|
||||
* Accepted by own node, or by remote node only if remote management enabled.
|
||||
* Accepted by own node, or by remote node only if remote management enabled.
|
||||
*/
|
||||
|
||||
#define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */
|
||||
|
||||
#define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */
|
||||
#define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */
|
||||
#define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */
|
||||
#define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */
|
||||
|
|
@ -83,21 +83,21 @@
|
|||
#define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */
|
||||
#endif
|
||||
|
||||
/*
|
||||
/*
|
||||
* Protected commands:
|
||||
* May only be issued by "network administration capable" process.
|
||||
* Accepted by own node, or by remote node only if remote management enabled
|
||||
* and this node is zone manager.
|
||||
* and this node is zone manager.
|
||||
*/
|
||||
|
||||
#define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */
|
||||
#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* obsoleted */
|
||||
#define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* obsoleted */
|
||||
#define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */
|
||||
|
||||
#define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */
|
||||
|
|
@ -116,10 +116,10 @@
|
|||
#define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */
|
||||
#endif
|
||||
|
||||
/*
|
||||
/*
|
||||
* Private commands:
|
||||
* May only be issued by "network administration capable" process.
|
||||
* Accepted by own node only; cannot be used on a remote node.
|
||||
* Accepted by own node only; cannot be used on a remote node.
|
||||
*/
|
||||
|
||||
#define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */
|
||||
|
|
@ -130,10 +130,10 @@
|
|||
#define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */
|
||||
#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* obsoleted */
|
||||
#define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* obsoleted */
|
||||
#define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */
|
||||
|
||||
/*
|
||||
|
|
@ -156,20 +156,20 @@
|
|||
#define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */
|
||||
|
||||
#define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */
|
||||
#define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */
|
||||
#define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */
|
||||
#define TIPC_TLV_MEDIA_NAME 18 /* char[TIPC_MAX_MEDIA_NAME] */
|
||||
#define TIPC_TLV_BEARER_NAME 19 /* char[TIPC_MAX_BEARER_NAME] */
|
||||
#define TIPC_TLV_LINK_NAME 20 /* char[TIPC_MAX_LINK_NAME] */
|
||||
#define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */
|
||||
#define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */
|
||||
#define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */
|
||||
#define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */
|
||||
#define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */
|
||||
#define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */
|
||||
#define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */
|
||||
#define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */
|
||||
#define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */
|
||||
|
||||
/*
|
||||
* Maximum sizes of TIPC bearer-related names (including terminating NUL)
|
||||
*/
|
||||
*/
|
||||
|
||||
#define TIPC_MAX_MEDIA_NAME 16 /* format = media */
|
||||
#define TIPC_MAX_IF_NAME 16 /* format = interface */
|
||||
|
|
@ -234,7 +234,7 @@ struct tipc_name_table_query {
|
|||
};
|
||||
|
||||
/*
|
||||
* The error string TLV is a null-terminated string describing the cause
|
||||
* The error string TLV is a null-terminated string describing the cause
|
||||
* of the request failure. To simplify error processing (and to save space)
|
||||
* the first character of the string can be a special error code character
|
||||
* (lying by the range 0x80 to 0xFF) which represents a pre-defined reason.
|
||||
|
|
@ -254,16 +254,11 @@ struct tipc_link_create {
|
|||
struct tipc_media_addr peer_addr;
|
||||
char bearer_name[TIPC_MAX_BEARER_NAME];
|
||||
};
|
||||
|
||||
struct tipc_route_info {
|
||||
__u32 dest;
|
||||
__u32 router;
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A TLV consists of a descriptor, followed by the TLV value.
|
||||
* TLV descriptor fields are stored in network byte order;
|
||||
* TLV descriptor fields are stored in network byte order;
|
||||
* TLV values must also be stored in network byte order (where applicable).
|
||||
* TLV descriptors must be aligned to addresses which are multiple of 4,
|
||||
* so up to 3 bytes of padding may exist at the end of the TLV value area.
|
||||
|
|
@ -299,7 +294,7 @@ static inline int TLV_OK(const void *tlv, __u16 space)
|
|||
|
||||
static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)
|
||||
{
|
||||
return TLV_OK(tlv, space) &&
|
||||
return TLV_OK(tlv, space) &&
|
||||
(ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type);
|
||||
}
|
||||
|
||||
|
|
@ -318,7 +313,7 @@ static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
|
|||
}
|
||||
|
||||
/*
|
||||
* A TLV list descriptor simplifies processing of messages
|
||||
* A TLV list descriptor simplifies processing of messages
|
||||
* containing multiple TLVs.
|
||||
*/
|
||||
|
||||
|
|
@ -327,15 +322,15 @@ struct tlv_list_desc {
|
|||
__u32 tlv_space; /* # bytes from curr TLV to list end */
|
||||
};
|
||||
|
||||
static inline void TLV_LIST_INIT(struct tlv_list_desc *list,
|
||||
static inline void TLV_LIST_INIT(struct tlv_list_desc *list,
|
||||
void *data, __u32 space)
|
||||
{
|
||||
list->tlv_ptr = (struct tlv_desc *)data;
|
||||
list->tlv_space = space;
|
||||
}
|
||||
|
||||
|
||||
static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list)
|
||||
{
|
||||
{
|
||||
return (list->tlv_space == 0);
|
||||
}
|
||||
|
||||
|
|
@ -353,7 +348,7 @@ static inline void TLV_LIST_STEP(struct tlv_list_desc *list)
|
|||
{
|
||||
__u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len));
|
||||
|
||||
list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
|
||||
list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
|
||||
list->tlv_space -= tlv_space;
|
||||
}
|
||||
|
||||
|
|
@ -377,15 +372,14 @@ struct tipc_genlmsghdr {
|
|||
#define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
|
||||
|
||||
/*
|
||||
* Configuration messages exchanged via TIPC sockets use the TIPC configuration
|
||||
* message header, which is defined below. This structure is analogous
|
||||
* to the Netlink message header, but fields are stored in network byte order
|
||||
* and no padding is permitted between the header and the message data
|
||||
* Configuration messages exchanged via TIPC sockets use the TIPC configuration
|
||||
* message header, which is defined below. This structure is analogous
|
||||
* to the Netlink message header, but fields are stored in network byte order
|
||||
* and no padding is permitted between the header and the message data
|
||||
* that follows.
|
||||
*/
|
||||
|
||||
struct tipc_cfg_msg_hdr
|
||||
{
|
||||
struct tipc_cfg_msg_hdr {
|
||||
__be32 tcm_len; /* Message length (including header) */
|
||||
__be16 tcm_type; /* Command type */
|
||||
__be16 tcm_flags; /* Additional flags */
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin,
|
|||
|
||||
#define TP_PROTO(args...) args
|
||||
#define TP_ARGS(args...) args
|
||||
#define TP_CONDITION(args...) args
|
||||
|
||||
#ifdef CONFIG_TRACEPOINTS
|
||||
|
||||
|
|
@ -119,12 +120,14 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin,
|
|||
* as "(void *, void)". The DECLARE_TRACE_NOARGS() will pass in just
|
||||
* "void *data", where as the DECLARE_TRACE() will pass in "void *data, proto".
|
||||
*/
|
||||
#define __DO_TRACE(tp, proto, args) \
|
||||
#define __DO_TRACE(tp, proto, args, cond) \
|
||||
do { \
|
||||
struct tracepoint_func *it_func_ptr; \
|
||||
void *it_func; \
|
||||
void *__data; \
|
||||
\
|
||||
if (!(cond)) \
|
||||
return; \
|
||||
rcu_read_lock_sched_notrace(); \
|
||||
it_func_ptr = rcu_dereference_sched((tp)->funcs); \
|
||||
if (it_func_ptr) { \
|
||||
|
|
@ -142,7 +145,7 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin,
|
|||
* not add unwanted padding between the beginning of the section and the
|
||||
* structure. Force alignment to the same alignment as the section start.
|
||||
*/
|
||||
#define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \
|
||||
#define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
|
||||
extern struct tracepoint __tracepoint_##name; \
|
||||
static inline void trace_##name(proto) \
|
||||
{ \
|
||||
|
|
@ -151,7 +154,8 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin,
|
|||
do_trace: \
|
||||
__DO_TRACE(&__tracepoint_##name, \
|
||||
TP_PROTO(data_proto), \
|
||||
TP_ARGS(data_args)); \
|
||||
TP_ARGS(data_args), \
|
||||
TP_CONDITION(cond)); \
|
||||
} \
|
||||
static inline int \
|
||||
register_trace_##name(void (*probe)(data_proto), void *data) \
|
||||
|
|
@ -186,7 +190,7 @@ do_trace: \
|
|||
EXPORT_SYMBOL(__tracepoint_##name)
|
||||
|
||||
#else /* !CONFIG_TRACEPOINTS */
|
||||
#define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \
|
||||
#define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
|
||||
static inline void trace_##name(proto) \
|
||||
{ } \
|
||||
static inline int \
|
||||
|
|
@ -227,13 +231,20 @@ do_trace: \
|
|||
* "void *__data, proto" as the callback prototype.
|
||||
*/
|
||||
#define DECLARE_TRACE_NOARGS(name) \
|
||||
__DECLARE_TRACE(name, void, , void *__data, __data)
|
||||
__DECLARE_TRACE(name, void, , 1, void *__data, __data)
|
||||
|
||||
#define DECLARE_TRACE(name, proto, args) \
|
||||
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \
|
||||
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), 1, \
|
||||
PARAMS(void *__data, proto), \
|
||||
PARAMS(__data, args))
|
||||
|
||||
#define DECLARE_TRACE_CONDITION(name, proto, args, cond) \
|
||||
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), PARAMS(cond), \
|
||||
PARAMS(void *__data, proto), \
|
||||
PARAMS(__data, args))
|
||||
|
||||
#define TRACE_EVENT_FLAGS(event, flag)
|
||||
|
||||
#endif /* DECLARE_TRACE */
|
||||
|
||||
#ifndef TRACE_EVENT
|
||||
|
|
@ -347,11 +358,21 @@ do_trace: \
|
|||
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
|
||||
#define DEFINE_EVENT_PRINT(template, name, proto, args, print) \
|
||||
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
|
||||
#define DEFINE_EVENT_CONDITION(template, name, proto, \
|
||||
args, cond) \
|
||||
DECLARE_TRACE_CONDITION(name, PARAMS(proto), \
|
||||
PARAMS(args), PARAMS(cond))
|
||||
|
||||
#define TRACE_EVENT(name, proto, args, struct, assign, print) \
|
||||
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
|
||||
#define TRACE_EVENT_FN(name, proto, args, struct, \
|
||||
assign, print, reg, unreg) \
|
||||
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
|
||||
#define TRACE_EVENT_CONDITION(name, proto, args, cond, \
|
||||
struct, assign, print) \
|
||||
DECLARE_TRACE_CONDITION(name, PARAMS(proto), \
|
||||
PARAMS(args), PARAMS(cond))
|
||||
|
||||
#define TRACE_EVENT_FLAGS(event, flag)
|
||||
|
||||
#endif /* ifdef TRACE_EVENT (see note above) */
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
|
||||
struct __una_u16 { u16 x __attribute__((packed)); };
|
||||
struct __una_u32 { u32 x __attribute__((packed)); };
|
||||
struct __una_u64 { u64 x __attribute__((packed)); };
|
||||
struct __una_u16 { u16 x; } __attribute__((packed));
|
||||
struct __una_u32 { u32 x; } __attribute__((packed));
|
||||
struct __una_u64 { u64 x; } __attribute__((packed));
|
||||
|
||||
static inline u16 __get_unaligned_cpu16(const void *p)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -97,6 +97,12 @@ struct driver_info {
|
|||
|
||||
#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */
|
||||
|
||||
/*
|
||||
* Indicates to usbnet, that USB driver accumulates multiple IP packets.
|
||||
* Affects statistic (counters) and short packet handling.
|
||||
*/
|
||||
#define FLAG_MULTI_PACKET 0x1000
|
||||
|
||||
/* init device ... can sleep, or cause probe() failure */
|
||||
int (*bind)(struct usbnet *, struct usb_interface *);
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,21 @@ struct via_port_cfg {
|
|||
u8 ioport_index;
|
||||
};
|
||||
|
||||
/*
|
||||
* Allow subdevs to register suspend/resume hooks.
|
||||
*/
|
||||
#ifdef CONFIG_PM
|
||||
struct viafb_pm_hooks {
|
||||
struct list_head list;
|
||||
int (*suspend)(void *private);
|
||||
int (*resume)(void *private);
|
||||
void *private;
|
||||
};
|
||||
|
||||
void viafb_pm_register(struct viafb_pm_hooks *hooks);
|
||||
void viafb_pm_unregister(struct viafb_pm_hooks *hooks);
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
/*
|
||||
* This is the global viafb "device" containing stuff needed by
|
||||
* all subdevs.
|
||||
|
|
|
|||
|
|
@ -24,6 +24,14 @@
|
|||
#ifndef _LINUX_WL12XX_H
|
||||
#define _LINUX_WL12XX_H
|
||||
|
||||
/* The board 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_54 = 3, /* 54 MHz */
|
||||
};
|
||||
|
||||
struct wl12xx_platform_data {
|
||||
void (*set_power)(bool enable);
|
||||
/* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */
|
||||
|
|
|
|||
|
|
@ -127,12 +127,20 @@ struct execute_work {
|
|||
.timer = TIMER_INITIALIZER(NULL, 0, 0), \
|
||||
}
|
||||
|
||||
#define __DEFERRED_WORK_INITIALIZER(n, f) { \
|
||||
.work = __WORK_INITIALIZER((n).work, (f)), \
|
||||
.timer = TIMER_DEFERRED_INITIALIZER(NULL, 0, 0), \
|
||||
}
|
||||
|
||||
#define DECLARE_WORK(n, f) \
|
||||
struct work_struct n = __WORK_INITIALIZER(n, f)
|
||||
|
||||
#define DECLARE_DELAYED_WORK(n, f) \
|
||||
struct delayed_work n = __DELAYED_WORK_INITIALIZER(n, f)
|
||||
|
||||
#define DECLARE_DEFERRED_WORK(n, f) \
|
||||
struct delayed_work n = __DEFERRED_WORK_INITIALIZER(n, f)
|
||||
|
||||
/*
|
||||
* initialize a work item's function pointer
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -283,6 +283,7 @@ enum xfrm_attr_type_t {
|
|||
XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */
|
||||
XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */
|
||||
XFRMA_MARK, /* struct xfrm_mark */
|
||||
XFRMA_TFCPAD, /* __u32 */
|
||||
__XFRMA_MAX
|
||||
|
||||
#define XFRMA_MAX (__XFRMA_MAX - 1)
|
||||
|
|
|
|||
Loading…
Reference in a new issue