Merge branch 'linus' into timers/urgent
Get upstream changes so we can apply fixes against them Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
@@ -352,8 +352,7 @@ extern acpi_status acpi_pci_osc_control_set(acpi_handle handle,
|
||||
|
||||
/* Enable _OST when all relevant hotplug operations are enabled */
|
||||
#if defined(CONFIG_ACPI_HOTPLUG_CPU) && \
|
||||
(defined(CONFIG_ACPI_HOTPLUG_MEMORY) || \
|
||||
defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)) && \
|
||||
defined(CONFIG_ACPI_HOTPLUG_MEMORY) && \
|
||||
defined(CONFIG_ACPI_CONTAINER)
|
||||
#define ACPI_HOTPLUG_OST
|
||||
#endif
|
||||
|
@@ -7,6 +7,10 @@
|
||||
#ifndef _AER_H_
|
||||
#define _AER_H_
|
||||
|
||||
#define AER_NONFATAL 0
|
||||
#define AER_FATAL 1
|
||||
#define AER_CORRECTABLE 2
|
||||
|
||||
struct aer_header_log_regs {
|
||||
unsigned int dw0;
|
||||
unsigned int dw1;
|
||||
@@ -31,9 +35,9 @@ struct aer_capability_regs {
|
||||
|
||||
#if defined(CONFIG_PCIEAER)
|
||||
/* pci-e port driver needs this function to enable aer */
|
||||
extern int pci_enable_pcie_error_reporting(struct pci_dev *dev);
|
||||
extern int pci_disable_pcie_error_reporting(struct pci_dev *dev);
|
||||
extern int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
|
||||
int pci_enable_pcie_error_reporting(struct pci_dev *dev);
|
||||
int pci_disable_pcie_error_reporting(struct pci_dev *dev);
|
||||
int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
|
||||
#else
|
||||
static inline int pci_enable_pcie_error_reporting(struct pci_dev *dev)
|
||||
{
|
||||
@@ -49,11 +53,11 @@ static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void cper_print_aer(struct pci_dev *dev,
|
||||
int cper_severity, struct aer_capability_regs *aer);
|
||||
extern int cper_severity_to_aer(int cper_severity);
|
||||
extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn,
|
||||
int severity,
|
||||
struct aer_capability_regs *aer_regs);
|
||||
void cper_print_aer(struct pci_dev *dev, int cper_severity,
|
||||
struct aer_capability_regs *aer);
|
||||
int cper_severity_to_aer(int cper_severity);
|
||||
void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn,
|
||||
int severity,
|
||||
struct aer_capability_regs *aer_regs);
|
||||
#endif //_AER_H_
|
||||
|
||||
|
@@ -44,10 +44,14 @@ struct alarm {
|
||||
void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
|
||||
enum alarmtimer_restart (*function)(struct alarm *, ktime_t));
|
||||
int alarm_start(struct alarm *alarm, ktime_t start);
|
||||
int alarm_start_relative(struct alarm *alarm, ktime_t start);
|
||||
void alarm_restart(struct alarm *alarm);
|
||||
int alarm_try_to_cancel(struct alarm *alarm);
|
||||
int alarm_cancel(struct alarm *alarm);
|
||||
|
||||
u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval);
|
||||
u64 alarm_forward_now(struct alarm *alarm, ktime_t interval);
|
||||
ktime_t alarm_expires_remaining(const struct alarm *alarm);
|
||||
|
||||
/* Provide way to access the rtc device being used by alarmtimers */
|
||||
struct rtc_device *alarmtimer_get_rtcdev(void);
|
||||
|
@@ -76,11 +76,11 @@ struct pl08x_channel_data {
|
||||
* platform, all inclusive, including multiplexed channels. The available
|
||||
* physical channels will be multiplexed around these signals as they are
|
||||
* requested, just enumerate all possible channels.
|
||||
* @get_signal: request a physical signal to be used for a DMA transfer
|
||||
* @get_xfer_signal: request a physical signal to be used for a DMA transfer
|
||||
* immediately: if there is some multiplexing or similar blocking the use
|
||||
* of the channel the transfer can be denied by returning less than zero,
|
||||
* else it returns the allocated signal number
|
||||
* @put_signal: indicate to the platform that this physical signal is not
|
||||
* @put_xfer_signal: indicate to the platform that this physical signal is not
|
||||
* running any DMA transfer and multiplexing can be recycled
|
||||
* @lli_buses: buses which LLIs can be fetched from: PL08X_AHB1 | PL08X_AHB2
|
||||
* @mem_buses: buses which memory can be accessed from: PL08X_AHB1 | PL08X_AHB2
|
||||
@@ -89,8 +89,8 @@ struct pl08x_platform_data {
|
||||
const struct pl08x_channel_data *slave_channels;
|
||||
unsigned int num_slave_channels;
|
||||
struct pl08x_channel_data memcpy_channel;
|
||||
int (*get_signal)(const struct pl08x_channel_data *);
|
||||
void (*put_signal)(const struct pl08x_channel_data *, int);
|
||||
int (*get_xfer_signal)(const struct pl08x_channel_data *);
|
||||
void (*put_xfer_signal)(const struct pl08x_channel_data *, int);
|
||||
u8 lli_buses;
|
||||
u8 mem_buses;
|
||||
};
|
||||
|
@@ -182,10 +182,6 @@ async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset,
|
||||
unsigned int src_offset, size_t len,
|
||||
struct async_submit_ctl *submit);
|
||||
|
||||
struct dma_async_tx_descriptor *
|
||||
async_memset(struct page *dest, int val, unsigned int offset,
|
||||
size_t len, struct async_submit_ctl *submit);
|
||||
|
||||
struct dma_async_tx_descriptor *async_trigger_callback(struct async_submit_ctl *submit);
|
||||
|
||||
struct dma_async_tx_descriptor *
|
||||
|
@@ -103,8 +103,11 @@ extern void __audit_syscall_exit(int ret_success, long ret_value);
|
||||
extern struct filename *__audit_reusename(const __user char *uptr);
|
||||
extern void __audit_getname(struct filename *name);
|
||||
extern void audit_putname(struct filename *name);
|
||||
|
||||
#define AUDIT_INODE_PARENT 1 /* dentry represents the parent */
|
||||
#define AUDIT_INODE_HIDDEN 2 /* audit record should be hidden */
|
||||
extern void __audit_inode(struct filename *name, const struct dentry *dentry,
|
||||
unsigned int parent);
|
||||
unsigned int flags);
|
||||
extern void __audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
const unsigned char type);
|
||||
@@ -148,10 +151,22 @@ static inline void audit_getname(struct filename *name)
|
||||
if (unlikely(!audit_dummy_context()))
|
||||
__audit_getname(name);
|
||||
}
|
||||
static inline void audit_inode(struct filename *name, const struct dentry *dentry,
|
||||
static inline void audit_inode(struct filename *name,
|
||||
const struct dentry *dentry,
|
||||
unsigned int parent) {
|
||||
if (unlikely(!audit_dummy_context())) {
|
||||
unsigned int flags = 0;
|
||||
if (parent)
|
||||
flags |= AUDIT_INODE_PARENT;
|
||||
__audit_inode(name, dentry, flags);
|
||||
}
|
||||
}
|
||||
static inline void audit_inode_parent_hidden(struct filename *name,
|
||||
const struct dentry *dentry)
|
||||
{
|
||||
if (unlikely(!audit_dummy_context()))
|
||||
__audit_inode(name, dentry, parent);
|
||||
__audit_inode(name, dentry,
|
||||
AUDIT_INODE_PARENT | AUDIT_INODE_HIDDEN);
|
||||
}
|
||||
static inline void audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
@@ -311,7 +326,7 @@ static inline void audit_putname(struct filename *name)
|
||||
{ }
|
||||
static inline void __audit_inode(struct filename *name,
|
||||
const struct dentry *dentry,
|
||||
unsigned int parent)
|
||||
unsigned int flags)
|
||||
{ }
|
||||
static inline void __audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
@@ -321,6 +336,9 @@ static inline void audit_inode(struct filename *name,
|
||||
const struct dentry *dentry,
|
||||
unsigned int parent)
|
||||
{ }
|
||||
static inline void audit_inode_parent_hidden(struct filename *name,
|
||||
const struct dentry *dentry)
|
||||
{ }
|
||||
static inline void audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
const unsigned char type)
|
||||
|
@@ -114,7 +114,13 @@ static inline void backlight_update_status(struct backlight_device *bd)
|
||||
extern struct backlight_device *backlight_device_register(const char *name,
|
||||
struct device *dev, void *devdata, const struct backlight_ops *ops,
|
||||
const struct backlight_properties *props);
|
||||
extern struct backlight_device *devm_backlight_device_register(
|
||||
struct device *dev, const char *name, struct device *parent,
|
||||
void *devdata, const struct backlight_ops *ops,
|
||||
const struct backlight_properties *props);
|
||||
extern void backlight_device_unregister(struct backlight_device *bd);
|
||||
extern void devm_backlight_device_unregister(struct device *dev,
|
||||
struct backlight_device *bd);
|
||||
extern void backlight_force_update(struct backlight_device *bd,
|
||||
enum backlight_update_reason reason);
|
||||
|
||||
|
@@ -144,6 +144,7 @@ struct bcma_host_ops {
|
||||
|
||||
/* Chip IDs of PCIe devices */
|
||||
#define BCMA_CHIP_ID_BCM4313 0x4313
|
||||
#define BCMA_CHIP_ID_BCM43142 43142
|
||||
#define BCMA_CHIP_ID_BCM43224 43224
|
||||
#define BCMA_PKG_ID_BCM43224_FAB_CSM 0x8
|
||||
#define BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa
|
||||
|
@@ -330,6 +330,8 @@
|
||||
#define BCMA_CC_PMU_CAP 0x0604 /* PMU capabilities */
|
||||
#define BCMA_CC_PMU_CAP_REVISION 0x000000FF /* Revision mask */
|
||||
#define BCMA_CC_PMU_STAT 0x0608 /* PMU status */
|
||||
#define BCMA_CC_PMU_STAT_EXT_LPO_AVAIL 0x00000100
|
||||
#define BCMA_CC_PMU_STAT_WDRESET 0x00000080
|
||||
#define BCMA_CC_PMU_STAT_INTPEND 0x00000040 /* Interrupt pending */
|
||||
#define BCMA_CC_PMU_STAT_SBCLKST 0x00000030 /* Backplane clock status? */
|
||||
#define BCMA_CC_PMU_STAT_HAVEALP 0x00000008 /* ALP available */
|
||||
@@ -355,6 +357,11 @@
|
||||
#define BCMA_CC_REGCTL_DATA 0x065C
|
||||
#define BCMA_CC_PLLCTL_ADDR 0x0660
|
||||
#define BCMA_CC_PLLCTL_DATA 0x0664
|
||||
#define BCMA_CC_PMU_STRAPOPT 0x0668 /* (corerev >= 28) */
|
||||
#define BCMA_CC_PMU_XTAL_FREQ 0x066C /* (pmurev >= 10) */
|
||||
#define BCMA_CC_PMU_XTAL_FREQ_ILPCTL_MASK 0x00001FFF
|
||||
#define BCMA_CC_PMU_XTAL_FREQ_MEASURE_MASK 0x80000000
|
||||
#define BCMA_CC_PMU_XTAL_FREQ_MEASURE_SHIFT 31
|
||||
#define BCMA_CC_SPROM 0x0800 /* SPROM beginning */
|
||||
/* NAND flash MLC controller registers (corerev >= 38) */
|
||||
#define BCMA_CC_NAND_REVISION 0x0C00
|
||||
@@ -435,6 +442,23 @@
|
||||
#define BCMA_CC_PMU6_4706_PROC_NDIV_MODE_MASK 0x00000007
|
||||
#define BCMA_CC_PMU6_4706_PROC_NDIV_MODE_SHIFT 0
|
||||
|
||||
/* PMU rev 15 */
|
||||
#define BCMA_CC_PMU15_PLL_PLLCTL0 0
|
||||
#define BCMA_CC_PMU15_PLL_PC0_CLKSEL_MASK 0x00000003
|
||||
#define BCMA_CC_PMU15_PLL_PC0_CLKSEL_SHIFT 0
|
||||
#define BCMA_CC_PMU15_PLL_PC0_FREQTGT_MASK 0x003FFFFC
|
||||
#define BCMA_CC_PMU15_PLL_PC0_FREQTGT_SHIFT 2
|
||||
#define BCMA_CC_PMU15_PLL_PC0_PRESCALE_MASK 0x00C00000
|
||||
#define BCMA_CC_PMU15_PLL_PC0_PRESCALE_SHIFT 22
|
||||
#define BCMA_CC_PMU15_PLL_PC0_KPCTRL_MASK 0x07000000
|
||||
#define BCMA_CC_PMU15_PLL_PC0_KPCTRL_SHIFT 24
|
||||
#define BCMA_CC_PMU15_PLL_PC0_FCNTCTRL_MASK 0x38000000
|
||||
#define BCMA_CC_PMU15_PLL_PC0_FCNTCTRL_SHIFT 27
|
||||
#define BCMA_CC_PMU15_PLL_PC0_FDCMODE_MASK 0x40000000
|
||||
#define BCMA_CC_PMU15_PLL_PC0_FDCMODE_SHIFT 30
|
||||
#define BCMA_CC_PMU15_PLL_PC0_CTRLBIAS_MASK 0x80000000
|
||||
#define BCMA_CC_PMU15_PLL_PC0_CTRLBIAS_SHIFT 31
|
||||
|
||||
/* ALP clock on pre-PMU chips */
|
||||
#define BCMA_CC_PMU_ALP_CLOCK 20000000
|
||||
/* HT clock for systems with PMU-enabled chipcommon */
|
||||
@@ -507,6 +531,37 @@
|
||||
#define BCMA_CHIPCTL_5357_I2S_PINS_ENABLE BIT(18)
|
||||
#define BCMA_CHIPCTL_5357_I2CSPI_PINS_ENABLE BIT(19)
|
||||
|
||||
#define BCMA_RES_4314_LPLDO_PU BIT(0)
|
||||
#define BCMA_RES_4314_PMU_SLEEP_DIS BIT(1)
|
||||
#define BCMA_RES_4314_PMU_BG_PU BIT(2)
|
||||
#define BCMA_RES_4314_CBUCK_LPOM_PU BIT(3)
|
||||
#define BCMA_RES_4314_CBUCK_PFM_PU BIT(4)
|
||||
#define BCMA_RES_4314_CLDO_PU BIT(5)
|
||||
#define BCMA_RES_4314_LPLDO2_LVM BIT(6)
|
||||
#define BCMA_RES_4314_WL_PMU_PU BIT(7)
|
||||
#define BCMA_RES_4314_LNLDO_PU BIT(8)
|
||||
#define BCMA_RES_4314_LDO3P3_PU BIT(9)
|
||||
#define BCMA_RES_4314_OTP_PU BIT(10)
|
||||
#define BCMA_RES_4314_XTAL_PU BIT(11)
|
||||
#define BCMA_RES_4314_WL_PWRSW_PU BIT(12)
|
||||
#define BCMA_RES_4314_LQ_AVAIL BIT(13)
|
||||
#define BCMA_RES_4314_LOGIC_RET BIT(14)
|
||||
#define BCMA_RES_4314_MEM_SLEEP BIT(15)
|
||||
#define BCMA_RES_4314_MACPHY_RET BIT(16)
|
||||
#define BCMA_RES_4314_WL_CORE_READY BIT(17)
|
||||
#define BCMA_RES_4314_ILP_REQ BIT(18)
|
||||
#define BCMA_RES_4314_ALP_AVAIL BIT(19)
|
||||
#define BCMA_RES_4314_MISC_PWRSW_PU BIT(20)
|
||||
#define BCMA_RES_4314_SYNTH_PWRSW_PU BIT(21)
|
||||
#define BCMA_RES_4314_RX_PWRSW_PU BIT(22)
|
||||
#define BCMA_RES_4314_RADIO_PU BIT(23)
|
||||
#define BCMA_RES_4314_VCO_LDO_PU BIT(24)
|
||||
#define BCMA_RES_4314_AFE_LDO_PU BIT(25)
|
||||
#define BCMA_RES_4314_RX_LDO_PU BIT(26)
|
||||
#define BCMA_RES_4314_TX_LDO_PU BIT(27)
|
||||
#define BCMA_RES_4314_HT_AVAIL BIT(28)
|
||||
#define BCMA_RES_4314_MACPHY_CLK_AVAIL BIT(29)
|
||||
|
||||
/* Data for the PMU, if available.
|
||||
* Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
|
||||
*/
|
||||
|
@@ -97,11 +97,11 @@ static inline void *bio_data(struct bio *bio)
|
||||
* permanent PIO fall back, user is probably better off disabling highmem
|
||||
* I/O completely on that queue (see ide-dma for example)
|
||||
*/
|
||||
#define __bio_kmap_atomic(bio, idx, kmtype) \
|
||||
#define __bio_kmap_atomic(bio, idx) \
|
||||
(kmap_atomic(bio_iovec_idx((bio), (idx))->bv_page) + \
|
||||
bio_iovec_idx((bio), (idx))->bv_offset)
|
||||
|
||||
#define __bio_kunmap_atomic(addr, kmtype) kunmap_atomic(addr)
|
||||
#define __bio_kunmap_atomic(addr) kunmap_atomic(addr)
|
||||
|
||||
/*
|
||||
* merge helpers etc
|
||||
|
@@ -44,8 +44,8 @@ extern unsigned long init_bootmem_node(pg_data_t *pgdat,
|
||||
unsigned long endpfn);
|
||||
extern unsigned long init_bootmem(unsigned long addr, unsigned long memend);
|
||||
|
||||
extern unsigned long free_all_bootmem_node(pg_data_t *pgdat);
|
||||
extern unsigned long free_all_bootmem(void);
|
||||
extern void reset_all_zones_managed_pages(void);
|
||||
|
||||
extern void free_bootmem_node(pg_data_t *pgdat,
|
||||
unsigned long addr,
|
||||
|
@@ -139,6 +139,9 @@ BUFFER_FNS(Prio, prio)
|
||||
})
|
||||
#define page_has_buffers(page) PagePrivate(page)
|
||||
|
||||
void buffer_check_dirty_writeback(struct page *page,
|
||||
bool *dirty, bool *writeback);
|
||||
|
||||
/*
|
||||
* Declarations
|
||||
*/
|
||||
|
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Marc Kleine-Budde <kernel@pengutronix.de>
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CAN_PLATFORM_FLEXCAN_H
|
||||
#define __CAN_PLATFORM_FLEXCAN_H
|
||||
|
||||
/**
|
||||
* struct flexcan_platform_data - flex CAN controller platform data
|
||||
* @transceiver_enable: - called to power on/off the transceiver
|
||||
*
|
||||
*/
|
||||
struct flexcan_platform_data {
|
||||
void (*transceiver_switch)(int enable);
|
||||
};
|
||||
|
||||
#endif /* __CAN_PLATFORM_FLEXCAN_H */
|
@@ -160,11 +160,6 @@ static inline void ceph_decode_timespec(struct timespec *ts,
|
||||
static inline void ceph_encode_timespec(struct ceph_timespec *tv,
|
||||
const struct timespec *ts)
|
||||
{
|
||||
BUG_ON(ts->tv_sec < 0);
|
||||
BUG_ON(ts->tv_sec > (__kernel_time_t)U32_MAX);
|
||||
BUG_ON(ts->tv_nsec < 0);
|
||||
BUG_ON(ts->tv_nsec > (long)U32_MAX);
|
||||
|
||||
tv->tv_sec = cpu_to_le32((u32)ts->tv_sec);
|
||||
tv->tv_nsec = cpu_to_le32((u32)ts->tv_nsec);
|
||||
}
|
||||
|
@@ -145,7 +145,6 @@ struct ceph_osd_request {
|
||||
s32 r_reply_op_result[CEPH_OSD_MAX_OP];
|
||||
int r_got_reply;
|
||||
int r_linger;
|
||||
int r_completed;
|
||||
|
||||
struct ceph_osd_client *r_osdc;
|
||||
struct kref r_kref;
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/xattr.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/percpu-refcount.h>
|
||||
|
||||
#ifdef CONFIG_CGROUPS
|
||||
|
||||
@@ -72,13 +73,8 @@ struct cgroup_subsys_state {
|
||||
*/
|
||||
struct cgroup *cgroup;
|
||||
|
||||
/*
|
||||
* State maintained by the cgroup system to allow subsystems
|
||||
* to be "busy". Should be accessed via css_get(),
|
||||
* css_tryget() and css_put().
|
||||
*/
|
||||
|
||||
atomic_t refcnt;
|
||||
/* reference count - access via css_[try]get() and css_put() */
|
||||
struct percpu_ref refcnt;
|
||||
|
||||
unsigned long flags;
|
||||
/* ID for this css, if possible */
|
||||
@@ -94,56 +90,52 @@ enum {
|
||||
CSS_ONLINE = (1 << 1), /* between ->css_online() and ->css_offline() */
|
||||
};
|
||||
|
||||
/* Caller must verify that the css is not for root cgroup */
|
||||
static inline void __css_get(struct cgroup_subsys_state *css, int count)
|
||||
{
|
||||
atomic_add(count, &css->refcnt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call css_get() to hold a reference on the css; it can be used
|
||||
* for a reference obtained via:
|
||||
* - an existing ref-counted reference to the css
|
||||
* - task->cgroups for a locked task
|
||||
/**
|
||||
* css_get - obtain a reference on the specified css
|
||||
* @css: target css
|
||||
*
|
||||
* The caller must already have a reference.
|
||||
*/
|
||||
|
||||
static inline void css_get(struct cgroup_subsys_state *css)
|
||||
{
|
||||
/* We don't need to reference count the root state */
|
||||
if (!(css->flags & CSS_ROOT))
|
||||
__css_get(css, 1);
|
||||
percpu_ref_get(&css->refcnt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call css_tryget() to take a reference on a css if your existing
|
||||
* (known-valid) reference isn't already ref-counted. Returns false if
|
||||
* the css has been destroyed.
|
||||
/**
|
||||
* css_tryget - try to obtain a reference on the specified css
|
||||
* @css: target css
|
||||
*
|
||||
* Obtain a reference on @css if it's alive. The caller naturally needs to
|
||||
* ensure that @css is accessible but doesn't have to be holding a
|
||||
* reference on it - IOW, RCU protected access is good enough for this
|
||||
* function. Returns %true if a reference count was successfully obtained;
|
||||
* %false otherwise.
|
||||
*/
|
||||
|
||||
extern bool __css_tryget(struct cgroup_subsys_state *css);
|
||||
static inline bool css_tryget(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (css->flags & CSS_ROOT)
|
||||
return true;
|
||||
return __css_tryget(css);
|
||||
return percpu_ref_tryget(&css->refcnt);
|
||||
}
|
||||
|
||||
/*
|
||||
* css_put() should be called to release a reference taken by
|
||||
* css_get() or css_tryget()
|
||||
/**
|
||||
* css_put - put a css reference
|
||||
* @css: target css
|
||||
*
|
||||
* Put a reference obtained via css_get() and css_tryget().
|
||||
*/
|
||||
|
||||
extern void __css_put(struct cgroup_subsys_state *css);
|
||||
static inline void css_put(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (!(css->flags & CSS_ROOT))
|
||||
__css_put(css);
|
||||
percpu_ref_put(&css->refcnt);
|
||||
}
|
||||
|
||||
/* bits in struct cgroup flags field */
|
||||
enum {
|
||||
/* Control Group is dead */
|
||||
CGRP_REMOVED,
|
||||
CGRP_DEAD,
|
||||
/*
|
||||
* Control Group has previously had a child cgroup or a task,
|
||||
* but no longer (only if CGRP_NOTIFY_ON_RELEASE is set)
|
||||
@@ -169,12 +161,6 @@ struct cgroup_name {
|
||||
struct cgroup {
|
||||
unsigned long flags; /* "unsigned long" so bitops work */
|
||||
|
||||
/*
|
||||
* count users of this cgroup. >0 means busy, but doesn't
|
||||
* necessarily indicate the number of tasks in the cgroup
|
||||
*/
|
||||
atomic_t count;
|
||||
|
||||
int id; /* ida allocated in-hierarchy ID */
|
||||
|
||||
/*
|
||||
@@ -188,6 +174,14 @@ struct cgroup {
|
||||
struct cgroup *parent; /* my parent */
|
||||
struct dentry *dentry; /* cgroup fs entry, RCU protected */
|
||||
|
||||
/*
|
||||
* Monotonically increasing unique serial number which defines a
|
||||
* uniform order among all cgroups. It's guaranteed that all
|
||||
* ->children lists are in the ascending order of ->serial_nr.
|
||||
* It's used to allow interrupting and resuming iterations.
|
||||
*/
|
||||
u64 serial_nr;
|
||||
|
||||
/*
|
||||
* This is a copy of dentry->d_name, and it's needed because
|
||||
* we can't use dentry->d_name in cgroup_path().
|
||||
@@ -207,13 +201,10 @@ struct cgroup {
|
||||
struct cgroupfs_root *root;
|
||||
|
||||
/*
|
||||
* List of cg_cgroup_links pointing at css_sets with
|
||||
* tasks in this cgroup. Protected by css_set_lock
|
||||
* List of cgrp_cset_links pointing at css_sets with tasks in this
|
||||
* cgroup. Protected by css_set_lock.
|
||||
*/
|
||||
struct list_head css_sets;
|
||||
|
||||
struct list_head allcg_node; /* cgroupfs_root->allcg_list */
|
||||
struct list_head cft_q_node; /* used during cftype add/rm */
|
||||
struct list_head cset_links;
|
||||
|
||||
/*
|
||||
* Linked list running through all cgroups that can
|
||||
@@ -229,9 +220,10 @@ struct cgroup {
|
||||
struct list_head pidlists;
|
||||
struct mutex pidlist_mutex;
|
||||
|
||||
/* For RCU-protected deletion */
|
||||
/* For css percpu_ref killing and RCU-protected deletion */
|
||||
struct rcu_head rcu_head;
|
||||
struct work_struct free_work;
|
||||
struct work_struct destroy_work;
|
||||
atomic_t css_kill_cnt;
|
||||
|
||||
/* List of events which userspace want to receive */
|
||||
struct list_head event_list;
|
||||
@@ -269,18 +261,35 @@ enum {
|
||||
*
|
||||
* - Remount is disallowed.
|
||||
*
|
||||
* - rename(2) is disallowed.
|
||||
*
|
||||
* - "tasks" is removed. Everything should be at process
|
||||
* granularity. Use "cgroup.procs" instead.
|
||||
*
|
||||
* - "release_agent" and "notify_on_release" are removed.
|
||||
* Replacement notification mechanism will be implemented.
|
||||
*
|
||||
* - cpuset: tasks will be kept in empty cpusets when hotplug happens
|
||||
* and take masks of ancestors with non-empty cpus/mems, instead of
|
||||
* being moved to an ancestor.
|
||||
*
|
||||
* - cpuset: a task can be moved into an empty cpuset, and again it
|
||||
* takes masks of ancestors.
|
||||
*
|
||||
* - memcg: use_hierarchy is on by default and the cgroup file for
|
||||
* the flag is not created.
|
||||
*
|
||||
* The followings are planned changes.
|
||||
*
|
||||
* - release_agent will be disallowed once replacement notification
|
||||
* mechanism is implemented.
|
||||
* - blkcg: blk-throttle becomes properly hierarchical.
|
||||
*/
|
||||
CGRP_ROOT_SANE_BEHAVIOR = (1 << 0),
|
||||
|
||||
CGRP_ROOT_NOPREFIX = (1 << 1), /* mounted subsystems have no named prefix */
|
||||
CGRP_ROOT_XATTR = (1 << 2), /* supports extended attributes */
|
||||
|
||||
/* mount options live below bit 16 */
|
||||
CGRP_ROOT_OPTION_MASK = (1 << 16) - 1,
|
||||
|
||||
CGRP_ROOT_SUBSYS_BOUND = (1 << 16), /* subsystems finished binding */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -291,18 +300,12 @@ enum {
|
||||
struct cgroupfs_root {
|
||||
struct super_block *sb;
|
||||
|
||||
/*
|
||||
* The bitmask of subsystems intended to be attached to this
|
||||
* hierarchy
|
||||
*/
|
||||
/* The bitmask of subsystems attached to this hierarchy */
|
||||
unsigned long subsys_mask;
|
||||
|
||||
/* Unique id for this hierarchy. */
|
||||
int hierarchy_id;
|
||||
|
||||
/* The bitmask of subsystems currently attached to this hierarchy */
|
||||
unsigned long actual_subsys_mask;
|
||||
|
||||
/* A list running through the attached subsystems */
|
||||
struct list_head subsys_list;
|
||||
|
||||
@@ -315,9 +318,6 @@ struct cgroupfs_root {
|
||||
/* A list running through the active hierarchies */
|
||||
struct list_head root_list;
|
||||
|
||||
/* All cgroups on this root, cgroup_mutex protected */
|
||||
struct list_head allcg_list;
|
||||
|
||||
/* Hierarchy-specific flags */
|
||||
unsigned long flags;
|
||||
|
||||
@@ -357,11 +357,10 @@ struct css_set {
|
||||
struct list_head tasks;
|
||||
|
||||
/*
|
||||
* List of cg_cgroup_link objects on link chains from
|
||||
* cgroups referenced from this css_set. Protected by
|
||||
* css_set_lock
|
||||
* List of cgrp_cset_links pointing at cgroups referenced from this
|
||||
* css_set. Protected by css_set_lock.
|
||||
*/
|
||||
struct list_head cg_links;
|
||||
struct list_head cgrp_links;
|
||||
|
||||
/*
|
||||
* Set of subsystem states, one for each subsystem. This array
|
||||
@@ -394,9 +393,11 @@ struct cgroup_map_cb {
|
||||
*/
|
||||
|
||||
/* cftype->flags */
|
||||
#define CFTYPE_ONLY_ON_ROOT (1U << 0) /* only create on root cg */
|
||||
#define CFTYPE_NOT_ON_ROOT (1U << 1) /* don't create on root cg */
|
||||
#define CFTYPE_INSANE (1U << 2) /* don't create if sane_behavior */
|
||||
enum {
|
||||
CFTYPE_ONLY_ON_ROOT = (1 << 0), /* only create on root cg */
|
||||
CFTYPE_NOT_ON_ROOT = (1 << 1), /* don't create on root cg */
|
||||
CFTYPE_INSANE = (1 << 2), /* don't create if sane_behavior */
|
||||
};
|
||||
|
||||
#define MAX_CFTYPE_NAME 64
|
||||
|
||||
@@ -442,13 +443,13 @@ struct cftype {
|
||||
* entry. The key/value pairs (and their ordering) should not
|
||||
* change between reboots.
|
||||
*/
|
||||
int (*read_map)(struct cgroup *cont, struct cftype *cft,
|
||||
int (*read_map)(struct cgroup *cgrp, struct cftype *cft,
|
||||
struct cgroup_map_cb *cb);
|
||||
/*
|
||||
* read_seq_string() is used for outputting a simple sequence
|
||||
* using seqfile.
|
||||
*/
|
||||
int (*read_seq_string)(struct cgroup *cont, struct cftype *cft,
|
||||
int (*read_seq_string)(struct cgroup *cgrp, struct cftype *cft,
|
||||
struct seq_file *m);
|
||||
|
||||
ssize_t (*write)(struct cgroup *cgrp, struct cftype *cft,
|
||||
@@ -538,10 +539,11 @@ static inline const char *cgroup_name(const struct cgroup *cgrp)
|
||||
int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
|
||||
int cgroup_rm_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
|
||||
|
||||
int cgroup_is_removed(const struct cgroup *cgrp);
|
||||
bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor);
|
||||
|
||||
int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen);
|
||||
int task_cgroup_path_from_hierarchy(struct task_struct *task, int hierarchy_id,
|
||||
char *buf, size_t buflen);
|
||||
|
||||
int cgroup_task_count(const struct cgroup *cgrp);
|
||||
|
||||
@@ -646,22 +648,60 @@ static inline struct cgroup_subsys_state *cgroup_subsys_state(
|
||||
return cgrp->subsys[subsys_id];
|
||||
}
|
||||
|
||||
/*
|
||||
* function to get the cgroup_subsys_state which allows for extra
|
||||
* rcu_dereference_check() conditions, such as locks used during the
|
||||
* cgroup_subsys::attach() methods.
|
||||
/**
|
||||
* task_css_set_check - obtain a task's css_set with extra access conditions
|
||||
* @task: the task to obtain css_set for
|
||||
* @__c: extra condition expression to be passed to rcu_dereference_check()
|
||||
*
|
||||
* A task's css_set is RCU protected, initialized and exited while holding
|
||||
* task_lock(), and can only be modified while holding both cgroup_mutex
|
||||
* and task_lock() while the task is alive. This macro verifies that the
|
||||
* caller is inside proper critical section and returns @task's css_set.
|
||||
*
|
||||
* The caller can also specify additional allowed conditions via @__c, such
|
||||
* as locks used during the cgroup_subsys::attach() methods.
|
||||
*/
|
||||
#ifdef CONFIG_PROVE_RCU
|
||||
extern struct mutex cgroup_mutex;
|
||||
#define task_subsys_state_check(task, subsys_id, __c) \
|
||||
rcu_dereference_check((task)->cgroups->subsys[(subsys_id)], \
|
||||
lockdep_is_held(&(task)->alloc_lock) || \
|
||||
lockdep_is_held(&cgroup_mutex) || (__c))
|
||||
#define task_css_set_check(task, __c) \
|
||||
rcu_dereference_check((task)->cgroups, \
|
||||
lockdep_is_held(&(task)->alloc_lock) || \
|
||||
lockdep_is_held(&cgroup_mutex) || (__c))
|
||||
#else
|
||||
#define task_subsys_state_check(task, subsys_id, __c) \
|
||||
rcu_dereference((task)->cgroups->subsys[(subsys_id)])
|
||||
#define task_css_set_check(task, __c) \
|
||||
rcu_dereference((task)->cgroups)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* task_subsys_state_check - obtain css for (task, subsys) w/ extra access conds
|
||||
* @task: the target task
|
||||
* @subsys_id: the target subsystem ID
|
||||
* @__c: extra condition expression to be passed to rcu_dereference_check()
|
||||
*
|
||||
* Return the cgroup_subsys_state for the (@task, @subsys_id) pair. The
|
||||
* synchronization rules are the same as task_css_set_check().
|
||||
*/
|
||||
#define task_subsys_state_check(task, subsys_id, __c) \
|
||||
task_css_set_check((task), (__c))->subsys[(subsys_id)]
|
||||
|
||||
/**
|
||||
* task_css_set - obtain a task's css_set
|
||||
* @task: the task to obtain css_set for
|
||||
*
|
||||
* See task_css_set_check().
|
||||
*/
|
||||
static inline struct css_set *task_css_set(struct task_struct *task)
|
||||
{
|
||||
return task_css_set_check(task, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* task_subsys_state - obtain css for (task, subsys)
|
||||
* @task: the target task
|
||||
* @subsys_id: the target subsystem ID
|
||||
*
|
||||
* See task_subsys_state_check().
|
||||
*/
|
||||
static inline struct cgroup_subsys_state *
|
||||
task_subsys_state(struct task_struct *task, int subsys_id)
|
||||
{
|
||||
@@ -674,12 +714,14 @@ static inline struct cgroup* task_cgroup(struct task_struct *task,
|
||||
return task_subsys_state(task, subsys_id)->cgroup;
|
||||
}
|
||||
|
||||
struct cgroup *cgroup_next_sibling(struct cgroup *pos);
|
||||
|
||||
/**
|
||||
* cgroup_for_each_child - iterate through children of a cgroup
|
||||
* @pos: the cgroup * to use as the loop cursor
|
||||
* @cgroup: cgroup whose children to walk
|
||||
* @cgrp: cgroup whose children to walk
|
||||
*
|
||||
* Walk @cgroup's children. Must be called under rcu_read_lock(). A child
|
||||
* Walk @cgrp's children. Must be called under rcu_read_lock(). A child
|
||||
* cgroup which hasn't finished ->css_online() or already has finished
|
||||
* ->css_offline() may show up during traversal and it's each subsystem's
|
||||
* responsibility to verify that each @pos is alive.
|
||||
@@ -687,9 +729,15 @@ static inline struct cgroup* task_cgroup(struct task_struct *task,
|
||||
* If a subsystem synchronizes against the parent in its ->css_online() and
|
||||
* before starting iterating, a cgroup which finished ->css_online() is
|
||||
* guaranteed to be visible in the future iterations.
|
||||
*
|
||||
* It is allowed to temporarily drop RCU read lock during iteration. The
|
||||
* caller is responsible for ensuring that @pos remains accessible until
|
||||
* the start of the next iteration by, for example, bumping the css refcnt.
|
||||
*/
|
||||
#define cgroup_for_each_child(pos, cgroup) \
|
||||
list_for_each_entry_rcu(pos, &(cgroup)->children, sibling)
|
||||
#define cgroup_for_each_child(pos, cgrp) \
|
||||
for ((pos) = list_first_or_null_rcu(&(cgrp)->children, \
|
||||
struct cgroup, sibling); \
|
||||
(pos); (pos) = cgroup_next_sibling((pos)))
|
||||
|
||||
struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,
|
||||
struct cgroup *cgroup);
|
||||
@@ -748,6 +796,10 @@ struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos);
|
||||
* Alternatively, a subsystem may choose to use a single global lock to
|
||||
* synchronize ->css_online() and ->css_offline() against tree-walking
|
||||
* operations.
|
||||
*
|
||||
* It is allowed to temporarily drop RCU read lock during iteration. The
|
||||
* caller is responsible for ensuring that @pos remains accessible until
|
||||
* the start of the next iteration by, for example, bumping the css refcnt.
|
||||
*/
|
||||
#define cgroup_for_each_descendant_pre(pos, cgroup) \
|
||||
for (pos = cgroup_next_descendant_pre(NULL, (cgroup)); (pos); \
|
||||
@@ -771,7 +823,7 @@ struct cgroup *cgroup_next_descendant_post(struct cgroup *pos,
|
||||
|
||||
/* A cgroup_iter should be treated as an opaque object */
|
||||
struct cgroup_iter {
|
||||
struct list_head *cg_link;
|
||||
struct list_head *cset_link;
|
||||
struct list_head *task;
|
||||
};
|
||||
|
||||
@@ -827,7 +879,6 @@ bool css_is_ancestor(struct cgroup_subsys_state *cg,
|
||||
|
||||
/* Get id and depth of css */
|
||||
unsigned short css_id(struct cgroup_subsys_state *css);
|
||||
unsigned short css_depth(struct cgroup_subsys_state *css);
|
||||
struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id);
|
||||
|
||||
#else /* !CONFIG_CGROUPS */
|
||||
@@ -838,8 +889,6 @@ static inline void cgroup_fork(struct task_struct *p) {}
|
||||
static inline void cgroup_post_fork(struct task_struct *p) {}
|
||||
static inline void cgroup_exit(struct task_struct *p, int callbacks) {}
|
||||
|
||||
static inline void cgroup_lock(void) {}
|
||||
static inline void cgroup_unlock(void) {}
|
||||
static inline int cgroupstats_build(struct cgroupstats *stats,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
|
@@ -210,6 +210,10 @@ void of_fixed_clk_setup(struct device_node *np);
|
||||
* CLK_GATE_SET_TO_DISABLE - by default this clock sets the bit at bit_idx to
|
||||
* enable the clock. Setting this flag does the opposite: setting the bit
|
||||
* disable the clock and clearing it enables the clock
|
||||
* CLK_GATE_HIWORD_MASK - The gate settings are only in lower 16-bit
|
||||
* of this register, and mask of gate bits are in higher 16-bit of this
|
||||
* register. While setting the gate bits, higher 16-bit should also be
|
||||
* updated to indicate changing gate bits.
|
||||
*/
|
||||
struct clk_gate {
|
||||
struct clk_hw hw;
|
||||
@@ -220,6 +224,7 @@ struct clk_gate {
|
||||
};
|
||||
|
||||
#define CLK_GATE_SET_TO_DISABLE BIT(0)
|
||||
#define CLK_GATE_HIWORD_MASK BIT(1)
|
||||
|
||||
extern const struct clk_ops clk_gate_ops;
|
||||
struct clk *clk_register_gate(struct device *dev, const char *name,
|
||||
@@ -257,6 +262,10 @@ struct clk_div_table {
|
||||
* Some hardware implementations gracefully handle this case and allow a
|
||||
* zero divisor by not modifying their input clock
|
||||
* (divide by one / bypass).
|
||||
* CLK_DIVIDER_HIWORD_MASK - The divider settings are only in lower 16-bit
|
||||
* of this register, and mask of divider bits are in higher 16-bit of this
|
||||
* register. While setting the divider bits, higher 16-bit should also be
|
||||
* updated to indicate changing divider bits.
|
||||
*/
|
||||
struct clk_divider {
|
||||
struct clk_hw hw;
|
||||
@@ -271,6 +280,7 @@ struct clk_divider {
|
||||
#define CLK_DIVIDER_ONE_BASED BIT(0)
|
||||
#define CLK_DIVIDER_POWER_OF_TWO BIT(1)
|
||||
#define CLK_DIVIDER_ALLOW_ZERO BIT(2)
|
||||
#define CLK_DIVIDER_HIWORD_MASK BIT(3)
|
||||
|
||||
extern const struct clk_ops clk_divider_ops;
|
||||
struct clk *clk_register_divider(struct device *dev, const char *name,
|
||||
@@ -299,6 +309,10 @@ struct clk *clk_register_divider_table(struct device *dev, const char *name,
|
||||
* Flags:
|
||||
* CLK_MUX_INDEX_ONE - register index starts at 1, not 0
|
||||
* CLK_MUX_INDEX_BIT - register index is a single bit (power of two)
|
||||
* CLK_MUX_HIWORD_MASK - The mux settings are only in lower 16-bit of this
|
||||
* register, and mask of mux bits are in higher 16-bit of this register.
|
||||
* While setting the mux bits, higher 16-bit should also be updated to
|
||||
* indicate changing mux bits.
|
||||
*/
|
||||
struct clk_mux {
|
||||
struct clk_hw hw;
|
||||
@@ -312,6 +326,7 @@ struct clk_mux {
|
||||
|
||||
#define CLK_MUX_INDEX_ONE BIT(0)
|
||||
#define CLK_MUX_INDEX_BIT BIT(1)
|
||||
#define CLK_MUX_HIWORD_MASK BIT(2)
|
||||
|
||||
extern const struct clk_ops clk_mux_ops;
|
||||
|
||||
@@ -423,6 +438,17 @@ struct of_device_id;
|
||||
|
||||
typedef void (*of_clk_init_cb_t)(struct device_node *);
|
||||
|
||||
struct clk_onecell_data {
|
||||
struct clk **clks;
|
||||
unsigned int clk_num;
|
||||
};
|
||||
|
||||
#define CLK_OF_DECLARE(name, compat, fn) \
|
||||
static const struct of_device_id __clk_of_table_##name \
|
||||
__used __section(__clk_of_table) \
|
||||
= { .compatible = compat, .data = fn };
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
int of_clk_add_provider(struct device_node *np,
|
||||
struct clk *(*clk_src_get)(struct of_phandle_args *args,
|
||||
void *data),
|
||||
@@ -430,19 +456,39 @@ int of_clk_add_provider(struct device_node *np,
|
||||
void of_clk_del_provider(struct device_node *np);
|
||||
struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
|
||||
void *data);
|
||||
struct clk_onecell_data {
|
||||
struct clk **clks;
|
||||
unsigned int clk_num;
|
||||
};
|
||||
struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data);
|
||||
const char *of_clk_get_parent_name(struct device_node *np, int index);
|
||||
|
||||
void of_clk_init(const struct of_device_id *matches);
|
||||
|
||||
#define CLK_OF_DECLARE(name, compat, fn) \
|
||||
static const struct of_device_id __clk_of_table_##name \
|
||||
__used __section(__clk_of_table) \
|
||||
= { .compatible = compat, .data = fn };
|
||||
#else /* !CONFIG_OF */
|
||||
|
||||
static inline int of_clk_add_provider(struct device_node *np,
|
||||
struct clk *(*clk_src_get)(struct of_phandle_args *args,
|
||||
void *data),
|
||||
void *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#define of_clk_del_provider(np) \
|
||||
{ while (0); }
|
||||
static inline struct clk *of_clk_src_simple_get(
|
||||
struct of_phandle_args *clkspec, void *data)
|
||||
{
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
static inline struct clk *of_clk_src_onecell_get(
|
||||
struct of_phandle_args *clkspec, void *data)
|
||||
{
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
static inline const char *of_clk_get_parent_name(struct device_node *np,
|
||||
int index)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#define of_clk_init(matches) \
|
||||
{ while (0); }
|
||||
#endif /* CONFIG_OF */
|
||||
#endif /* CONFIG_COMMON_CLK */
|
||||
#endif /* CLK_PROVIDER_H */
|
||||
|
@@ -120,9 +120,13 @@ static inline void tegra_cpu_clock_resume(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_TEGRA
|
||||
void tegra_periph_reset_deassert(struct clk *c);
|
||||
void tegra_periph_reset_assert(struct clk *c);
|
||||
void tegra_clocks_init(void);
|
||||
#else
|
||||
static inline void tegra_periph_reset_deassert(struct clk *c) {}
|
||||
static inline void tegra_periph_reset_assert(struct clk *c) {}
|
||||
#endif
|
||||
void tegra_clocks_apply_init_table(void);
|
||||
|
||||
#endif /* __LINUX_CLK_TEGRA_H_ */
|
||||
|
@@ -30,6 +30,7 @@ enum clock_event_nofitiers {
|
||||
#include <linux/notifier.h>
|
||||
|
||||
struct clock_event_device;
|
||||
struct module;
|
||||
|
||||
/* Clock event mode commands */
|
||||
enum clock_event_mode {
|
||||
@@ -83,6 +84,7 @@ enum clock_event_mode {
|
||||
* @irq: IRQ number (only for non CPU local devices)
|
||||
* @cpumask: cpumask to indicate for which CPUs this device works
|
||||
* @list: list head for the management code
|
||||
* @owner: module reference
|
||||
*/
|
||||
struct clock_event_device {
|
||||
void (*event_handler)(struct clock_event_device *);
|
||||
@@ -112,6 +114,7 @@ struct clock_event_device {
|
||||
int irq;
|
||||
const struct cpumask *cpumask;
|
||||
struct list_head list;
|
||||
struct module *owner;
|
||||
} ____cacheline_aligned;
|
||||
|
||||
/*
|
||||
@@ -138,6 +141,7 @@ static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec,
|
||||
extern u64 clockevent_delta2ns(unsigned long latch,
|
||||
struct clock_event_device *evt);
|
||||
extern void clockevents_register_device(struct clock_event_device *dev);
|
||||
extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu);
|
||||
|
||||
extern void clockevents_config(struct clock_event_device *dev, u32 freq);
|
||||
extern void clockevents_config_and_register(struct clock_event_device *dev,
|
||||
@@ -150,7 +154,6 @@ extern void clockevents_exchange_device(struct clock_event_device *old,
|
||||
struct clock_event_device *new);
|
||||
extern void clockevents_set_mode(struct clock_event_device *dev,
|
||||
enum clock_event_mode mode);
|
||||
extern int clockevents_register_notifier(struct notifier_block *nb);
|
||||
extern int clockevents_program_event(struct clock_event_device *dev,
|
||||
ktime_t expires, bool force);
|
||||
|
||||
|
@@ -21,6 +21,7 @@
|
||||
/* clocksource cycle base type */
|
||||
typedef u64 cycle_t;
|
||||
struct clocksource;
|
||||
struct module;
|
||||
|
||||
#ifdef CONFIG_ARCH_CLOCKSOURCE_DATA
|
||||
#include <asm/clocksource.h>
|
||||
@@ -162,6 +163,7 @@ extern u64 timecounter_cyc2time(struct timecounter *tc,
|
||||
* @suspend: suspend function for the clocksource, if necessary
|
||||
* @resume: resume function for the clocksource, if necessary
|
||||
* @cycle_last: most recent cycle counter value seen by ::read()
|
||||
* @owner: module reference, must be set by clocksource in modules
|
||||
*/
|
||||
struct clocksource {
|
||||
/*
|
||||
@@ -195,6 +197,7 @@ struct clocksource {
|
||||
cycle_t cs_last;
|
||||
cycle_t wd_last;
|
||||
#endif
|
||||
struct module *owner;
|
||||
} ____cacheline_aligned;
|
||||
|
||||
/*
|
||||
@@ -207,6 +210,7 @@ struct clocksource {
|
||||
#define CLOCK_SOURCE_VALID_FOR_HRES 0x20
|
||||
#define CLOCK_SOURCE_UNSTABLE 0x40
|
||||
#define CLOCK_SOURCE_SUSPEND_NONSTOP 0x80
|
||||
#define CLOCK_SOURCE_RESELECT 0x100
|
||||
|
||||
/* simplify initialization of mask field */
|
||||
#define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1)
|
||||
@@ -279,7 +283,7 @@ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift)
|
||||
|
||||
|
||||
extern int clocksource_register(struct clocksource*);
|
||||
extern void clocksource_unregister(struct clocksource*);
|
||||
extern int clocksource_unregister(struct clocksource*);
|
||||
extern void clocksource_touch_watchdog(void);
|
||||
extern struct clocksource* clocksource_get_next(void);
|
||||
extern void clocksource_change_rating(struct clocksource *cs, int rating);
|
||||
@@ -321,7 +325,7 @@ static inline void __clocksource_updatefreq_khz(struct clocksource *cs, u32 khz)
|
||||
}
|
||||
|
||||
|
||||
extern void timekeeping_notify(struct clocksource *clock);
|
||||
extern int timekeeping_notify(struct clocksource *clock);
|
||||
|
||||
extern cycle_t clocksource_mmio_readl_up(struct clocksource *);
|
||||
extern cycle_t clocksource_mmio_readl_down(struct clocksource *);
|
||||
|
@@ -6,9 +6,8 @@
|
||||
* definitions of processors.
|
||||
*
|
||||
* Basic handling of the devices is done in drivers/base/cpu.c
|
||||
* and system devices are handled in drivers/base/sys.c.
|
||||
*
|
||||
* CPUs are exported via sysfs in the class/cpu/devices/
|
||||
* CPUs are exported via sysfs in the devices/system/cpu
|
||||
* directory.
|
||||
*/
|
||||
#ifndef _LINUX_CPU_H_
|
||||
|
@@ -41,7 +41,7 @@ cpufreq_cooling_register(const struct cpumask *clip_cpus);
|
||||
*/
|
||||
void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev);
|
||||
|
||||
unsigned long cpufreq_cooling_get_level(unsigned int, unsigned int);
|
||||
unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq);
|
||||
#else /* !CONFIG_CPU_THERMAL */
|
||||
static inline struct thermal_cooling_device *
|
||||
cpufreq_cooling_register(const struct cpumask *clip_cpus)
|
||||
@@ -54,7 +54,7 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
|
||||
return;
|
||||
}
|
||||
static inline
|
||||
unsigned long cpufreq_cooling_get_level(unsigned int, unsigned int)
|
||||
unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq)
|
||||
{
|
||||
return THERMAL_CSTATE_INVALID;
|
||||
}
|
||||
|
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* linux/include/linux/cpufreq.h
|
||||
* linux/include/linux/cpufreq.h
|
||||
*
|
||||
* Copyright (C) 2001 Russell King
|
||||
* (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
|
||||
* Copyright (C) 2001 Russell King
|
||||
* (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
|
||||
*
|
||||
* 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
|
||||
@@ -26,7 +26,6 @@
|
||||
/* Print length for names. Extra 1 space for accomodating '\n' in prints */
|
||||
#define CPUFREQ_NAME_PLEN (CPUFREQ_NAME_LEN + 1)
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* CPUFREQ NOTIFIER INTERFACE *
|
||||
*********************************************************************/
|
||||
@@ -71,6 +70,10 @@ struct cpufreq_governor;
|
||||
|
||||
/* /sys/devices/system/cpu/cpufreq: entry point for global variables */
|
||||
extern struct kobject *cpufreq_global_kobject;
|
||||
int cpufreq_get_global_kobject(void);
|
||||
void cpufreq_put_global_kobject(void);
|
||||
int cpufreq_sysfs_create_file(const struct attribute *attr);
|
||||
void cpufreq_sysfs_remove_file(const struct attribute *attr);
|
||||
|
||||
#define CPUFREQ_ETERNAL (-1)
|
||||
struct cpufreq_cpuinfo {
|
||||
@@ -107,6 +110,7 @@ struct cpufreq_policy {
|
||||
unsigned int policy; /* see above */
|
||||
struct cpufreq_governor *governor; /* see below */
|
||||
void *governor_data;
|
||||
bool governor_enabled; /* governor start/stop flag */
|
||||
|
||||
struct work_struct update; /* if update_policy() needs to be
|
||||
* called, but you're in IRQ context */
|
||||
@@ -115,6 +119,7 @@ struct cpufreq_policy {
|
||||
|
||||
struct kobject kobj;
|
||||
struct completion kobj_unregister;
|
||||
int transition_ongoing; /* Tracks transition status */
|
||||
};
|
||||
|
||||
#define CPUFREQ_ADJUST (0)
|
||||
@@ -148,17 +153,18 @@ struct cpufreq_freqs {
|
||||
u8 flags; /* flags of cpufreq_driver, see below. */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch safe)
|
||||
* cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch
|
||||
* safe)
|
||||
* @old: old value
|
||||
* @div: divisor
|
||||
* @mult: multiplier
|
||||
*
|
||||
*
|
||||
* new = old * mult / div
|
||||
* new = old * mult / div
|
||||
*/
|
||||
static inline unsigned long cpufreq_scale(unsigned long old, u_int div, u_int mult)
|
||||
static inline unsigned long cpufreq_scale(unsigned long old, u_int div,
|
||||
u_int mult)
|
||||
{
|
||||
#if BITS_PER_LONG == 32
|
||||
|
||||
@@ -211,14 +217,12 @@ extern int __cpufreq_driver_target(struct cpufreq_policy *policy,
|
||||
unsigned int target_freq,
|
||||
unsigned int relation);
|
||||
|
||||
|
||||
extern int __cpufreq_driver_getavg(struct cpufreq_policy *policy,
|
||||
unsigned int cpu);
|
||||
|
||||
int cpufreq_register_governor(struct cpufreq_governor *governor);
|
||||
void cpufreq_unregister_governor(struct cpufreq_governor *governor);
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* CPUFREQ DRIVER INTERFACE *
|
||||
*********************************************************************/
|
||||
@@ -229,7 +233,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor);
|
||||
struct freq_attr;
|
||||
|
||||
struct cpufreq_driver {
|
||||
struct module *owner;
|
||||
struct module *owner;
|
||||
char name[CPUFREQ_NAME_LEN];
|
||||
u8 flags;
|
||||
/*
|
||||
@@ -277,11 +281,11 @@ struct cpufreq_driver {
|
||||
int cpufreq_register_driver(struct cpufreq_driver *driver_data);
|
||||
int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
|
||||
|
||||
|
||||
void cpufreq_notify_transition(struct cpufreq_policy *policy,
|
||||
struct cpufreq_freqs *freqs, unsigned int state);
|
||||
|
||||
static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned int min, unsigned int max)
|
||||
static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
|
||||
unsigned int min, unsigned int max)
|
||||
{
|
||||
if (policy->min < min)
|
||||
policy->min = min;
|
||||
@@ -337,12 +341,16 @@ const char *cpufreq_get_current_driver(void);
|
||||
/*********************************************************************
|
||||
* CPUFREQ 2.6. INTERFACE *
|
||||
*********************************************************************/
|
||||
u64 get_cpu_idle_time(unsigned int cpu, u64 *wall, int io_busy);
|
||||
int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu);
|
||||
int cpufreq_update_policy(unsigned int cpu);
|
||||
bool have_governor_per_policy(void);
|
||||
struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy);
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
/* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */
|
||||
/*
|
||||
* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it
|
||||
*/
|
||||
unsigned int cpufreq_get(unsigned int cpu);
|
||||
#else
|
||||
static inline unsigned int cpufreq_get(unsigned int cpu)
|
||||
@@ -351,7 +359,9 @@ static inline unsigned int cpufreq_get(unsigned int cpu)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */
|
||||
/*
|
||||
* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it
|
||||
*/
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
unsigned int cpufreq_quick_get(unsigned int cpu);
|
||||
unsigned int cpufreq_quick_get_max(unsigned int cpu);
|
||||
@@ -366,16 +376,14 @@ static inline unsigned int cpufreq_quick_get_max(unsigned int cpu)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* CPUFREQ DEFAULT GOVERNOR *
|
||||
*********************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
Performance governor is fallback governor if any other gov failed to
|
||||
auto load due latency restrictions
|
||||
*/
|
||||
* Performance governor is fallback governor if any other gov failed to auto
|
||||
* load due latency restrictions
|
||||
*/
|
||||
#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
|
||||
extern struct cpufreq_governor cpufreq_gov_performance;
|
||||
#endif
|
||||
@@ -395,7 +403,6 @@ extern struct cpufreq_governor cpufreq_gov_conservative;
|
||||
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_conservative)
|
||||
#endif
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* FREQUENCY TABLE HELPERS *
|
||||
*********************************************************************/
|
||||
@@ -404,7 +411,7 @@ extern struct cpufreq_governor cpufreq_gov_conservative;
|
||||
#define CPUFREQ_TABLE_END ~1
|
||||
|
||||
struct cpufreq_frequency_table {
|
||||
unsigned int index; /* any */
|
||||
unsigned int driver_data; /* driver specific data, not used by core */
|
||||
unsigned int frequency; /* kHz - doesn't need to be in ascending
|
||||
* order */
|
||||
};
|
||||
@@ -432,4 +439,7 @@ void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table,
|
||||
void cpufreq_frequency_table_update_policy_cpu(struct cpufreq_policy *policy);
|
||||
|
||||
void cpufreq_frequency_table_put_attr(unsigned int cpu);
|
||||
|
||||
ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf);
|
||||
|
||||
#endif /* _LINUX_CPUFREQ_H */
|
||||
|
@@ -111,6 +111,9 @@ struct cpuidle_driver {
|
||||
struct cpuidle_state states[CPUIDLE_STATE_MAX];
|
||||
int state_count;
|
||||
int safe_state_index;
|
||||
|
||||
/* the driver handles the cpus in cpumask */
|
||||
struct cpumask *cpumask;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CPU_IDLE
|
||||
@@ -135,9 +138,6 @@ extern void cpuidle_disable_device(struct cpuidle_device *dev);
|
||||
extern int cpuidle_play_dead(void);
|
||||
|
||||
extern struct cpuidle_driver *cpuidle_get_cpu_driver(struct cpuidle_device *dev);
|
||||
extern int cpuidle_register_cpu_driver(struct cpuidle_driver *drv, int cpu);
|
||||
extern void cpuidle_unregister_cpu_driver(struct cpuidle_driver *drv, int cpu);
|
||||
|
||||
#else
|
||||
static inline void disable_cpuidle(void) { }
|
||||
static inline int cpuidle_idle_call(void) { return -ENODEV; }
|
||||
|
@@ -3,6 +3,10 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define CRC_T10DIF_DIGEST_SIZE 2
|
||||
#define CRC_T10DIF_BLOCK_SIZE 1
|
||||
|
||||
__u16 crc_t10dif_generic(__u16 crc, const unsigned char *buffer, size_t len);
|
||||
__u16 crc_t10dif(unsigned char const *, size_t);
|
||||
|
||||
#endif
|
||||
|
@@ -146,10 +146,8 @@ enum dentry_d_lock_class
|
||||
struct dentry_operations {
|
||||
int (*d_revalidate)(struct dentry *, unsigned int);
|
||||
int (*d_weak_revalidate)(struct dentry *, unsigned int);
|
||||
int (*d_hash)(const struct dentry *, const struct inode *,
|
||||
struct qstr *);
|
||||
int (*d_compare)(const struct dentry *, const struct inode *,
|
||||
const struct dentry *, const struct inode *,
|
||||
int (*d_hash)(const struct dentry *, struct qstr *);
|
||||
int (*d_compare)(const struct dentry *, const struct dentry *,
|
||||
unsigned int, const char *, const struct qstr *);
|
||||
int (*d_delete)(const struct dentry *);
|
||||
void (*d_release)(struct dentry *);
|
||||
@@ -246,6 +244,8 @@ extern struct dentry * d_make_root(struct inode *);
|
||||
/* <clickety>-<click> the ramfs-type tree */
|
||||
extern void d_genocide(struct dentry *);
|
||||
|
||||
extern void d_tmpfile(struct dentry *, struct inode *);
|
||||
|
||||
extern struct dentry *d_find_alias(struct inode *);
|
||||
extern void d_prune_aliases(struct inode *);
|
||||
|
||||
@@ -300,8 +300,7 @@ extern struct dentry *d_lookup(const struct dentry *, const struct qstr *);
|
||||
extern struct dentry *d_hash_and_lookup(struct dentry *, struct qstr *);
|
||||
extern struct dentry *__d_lookup(const struct dentry *, const struct qstr *);
|
||||
extern struct dentry *__d_lookup_rcu(const struct dentry *parent,
|
||||
const struct qstr *name,
|
||||
unsigned *seq, struct inode *inode);
|
||||
const struct qstr *name, unsigned *seq);
|
||||
|
||||
/**
|
||||
* __d_rcu_to_refcount - take a refcount on dentry if sequence check is ok
|
||||
@@ -325,6 +324,11 @@ static inline int __d_rcu_to_refcount(struct dentry *dentry, unsigned seq)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline unsigned d_count(struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_count;
|
||||
}
|
||||
|
||||
/* validate "insecure" dentry pointer */
|
||||
extern int d_validate(struct dentry *, struct dentry *);
|
||||
|
||||
|
@@ -51,7 +51,7 @@ struct task_struct;
|
||||
extern void debug_show_all_locks(void);
|
||||
extern void debug_show_held_locks(struct task_struct *task);
|
||||
extern void debug_check_no_locks_freed(const void *from, unsigned long len);
|
||||
extern void debug_check_no_locks_held(struct task_struct *task);
|
||||
extern void debug_check_no_locks_held(void);
|
||||
#else
|
||||
static inline void debug_show_all_locks(void)
|
||||
{
|
||||
@@ -67,7 +67,7 @@ debug_check_no_locks_freed(const void *from, unsigned long len)
|
||||
}
|
||||
|
||||
static inline void
|
||||
debug_check_no_locks_held(struct task_struct *task)
|
||||
debug_check_no_locks_held(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
10
include/linux/decompress/unlz4.h
Normal file
10
include/linux/decompress/unlz4.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef DECOMPRESS_UNLZ4_H
|
||||
#define DECOMPRESS_UNLZ4_H
|
||||
|
||||
int unlz4(unsigned char *inbuf, int len,
|
||||
int(*fill)(void*, unsigned int),
|
||||
int(*flush)(void*, unsigned int),
|
||||
unsigned char *output,
|
||||
int *pos,
|
||||
void(*error)(char *x));
|
||||
#endif
|
@@ -181,6 +181,8 @@ extern struct devfreq *devfreq_add_device(struct device *dev,
|
||||
const char *governor_name,
|
||||
void *data);
|
||||
extern int devfreq_remove_device(struct devfreq *devfreq);
|
||||
|
||||
/* Supposed to be called by PM_SLEEP/PM_RUNTIME callbacks */
|
||||
extern int devfreq_suspend_device(struct devfreq *devfreq);
|
||||
extern int devfreq_resume_device(struct devfreq *devfreq);
|
||||
|
||||
|
@@ -446,9 +446,9 @@ int __must_check dm_set_target_max_io_len(struct dm_target *ti, sector_t len);
|
||||
/*
|
||||
* Table reference counting.
|
||||
*/
|
||||
struct dm_table *dm_get_live_table(struct mapped_device *md);
|
||||
void dm_table_get(struct dm_table *t);
|
||||
void dm_table_put(struct dm_table *t);
|
||||
struct dm_table *dm_get_live_table(struct mapped_device *md, int *srcu_idx);
|
||||
void dm_put_live_table(struct mapped_device *md, int srcu_idx);
|
||||
void dm_sync_table(struct mapped_device *md);
|
||||
|
||||
/*
|
||||
* Queries
|
||||
|
@@ -71,6 +71,10 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
|
||||
* the specific driver's probe to initial the matched device.
|
||||
* @remove: Called when a device removed from this bus.
|
||||
* @shutdown: Called at shut-down time to quiesce the device.
|
||||
*
|
||||
* @online: Called to put the device back online (after offlining it).
|
||||
* @offline: Called to put the device offline for hot-removal. May fail.
|
||||
*
|
||||
* @suspend: Called when a device on this bus wants to go to sleep mode.
|
||||
* @resume: Called to bring a device on this bus out of sleep mode.
|
||||
* @pm: Power management operations of this bus, callback the specific
|
||||
@@ -105,6 +109,9 @@ struct bus_type {
|
||||
int (*remove)(struct device *dev);
|
||||
void (*shutdown)(struct device *dev);
|
||||
|
||||
int (*online)(struct device *dev);
|
||||
int (*offline)(struct device *dev);
|
||||
|
||||
int (*suspend)(struct device *dev, pm_message_t state);
|
||||
int (*resume)(struct device *dev);
|
||||
|
||||
@@ -652,6 +659,9 @@ struct acpi_dev_node {
|
||||
* device (i.e. the bus driver that discovered the device).
|
||||
* @iommu_group: IOMMU group the device belongs to.
|
||||
*
|
||||
* @offline_disabled: If set, the device is permanently online.
|
||||
* @offline: Set after successful invocation of bus type's .offline().
|
||||
*
|
||||
* At the lowest level, every device in a Linux system is represented by an
|
||||
* instance of struct device. The device structure contains the information
|
||||
* that the device model core needs to model the system. Most subsystems,
|
||||
@@ -723,6 +733,9 @@ struct device {
|
||||
|
||||
void (*release)(struct device *dev);
|
||||
struct iommu_group *iommu_group;
|
||||
|
||||
bool offline_disabled:1;
|
||||
bool offline:1;
|
||||
};
|
||||
|
||||
static inline struct device *kobj_to_dev(struct kobject *kobj)
|
||||
@@ -859,6 +872,15 @@ extern const char *device_get_devnode(struct device *dev,
|
||||
extern void *dev_get_drvdata(const struct device *dev);
|
||||
extern int dev_set_drvdata(struct device *dev, void *data);
|
||||
|
||||
static inline bool device_supports_offline(struct device *dev)
|
||||
{
|
||||
return dev->bus && dev->bus->offline && dev->bus->online;
|
||||
}
|
||||
|
||||
extern void lock_device_hotplug(void);
|
||||
extern void unlock_device_hotplug(void);
|
||||
extern int device_offline(struct device *dev);
|
||||
extern int device_online(struct device *dev);
|
||||
/*
|
||||
* Root device objects for grouping under /sys/devices
|
||||
*/
|
||||
|
@@ -66,7 +66,6 @@ enum dma_transaction_type {
|
||||
DMA_PQ,
|
||||
DMA_XOR_VAL,
|
||||
DMA_PQ_VAL,
|
||||
DMA_MEMSET,
|
||||
DMA_INTERRUPT,
|
||||
DMA_SG,
|
||||
DMA_PRIVATE,
|
||||
@@ -520,7 +519,6 @@ struct dma_tx_state {
|
||||
* @device_prep_dma_xor_val: prepares a xor validation operation
|
||||
* @device_prep_dma_pq: prepares a pq operation
|
||||
* @device_prep_dma_pq_val: prepares a pqzero_sum operation
|
||||
* @device_prep_dma_memset: prepares a memset operation
|
||||
* @device_prep_dma_interrupt: prepares an end of chain interrupt operation
|
||||
* @device_prep_slave_sg: prepares a slave dma operation
|
||||
* @device_prep_dma_cyclic: prepare a cyclic dma operation suitable for audio.
|
||||
@@ -573,9 +571,6 @@ struct dma_device {
|
||||
struct dma_chan *chan, dma_addr_t *pq, dma_addr_t *src,
|
||||
unsigned int src_cnt, const unsigned char *scf, size_t len,
|
||||
enum sum_check_flags *pqres, unsigned long flags);
|
||||
struct dma_async_tx_descriptor *(*device_prep_dma_memset)(
|
||||
struct dma_chan *chan, dma_addr_t dest, int value, size_t len,
|
||||
unsigned long flags);
|
||||
struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)(
|
||||
struct dma_chan *chan, unsigned long flags);
|
||||
struct dma_async_tx_descriptor *(*device_prep_dma_sg)(
|
||||
|
@@ -51,6 +51,5 @@ dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
|
||||
void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs);
|
||||
void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
|
||||
cycle_t dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
|
||||
void dw_apb_clocksource_unregister(struct dw_apb_clocksource *dw_cs);
|
||||
|
||||
#endif /* __DW_APB_TIMER_H__ */
|
||||
|
@@ -594,8 +594,8 @@ extern u64 efi_mem_attribute (unsigned long phys_addr, unsigned long size);
|
||||
extern int __init efi_uart_console_only (void);
|
||||
extern void efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
struct resource *data_resource, struct resource *bss_resource);
|
||||
extern unsigned long efi_get_time(void);
|
||||
extern int efi_set_rtc_mmss(unsigned long nowtime);
|
||||
extern void efi_get_time(struct timespec *now);
|
||||
extern int efi_set_rtc_mmss(const struct timespec *now);
|
||||
extern void efi_reserve_boot_services(void);
|
||||
extern struct efi_memory_map memmap;
|
||||
|
||||
|
@@ -7,6 +7,7 @@
|
||||
#ifdef CONFIG_BLOCK
|
||||
|
||||
struct io_cq;
|
||||
struct elevator_type;
|
||||
|
||||
typedef int (elevator_merge_fn) (struct request_queue *, struct request **,
|
||||
struct bio *);
|
||||
@@ -35,7 +36,8 @@ typedef void (elevator_put_req_fn) (struct request *);
|
||||
typedef void (elevator_activate_req_fn) (struct request_queue *, struct request *);
|
||||
typedef void (elevator_deactivate_req_fn) (struct request_queue *, struct request *);
|
||||
|
||||
typedef int (elevator_init_fn) (struct request_queue *);
|
||||
typedef int (elevator_init_fn) (struct request_queue *,
|
||||
struct elevator_type *e);
|
||||
typedef void (elevator_exit_fn) (struct elevator_queue *);
|
||||
|
||||
struct elevator_ops
|
||||
@@ -155,6 +157,8 @@ extern int elevator_init(struct request_queue *, char *);
|
||||
extern void elevator_exit(struct elevator_queue *);
|
||||
extern int elevator_change(struct request_queue *, const char *);
|
||||
extern bool elv_rq_merge_ok(struct request *, struct bio *);
|
||||
extern struct elevator_queue *elevator_alloc(struct request_queue *,
|
||||
struct elevator_type *);
|
||||
|
||||
/*
|
||||
* Helper functions.
|
||||
|
@@ -24,17 +24,17 @@ static inline void * __must_check ERR_PTR(long error)
|
||||
return (void *) error;
|
||||
}
|
||||
|
||||
static inline long __must_check PTR_ERR(const void *ptr)
|
||||
static inline long __must_check PTR_ERR(__force const void *ptr)
|
||||
{
|
||||
return (long) ptr;
|
||||
}
|
||||
|
||||
static inline long __must_check IS_ERR(const void *ptr)
|
||||
static inline long __must_check IS_ERR(__force const void *ptr)
|
||||
{
|
||||
return IS_ERR_VALUE((unsigned long)ptr);
|
||||
}
|
||||
|
||||
static inline long __must_check IS_ERR_OR_NULL(const void *ptr)
|
||||
static inline long __must_check IS_ERR_OR_NULL(__force const void *ptr)
|
||||
{
|
||||
return !ptr || IS_ERR_VALUE((unsigned long)ptr);
|
||||
}
|
||||
@@ -46,13 +46,13 @@ static inline long __must_check IS_ERR_OR_NULL(const void *ptr)
|
||||
* Explicitly cast an error-valued pointer to another pointer type in such a
|
||||
* way as to make it clear that's what's going on.
|
||||
*/
|
||||
static inline void * __must_check ERR_CAST(const void *ptr)
|
||||
static inline void * __must_check ERR_CAST(__force const void *ptr)
|
||||
{
|
||||
/* cast away the const */
|
||||
return (void *) ptr;
|
||||
}
|
||||
|
||||
static inline int __must_check PTR_RET(const void *ptr)
|
||||
static inline int __must_check PTR_RET(__force const void *ptr)
|
||||
{
|
||||
if (IS_ERR(ptr))
|
||||
return PTR_ERR(ptr);
|
||||
|
@@ -624,7 +624,7 @@ extern void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u3
|
||||
extern void fb_set_suspend(struct fb_info *info, int state);
|
||||
extern int fb_get_color_depth(struct fb_var_screeninfo *var,
|
||||
struct fb_fix_screeninfo *fix);
|
||||
extern int fb_get_options(char *name, char **option);
|
||||
extern int fb_get_options(const char *name, char **option);
|
||||
extern int fb_new_modelist(struct fb_info *info);
|
||||
|
||||
extern struct fb_info *registered_fb[FB_MAX];
|
||||
|
@@ -59,10 +59,10 @@ extern void bpf_jit_free(struct sk_filter *fp);
|
||||
static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen,
|
||||
u32 pass, void *image)
|
||||
{
|
||||
pr_err("flen=%u proglen=%u pass=%u image=%p\n",
|
||||
pr_err("flen=%u proglen=%u pass=%u image=%pK\n",
|
||||
flen, proglen, pass, image);
|
||||
if (image)
|
||||
print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS,
|
||||
print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_OFFSET,
|
||||
16, 1, image, proglen, false);
|
||||
}
|
||||
#define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns)
|
||||
|
@@ -251,8 +251,10 @@ struct ieee1394_device_id;
|
||||
|
||||
struct fw_driver {
|
||||
struct device_driver driver;
|
||||
int (*probe)(struct fw_unit *unit, const struct ieee1394_device_id *id);
|
||||
/* Called when the parent device sits through a bus reset. */
|
||||
void (*update)(struct fw_unit *unit);
|
||||
void (*remove)(struct fw_unit *unit);
|
||||
const struct ieee1394_device_id *id_table;
|
||||
};
|
||||
|
||||
|
@@ -3,6 +3,7 @@
|
||||
#ifndef FREEZER_H_INCLUDED
|
||||
#define FREEZER_H_INCLUDED
|
||||
|
||||
#include <linux/debug_locks.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/atomic.h>
|
||||
@@ -46,7 +47,11 @@ extern int freeze_kernel_threads(void);
|
||||
extern void thaw_processes(void);
|
||||
extern void thaw_kernel_threads(void);
|
||||
|
||||
static inline bool try_to_freeze(void)
|
||||
/*
|
||||
* DO NOT ADD ANY NEW CALLERS OF THIS FUNCTION
|
||||
* If try_to_freeze causes a lockdep warning it means the caller may deadlock
|
||||
*/
|
||||
static inline bool try_to_freeze_unsafe(void)
|
||||
{
|
||||
might_sleep();
|
||||
if (likely(!freezing(current)))
|
||||
@@ -54,6 +59,13 @@ static inline bool try_to_freeze(void)
|
||||
return __refrigerator(false);
|
||||
}
|
||||
|
||||
static inline bool try_to_freeze(void)
|
||||
{
|
||||
if (!(current->flags & PF_NOFREEZE))
|
||||
debug_check_no_locks_held();
|
||||
return try_to_freeze_unsafe();
|
||||
}
|
||||
|
||||
extern bool freeze_task(struct task_struct *p);
|
||||
extern bool set_freezable(void);
|
||||
|
||||
@@ -115,6 +127,14 @@ static inline void freezer_count(void)
|
||||
try_to_freeze();
|
||||
}
|
||||
|
||||
/* DO NOT ADD ANY NEW CALLERS OF THIS FUNCTION */
|
||||
static inline void freezer_count_unsafe(void)
|
||||
{
|
||||
current->flags &= ~PF_FREEZER_SKIP;
|
||||
smp_mb();
|
||||
try_to_freeze_unsafe();
|
||||
}
|
||||
|
||||
/**
|
||||
* freezer_should_skip - whether to skip a task when determining frozen
|
||||
* state is reached
|
||||
@@ -139,28 +159,86 @@ static inline bool freezer_should_skip(struct task_struct *p)
|
||||
}
|
||||
|
||||
/*
|
||||
* These macros are intended to be used whenever you want allow a sleeping
|
||||
* These functions are intended to be used whenever you want allow a sleeping
|
||||
* task to be frozen. Note that neither return any clear indication of
|
||||
* whether a freeze event happened while in this function.
|
||||
*/
|
||||
|
||||
/* Like schedule(), but should not block the freezer. */
|
||||
#define freezable_schedule() \
|
||||
({ \
|
||||
freezer_do_not_count(); \
|
||||
schedule(); \
|
||||
freezer_count(); \
|
||||
})
|
||||
static inline void freezable_schedule(void)
|
||||
{
|
||||
freezer_do_not_count();
|
||||
schedule();
|
||||
freezer_count();
|
||||
}
|
||||
|
||||
/* DO NOT ADD ANY NEW CALLERS OF THIS FUNCTION */
|
||||
static inline void freezable_schedule_unsafe(void)
|
||||
{
|
||||
freezer_do_not_count();
|
||||
schedule();
|
||||
freezer_count_unsafe();
|
||||
}
|
||||
|
||||
/*
|
||||
* Like freezable_schedule_timeout(), but should not block the freezer. Do not
|
||||
* call this with locks held.
|
||||
*/
|
||||
static inline long freezable_schedule_timeout(long timeout)
|
||||
{
|
||||
long __retval;
|
||||
freezer_do_not_count();
|
||||
__retval = schedule_timeout(timeout);
|
||||
freezer_count();
|
||||
return __retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Like schedule_timeout_interruptible(), but should not block the freezer. Do not
|
||||
* call this with locks held.
|
||||
*/
|
||||
static inline long freezable_schedule_timeout_interruptible(long timeout)
|
||||
{
|
||||
long __retval;
|
||||
freezer_do_not_count();
|
||||
__retval = schedule_timeout_interruptible(timeout);
|
||||
freezer_count();
|
||||
return __retval;
|
||||
}
|
||||
|
||||
/* Like schedule_timeout_killable(), but should not block the freezer. */
|
||||
#define freezable_schedule_timeout_killable(timeout) \
|
||||
({ \
|
||||
long __retval; \
|
||||
freezer_do_not_count(); \
|
||||
__retval = schedule_timeout_killable(timeout); \
|
||||
freezer_count(); \
|
||||
__retval; \
|
||||
})
|
||||
static inline long freezable_schedule_timeout_killable(long timeout)
|
||||
{
|
||||
long __retval;
|
||||
freezer_do_not_count();
|
||||
__retval = schedule_timeout_killable(timeout);
|
||||
freezer_count();
|
||||
return __retval;
|
||||
}
|
||||
|
||||
/* DO NOT ADD ANY NEW CALLERS OF THIS FUNCTION */
|
||||
static inline long freezable_schedule_timeout_killable_unsafe(long timeout)
|
||||
{
|
||||
long __retval;
|
||||
freezer_do_not_count();
|
||||
__retval = schedule_timeout_killable(timeout);
|
||||
freezer_count_unsafe();
|
||||
return __retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Like schedule_hrtimeout_range(), but should not block the freezer. Do not
|
||||
* call this with locks held.
|
||||
*/
|
||||
static inline int freezable_schedule_hrtimeout_range(ktime_t *expires,
|
||||
unsigned long delta, const enum hrtimer_mode mode)
|
||||
{
|
||||
int __retval;
|
||||
freezer_do_not_count();
|
||||
__retval = schedule_hrtimeout_range(expires, delta, mode);
|
||||
freezer_count();
|
||||
return __retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Freezer-friendly wrappers around wait_event_interruptible(),
|
||||
@@ -177,33 +255,45 @@ static inline bool freezer_should_skip(struct task_struct *p)
|
||||
__retval; \
|
||||
})
|
||||
|
||||
/* DO NOT ADD ANY NEW CALLERS OF THIS FUNCTION */
|
||||
#define wait_event_freezekillable_unsafe(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
freezer_do_not_count(); \
|
||||
__retval = wait_event_killable(wq, (condition)); \
|
||||
freezer_count_unsafe(); \
|
||||
__retval; \
|
||||
})
|
||||
|
||||
#define wait_event_freezable(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
for (;;) { \
|
||||
__retval = wait_event_interruptible(wq, \
|
||||
(condition) || freezing(current)); \
|
||||
if (__retval || (condition)) \
|
||||
break; \
|
||||
try_to_freeze(); \
|
||||
} \
|
||||
freezer_do_not_count(); \
|
||||
__retval = wait_event_interruptible(wq, (condition)); \
|
||||
freezer_count(); \
|
||||
__retval; \
|
||||
})
|
||||
|
||||
#define wait_event_freezable_timeout(wq, condition, timeout) \
|
||||
({ \
|
||||
long __retval = timeout; \
|
||||
for (;;) { \
|
||||
__retval = wait_event_interruptible_timeout(wq, \
|
||||
(condition) || freezing(current), \
|
||||
__retval); \
|
||||
if (__retval <= 0 || (condition)) \
|
||||
break; \
|
||||
try_to_freeze(); \
|
||||
} \
|
||||
freezer_do_not_count(); \
|
||||
__retval = wait_event_interruptible_timeout(wq, (condition), \
|
||||
__retval); \
|
||||
freezer_count(); \
|
||||
__retval; \
|
||||
})
|
||||
|
||||
#define wait_event_freezable_exclusive(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
freezer_do_not_count(); \
|
||||
__retval = wait_event_interruptible_exclusive(wq, condition); \
|
||||
freezer_count(); \
|
||||
__retval; \
|
||||
})
|
||||
|
||||
|
||||
#else /* !CONFIG_FREEZER */
|
||||
static inline bool frozen(struct task_struct *p) { return false; }
|
||||
static inline bool freezing(struct task_struct *p) { return false; }
|
||||
@@ -225,18 +315,37 @@ static inline void set_freezable(void) {}
|
||||
|
||||
#define freezable_schedule() schedule()
|
||||
|
||||
#define freezable_schedule_unsafe() schedule()
|
||||
|
||||
#define freezable_schedule_timeout(timeout) schedule_timeout(timeout)
|
||||
|
||||
#define freezable_schedule_timeout_interruptible(timeout) \
|
||||
schedule_timeout_interruptible(timeout)
|
||||
|
||||
#define freezable_schedule_timeout_killable(timeout) \
|
||||
schedule_timeout_killable(timeout)
|
||||
|
||||
#define freezable_schedule_timeout_killable_unsafe(timeout) \
|
||||
schedule_timeout_killable(timeout)
|
||||
|
||||
#define freezable_schedule_hrtimeout_range(expires, delta, mode) \
|
||||
schedule_hrtimeout_range(expires, delta, mode)
|
||||
|
||||
#define wait_event_freezable(wq, condition) \
|
||||
wait_event_interruptible(wq, condition)
|
||||
|
||||
#define wait_event_freezable_timeout(wq, condition, timeout) \
|
||||
wait_event_interruptible_timeout(wq, condition, timeout)
|
||||
|
||||
#define wait_event_freezable_exclusive(wq, condition) \
|
||||
wait_event_interruptible_exclusive(wq, condition)
|
||||
|
||||
#define wait_event_freezekillable(wq, condition) \
|
||||
wait_event_killable(wq, condition)
|
||||
|
||||
#define wait_event_freezekillable_unsafe(wq, condition) \
|
||||
wait_event_killable(wq, condition)
|
||||
|
||||
#endif /* !CONFIG_FREEZER */
|
||||
|
||||
#endif /* FREEZER_H_INCLUDED */
|
||||
|
@@ -372,14 +372,15 @@ struct address_space_operations {
|
||||
int (*get_xip_mem)(struct address_space *, pgoff_t, int,
|
||||
void **, unsigned long *);
|
||||
/*
|
||||
* migrate the contents of a page to the specified target. If sync
|
||||
* is false, it must not block.
|
||||
* migrate the contents of a page to the specified target. If
|
||||
* migrate_mode is MIGRATE_ASYNC, it must not block.
|
||||
*/
|
||||
int (*migratepage) (struct address_space *,
|
||||
struct page *, struct page *, enum migrate_mode);
|
||||
int (*launder_page) (struct page *);
|
||||
int (*is_partially_uptodate) (struct page *, read_descriptor_t *,
|
||||
unsigned long);
|
||||
void (*is_dirty_writeback) (struct page *, bool *, bool *);
|
||||
int (*error_remove_page)(struct address_space *, struct page *);
|
||||
|
||||
/* swapfile support */
|
||||
@@ -908,6 +909,7 @@ struct file_lock_operations {
|
||||
|
||||
struct lock_manager_operations {
|
||||
int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
|
||||
unsigned long (*lm_owner_key)(struct file_lock *);
|
||||
void (*lm_notify)(struct file_lock *); /* unblock callback */
|
||||
int (*lm_grant)(struct file_lock *, struct file_lock *, int);
|
||||
void (*lm_break)(struct file_lock *);
|
||||
@@ -926,14 +928,33 @@ int locks_in_grace(struct net *);
|
||||
/* that will die - we need it for nfs_lock_info */
|
||||
#include <linux/nfs_fs_i.h>
|
||||
|
||||
/*
|
||||
* struct file_lock represents a generic "file lock". It's used to represent
|
||||
* POSIX byte range locks, BSD (flock) locks, and leases. It's important to
|
||||
* note that the same struct is used to represent both a request for a lock and
|
||||
* the lock itself, but the same object is never used for both.
|
||||
*
|
||||
* FIXME: should we create a separate "struct lock_request" to help distinguish
|
||||
* these two uses?
|
||||
*
|
||||
* The i_flock list is ordered by:
|
||||
*
|
||||
* 1) lock type -- FL_LEASEs first, then FL_FLOCK, and finally FL_POSIX
|
||||
* 2) lock owner
|
||||
* 3) lock range start
|
||||
* 4) lock range end
|
||||
*
|
||||
* Obviously, the last two criteria only matter for POSIX locks.
|
||||
*/
|
||||
struct file_lock {
|
||||
struct file_lock *fl_next; /* singly linked list for this inode */
|
||||
struct list_head fl_link; /* doubly linked list of all locks */
|
||||
struct hlist_node fl_link; /* node in global lists */
|
||||
struct list_head fl_block; /* circular list of blocked processes */
|
||||
fl_owner_t fl_owner;
|
||||
unsigned int fl_flags;
|
||||
unsigned char fl_type;
|
||||
unsigned int fl_pid;
|
||||
int fl_link_cpu; /* what cpu's list is this on? */
|
||||
struct pid *fl_nspid;
|
||||
wait_queue_head_t fl_wait;
|
||||
struct file *fl_file;
|
||||
@@ -994,7 +1015,7 @@ extern void locks_release_private(struct file_lock *);
|
||||
extern void posix_test_lock(struct file *, struct file_lock *);
|
||||
extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
|
||||
extern int posix_lock_file_wait(struct file *, struct file_lock *);
|
||||
extern int posix_unblock_lock(struct file *, struct file_lock *);
|
||||
extern int posix_unblock_lock(struct file_lock *);
|
||||
extern int vfs_test_lock(struct file *, struct file_lock *);
|
||||
extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
|
||||
extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
|
||||
@@ -1006,9 +1027,6 @@ extern int vfs_setlease(struct file *, long, struct file_lock **);
|
||||
extern int lease_modify(struct file_lock **, int);
|
||||
extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
|
||||
extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
|
||||
extern void locks_delete_block(struct file_lock *waiter);
|
||||
extern void lock_flocks(void);
|
||||
extern void unlock_flocks(void);
|
||||
#else /* !CONFIG_FILE_LOCKING */
|
||||
static inline int fcntl_getlk(struct file *file, struct flock __user *user)
|
||||
{
|
||||
@@ -1084,8 +1102,7 @@ static inline int posix_lock_file_wait(struct file *filp, struct file_lock *fl)
|
||||
return -ENOLCK;
|
||||
}
|
||||
|
||||
static inline int posix_unblock_lock(struct file *filp,
|
||||
struct file_lock *waiter)
|
||||
static inline int posix_unblock_lock(struct file_lock *waiter)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
@@ -1150,19 +1167,6 @@ static inline int lock_may_write(struct inode *inode, loff_t start,
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void locks_delete_block(struct file_lock *waiter)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void lock_flocks(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void unlock_flocks(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_FILE_LOCKING */
|
||||
|
||||
|
||||
@@ -1580,6 +1584,7 @@ struct inode_operations {
|
||||
int (*atomic_open)(struct inode *, struct dentry *,
|
||||
struct file *, unsigned open_flag,
|
||||
umode_t create_mode, int *opened);
|
||||
int (*tmpfile) (struct inode *, struct dentry *, umode_t);
|
||||
} ____cacheline_aligned;
|
||||
|
||||
ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
|
||||
@@ -1743,6 +1748,7 @@ struct super_operations {
|
||||
#define I_REFERENCED (1 << 8)
|
||||
#define __I_DIO_WAKEUP 9
|
||||
#define I_DIO_WAKEUP (1 << I_DIO_WAKEUP)
|
||||
#define I_LINKABLE (1 << 10)
|
||||
|
||||
#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
|
||||
|
||||
@@ -1896,7 +1902,6 @@ extern int current_umask(void);
|
||||
extern struct kobject *fs_kobj;
|
||||
|
||||
#define MAX_RW_COUNT (INT_MAX & PAGE_CACHE_MASK)
|
||||
extern int rw_verify_area(int, struct file *, loff_t *, size_t);
|
||||
|
||||
#define FLOCK_VERIFY_READ 1
|
||||
#define FLOCK_VERIFY_WRITE 2
|
||||
@@ -2309,7 +2314,6 @@ extern struct file * open_exec(const char *);
|
||||
/* fs/dcache.c -- generic fs support functions */
|
||||
extern int is_subdir(struct dentry *, struct dentry *);
|
||||
extern int path_is_under(struct path *, struct path *);
|
||||
extern ino_t find_inode_number(struct dentry *, struct qstr *);
|
||||
|
||||
#include <linux/err.h>
|
||||
|
||||
@@ -2424,9 +2428,12 @@ extern void
|
||||
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
|
||||
extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
|
||||
extern loff_t no_llseek(struct file *file, loff_t offset, int whence);
|
||||
extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
|
||||
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
|
||||
extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
|
||||
int whence, loff_t maxsize, loff_t eof);
|
||||
extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
|
||||
int whence, loff_t size);
|
||||
extern int generic_file_open(struct inode * inode, struct file * filp);
|
||||
extern int nonseekable_open(struct inode * inode, struct file * filp);
|
||||
|
||||
|
@@ -38,7 +38,7 @@ static inline int fsnotify_parent(struct path *path, struct dentry *dentry, __u3
|
||||
static inline int fsnotify_perm(struct file *file, int mask)
|
||||
{
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
struct inode *inode = file_inode(file);
|
||||
__u32 fsnotify_mask = 0;
|
||||
int ret;
|
||||
|
||||
@@ -192,7 +192,7 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry)
|
||||
static inline void fsnotify_access(struct file *file)
|
||||
{
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
struct inode *inode = file_inode(file);
|
||||
__u32 mask = FS_ACCESS;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
@@ -210,7 +210,7 @@ static inline void fsnotify_access(struct file *file)
|
||||
static inline void fsnotify_modify(struct file *file)
|
||||
{
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
struct inode *inode = file_inode(file);
|
||||
__u32 mask = FS_MODIFY;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
@@ -228,7 +228,7 @@ static inline void fsnotify_modify(struct file *file)
|
||||
static inline void fsnotify_open(struct file *file)
|
||||
{
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
struct inode *inode = file_inode(file);
|
||||
__u32 mask = FS_OPEN;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
|
@@ -566,10 +566,6 @@ static inline ssize_t ftrace_filter_write(struct file *file, const char __user *
|
||||
size_t cnt, loff_t *ppos) { return -ENODEV; }
|
||||
static inline ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf,
|
||||
size_t cnt, loff_t *ppos) { return -ENODEV; }
|
||||
static inline loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int whence)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int
|
||||
ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; }
|
||||
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||
@@ -828,10 +824,15 @@ enum ftrace_dump_mode;
|
||||
|
||||
extern enum ftrace_dump_mode ftrace_dump_on_oops;
|
||||
|
||||
extern void disable_trace_on_warning(void);
|
||||
extern int __disable_trace_on_warning;
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
#define INIT_TRACE_RECURSION .trace_recursion = 0,
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_TRACING */
|
||||
static inline void disable_trace_on_warning(void) { }
|
||||
#endif /* CONFIG_TRACING */
|
||||
|
||||
#ifndef INIT_TRACE_RECURSION
|
||||
|
@@ -209,7 +209,7 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags)
|
||||
* 0x9 => DMA or NORMAL (MOVABLE+DMA)
|
||||
* 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
|
||||
* 0xb => BAD (MOVABLE+HIGHMEM+DMA)
|
||||
* 0xc => DMA32 (MOVABLE+HIGHMEM+DMA32)
|
||||
* 0xc => DMA32 (MOVABLE+DMA32)
|
||||
* 0xd => BAD (MOVABLE+DMA32+DMA)
|
||||
* 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
|
||||
* 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
|
||||
|
@@ -60,9 +60,9 @@ extern pmd_t *page_check_address_pmd(struct page *page,
|
||||
#define HPAGE_PMD_NR (1<<HPAGE_PMD_ORDER)
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
#define HPAGE_PMD_SHIFT HPAGE_SHIFT
|
||||
#define HPAGE_PMD_MASK HPAGE_MASK
|
||||
#define HPAGE_PMD_SIZE HPAGE_SIZE
|
||||
#define HPAGE_PMD_SHIFT PMD_SHIFT
|
||||
#define HPAGE_PMD_SIZE ((1UL) << HPAGE_PMD_SHIFT)
|
||||
#define HPAGE_PMD_MASK (~(HPAGE_PMD_SIZE - 1))
|
||||
|
||||
extern bool is_vma_temporary_stack(struct vm_area_struct *vma);
|
||||
|
||||
@@ -123,7 +123,7 @@ extern void __split_huge_page_pmd(struct vm_area_struct *vma,
|
||||
} while (0)
|
||||
extern void split_huge_page_pmd_mm(struct mm_struct *mm, unsigned long address,
|
||||
pmd_t *pmd);
|
||||
#if HPAGE_PMD_ORDER > MAX_ORDER
|
||||
#if HPAGE_PMD_ORDER >= MAX_ORDER
|
||||
#error "hugepages can't be allocated by the buddy allocator"
|
||||
#endif
|
||||
extern int hugepage_madvise(struct vm_area_struct *vma,
|
||||
|
@@ -55,7 +55,6 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
|
||||
void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
|
||||
unsigned long start, unsigned long end,
|
||||
struct page *ref_page);
|
||||
int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
|
||||
void hugetlb_report_meminfo(struct seq_file *);
|
||||
int hugetlb_report_node_meminfo(int, char *);
|
||||
void hugetlb_show_meminfo(void);
|
||||
@@ -69,6 +68,10 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
||||
int dequeue_hwpoisoned_huge_page(struct page *page);
|
||||
void copy_huge_page(struct page *dst, struct page *src);
|
||||
|
||||
#ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE
|
||||
pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud);
|
||||
#endif
|
||||
|
||||
extern unsigned long hugepages_treat_as_movable;
|
||||
extern const unsigned long hugetlb_zero, hugetlb_infinity;
|
||||
extern int sysctl_hugetlb_shm_group;
|
||||
@@ -110,7 +113,6 @@ static inline unsigned long hugetlb_total_pages(void)
|
||||
#define follow_hugetlb_page(m,v,p,vs,a,b,i,w) ({ BUG(); 0; })
|
||||
#define follow_huge_addr(mm, addr, write) ERR_PTR(-EINVAL)
|
||||
#define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; })
|
||||
#define hugetlb_prefault(mapping, vma) ({ BUG(); 0; })
|
||||
static inline void hugetlb_report_meminfo(struct seq_file *m)
|
||||
{
|
||||
}
|
||||
|
@@ -658,7 +658,6 @@ struct twl4030_power_data {
|
||||
bool use_poweroff; /* Board is wired for TWL poweroff */
|
||||
};
|
||||
|
||||
extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
|
||||
extern int twl4030_remove_script(u8 flags);
|
||||
extern void twl4030_power_off(void);
|
||||
|
||||
@@ -726,7 +725,7 @@ struct twl4030_platform_data {
|
||||
struct regulator_init_data *clk32kg;
|
||||
struct regulator_init_data *v1v8;
|
||||
struct regulator_init_data *v2v1;
|
||||
/* TWL6025 LDO regulators */
|
||||
/* TWL6032 LDO regulators */
|
||||
struct regulator_init_data *ldo1;
|
||||
struct regulator_init_data *ldo2;
|
||||
struct regulator_init_data *ldo3;
|
||||
@@ -736,7 +735,7 @@ struct twl4030_platform_data {
|
||||
struct regulator_init_data *ldo7;
|
||||
struct regulator_init_data *ldoln;
|
||||
struct regulator_init_data *ldousb;
|
||||
/* TWL6025 DCDC regulators */
|
||||
/* TWL6032 DCDC regulators */
|
||||
struct regulator_init_data *smps3;
|
||||
struct regulator_init_data *smps4;
|
||||
struct regulator_init_data *vio6025;
|
||||
@@ -753,7 +752,7 @@ struct twl_regulator_driver_data {
|
||||
#define TPS_SUBSET BIT(1) /* tps659[23]0 have fewer LDOs */
|
||||
#define TWL5031 BIT(2) /* twl5031 has different registers */
|
||||
#define TWL6030_CLASS BIT(3) /* TWL6030 class */
|
||||
#define TWL6025_SUBCLASS BIT(4) /* TWL6025 has changed registers */
|
||||
#define TWL6032_SUBCLASS BIT(4) /* TWL6032 has changed registers */
|
||||
#define TWL4030_ALLOW_UNSUPPORTED BIT(5) /* Some voltages are possible
|
||||
* but not officially supported.
|
||||
* This flag is necessary to
|
||||
@@ -840,20 +839,20 @@ static inline int twl4030charger_usb_en(int enable) { return 0; }
|
||||
#define TWL6030_REG_CLK32KG 48
|
||||
|
||||
/* LDOs on 6025 have different names */
|
||||
#define TWL6025_REG_LDO2 49
|
||||
#define TWL6025_REG_LDO4 50
|
||||
#define TWL6025_REG_LDO3 51
|
||||
#define TWL6025_REG_LDO5 52
|
||||
#define TWL6025_REG_LDO1 53
|
||||
#define TWL6025_REG_LDO7 54
|
||||
#define TWL6025_REG_LDO6 55
|
||||
#define TWL6025_REG_LDOLN 56
|
||||
#define TWL6025_REG_LDOUSB 57
|
||||
#define TWL6032_REG_LDO2 49
|
||||
#define TWL6032_REG_LDO4 50
|
||||
#define TWL6032_REG_LDO3 51
|
||||
#define TWL6032_REG_LDO5 52
|
||||
#define TWL6032_REG_LDO1 53
|
||||
#define TWL6032_REG_LDO7 54
|
||||
#define TWL6032_REG_LDO6 55
|
||||
#define TWL6032_REG_LDOLN 56
|
||||
#define TWL6032_REG_LDOUSB 57
|
||||
|
||||
/* 6025 DCDC supplies */
|
||||
#define TWL6025_REG_SMPS3 58
|
||||
#define TWL6025_REG_SMPS4 59
|
||||
#define TWL6025_REG_VIO 60
|
||||
#define TWL6032_REG_SMPS3 58
|
||||
#define TWL6032_REG_SMPS4 59
|
||||
#define TWL6032_REG_VIO 60
|
||||
|
||||
|
||||
#endif /* End of __TWL4030_H */
|
||||
|
@@ -146,6 +146,7 @@ static inline u16 ieee80211_sn_sub(u16 sn1, u16 sn2)
|
||||
#define IEEE80211_MAX_RTS_THRESHOLD 2353
|
||||
#define IEEE80211_MAX_AID 2007
|
||||
#define IEEE80211_MAX_TIM_LEN 251
|
||||
#define IEEE80211_MAX_MESH_PEERINGS 63
|
||||
/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
|
||||
6.2.1.1.2.
|
||||
|
||||
@@ -1829,6 +1830,15 @@ enum ieee80211_key_len {
|
||||
WLAN_KEY_LEN_AES_CMAC = 16,
|
||||
};
|
||||
|
||||
#define IEEE80211_WEP_IV_LEN 4
|
||||
#define IEEE80211_WEP_ICV_LEN 4
|
||||
#define IEEE80211_CCMP_HDR_LEN 8
|
||||
#define IEEE80211_CCMP_MIC_LEN 8
|
||||
#define IEEE80211_CCMP_PN_LEN 6
|
||||
#define IEEE80211_TKIP_IV_LEN 8
|
||||
#define IEEE80211_TKIP_ICV_LEN 4
|
||||
#define IEEE80211_CMAC_PN_LEN 6
|
||||
|
||||
/* Public action codes */
|
||||
enum ieee80211_pub_actioncode {
|
||||
WLAN_PUB_ACTION_EXT_CHANSW_ANN = 4,
|
||||
|
@@ -12,5 +12,6 @@ struct ifla_vf_info {
|
||||
__u32 qos;
|
||||
__u32 tx_rate;
|
||||
__u32 spoofchk;
|
||||
__u32 linkstate;
|
||||
};
|
||||
#endif /* _LINUX_IF_LINK_H */
|
||||
|
@@ -8,7 +8,7 @@
|
||||
#include <net/netlink.h>
|
||||
#include <linux/u64_stats_sync.h>
|
||||
|
||||
#if defined(CONFIG_MACVTAP) || defined(CONFIG_MACVTAP_MODULE)
|
||||
#if IS_ENABLED(CONFIG_MACVTAP)
|
||||
struct socket *macvtap_get_socket(struct file *);
|
||||
#else
|
||||
#include <linux/err.h>
|
||||
@@ -50,7 +50,7 @@ struct macvlan_pcpu_stats {
|
||||
* Maximum times a macvtap device can be opened. This can be used to
|
||||
* configure the number of receive queue, e.g. for multiqueue virtio.
|
||||
*/
|
||||
#define MAX_MACVTAP_QUEUES (NR_CPUS < 16 ? NR_CPUS : 16)
|
||||
#define MAX_MACVTAP_QUEUES 16
|
||||
|
||||
#define MACVLAN_MC_FILTER_BITS 8
|
||||
#define MACVLAN_MC_FILTER_SZ (1 << MACVLAN_MC_FILTER_BITS)
|
||||
@@ -65,12 +65,18 @@ struct macvlan_dev {
|
||||
|
||||
DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ);
|
||||
|
||||
netdev_features_t set_features;
|
||||
enum macvlan_mode mode;
|
||||
u16 flags;
|
||||
int (*receive)(struct sk_buff *skb);
|
||||
int (*forward)(struct net_device *dev, struct sk_buff *skb);
|
||||
struct macvtap_queue *taps[MAX_MACVTAP_QUEUES];
|
||||
/* This array tracks active taps. */
|
||||
struct macvtap_queue __rcu *taps[MAX_MACVTAP_QUEUES];
|
||||
/* This list tracks all taps (both enabled and disabled) */
|
||||
struct list_head queue_list;
|
||||
int numvtaps;
|
||||
int numqueues;
|
||||
netdev_features_t tap_features;
|
||||
int minor;
|
||||
};
|
||||
|
||||
|
@@ -69,6 +69,7 @@ struct team_port {
|
||||
s32 priority; /* lower number ~ higher priority */
|
||||
u16 queue_id;
|
||||
struct list_head qom_list; /* node in queue override mapping list */
|
||||
struct rcu_head rcu;
|
||||
long mode_priv[0];
|
||||
};
|
||||
|
||||
@@ -228,6 +229,16 @@ static inline struct team_port *team_get_port_by_index(struct team *team,
|
||||
return port;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int team_num_to_port_index(struct team *team, int num)
|
||||
{
|
||||
int en_port_count = ACCESS_ONCE(team->en_port_count);
|
||||
|
||||
if (unlikely(!en_port_count))
|
||||
return 0;
|
||||
return num % en_port_count;
|
||||
}
|
||||
|
||||
static inline struct team_port *team_get_port_by_index_rcu(struct team *team,
|
||||
int port_index)
|
||||
{
|
||||
|
@@ -243,8 +243,6 @@ static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb,
|
||||
return skb;
|
||||
}
|
||||
|
||||
#define HAVE_VLAN_PUT_TAG
|
||||
|
||||
/**
|
||||
* vlan_put_tag - inserts VLAN tag according to device features
|
||||
* @skb: skbuff to tag
|
||||
|
@@ -84,6 +84,7 @@ struct ip_mc_list {
|
||||
struct ip_mc_list *next;
|
||||
struct ip_mc_list __rcu *next_rcu;
|
||||
};
|
||||
struct ip_mc_list __rcu *next_hash;
|
||||
struct timer_list timer;
|
||||
int users;
|
||||
atomic_t refcnt;
|
||||
|
@@ -50,12 +50,17 @@ struct ipv4_devconf {
|
||||
DECLARE_BITMAP(state, IPV4_DEVCONF_MAX);
|
||||
};
|
||||
|
||||
#define MC_HASH_SZ_LOG 9
|
||||
|
||||
struct in_device {
|
||||
struct net_device *dev;
|
||||
atomic_t refcnt;
|
||||
int dead;
|
||||
struct in_ifaddr *ifa_list; /* IP ifaddr chain */
|
||||
|
||||
struct ip_mc_list __rcu *mc_list; /* IP multicast filter chain */
|
||||
struct ip_mc_list __rcu * __rcu *mc_hash;
|
||||
|
||||
int mc_count; /* Number of installed mcasts */
|
||||
spinlock_t mc_tomb_lock;
|
||||
struct ip_mc_list *mc_tomb;
|
||||
|
@@ -93,13 +93,13 @@
|
||||
|
||||
#define __exit __section(.exit.text) __exitused __cold notrace
|
||||
|
||||
/* Used for HOTPLUG_CPU */
|
||||
#define __cpuinit __section(.cpuinit.text) __cold notrace
|
||||
#define __cpuinitdata __section(.cpuinit.data)
|
||||
#define __cpuinitconst __constsection(.cpuinit.rodata)
|
||||
#define __cpuexit __section(.cpuexit.text) __exitused __cold notrace
|
||||
#define __cpuexitdata __section(.cpuexit.data)
|
||||
#define __cpuexitconst __constsection(.cpuexit.rodata)
|
||||
/* temporary, until all users are removed */
|
||||
#define __cpuinit
|
||||
#define __cpuinitdata
|
||||
#define __cpuinitconst
|
||||
#define __cpuexit
|
||||
#define __cpuexitdata
|
||||
#define __cpuexitconst
|
||||
|
||||
/* Used for MEMORY_HOTPLUG */
|
||||
#define __meminit __section(.meminit.text) __cold notrace
|
||||
@@ -118,9 +118,8 @@
|
||||
#define __INITRODATA .section ".init.rodata","a",%progbits
|
||||
#define __FINITDATA .previous
|
||||
|
||||
#define __CPUINIT .section ".cpuinit.text", "ax"
|
||||
#define __CPUINITDATA .section ".cpuinit.data", "aw"
|
||||
#define __CPUINITRODATA .section ".cpuinit.rodata", "a"
|
||||
/* temporary, until all users are removed */
|
||||
#define __CPUINIT
|
||||
|
||||
#define __MEMINIT .section ".meminit.text", "ax"
|
||||
#define __MEMINITDATA .section ".meminit.data", "aw"
|
||||
|
@@ -1,23 +0,0 @@
|
||||
#ifndef __LINUX_TI_AM335X_TSC_H
|
||||
#define __LINUX_TI_AM335X_TSC_H
|
||||
|
||||
/**
|
||||
* struct tsc_data Touchscreen wire configuration
|
||||
* @wires: Wires refer to application modes
|
||||
* i.e. 4/5/8 wire touchscreen support
|
||||
* on the platform.
|
||||
* @x_plate_resistance: X plate resistance.
|
||||
* @steps_to_configure: The sequencer supports a total of
|
||||
* 16 programmable steps.
|
||||
* A step configured to read a single
|
||||
* co-ordinate value, can be applied
|
||||
* more number of times for better results.
|
||||
*/
|
||||
|
||||
struct tsc_data {
|
||||
int wires;
|
||||
int x_plate_resistance;
|
||||
int steps_to_configure;
|
||||
};
|
||||
|
||||
#endif
|
@@ -14,7 +14,6 @@
|
||||
/* Board specific touch screen initial values */
|
||||
struct touchscreen_init_data {
|
||||
int poll_period; /* ms */
|
||||
int vref; /* non-zero to leave vref on */
|
||||
__u16 min_pressure; /* min reading to be treated as a touch */
|
||||
__u16 vendor;
|
||||
__u16 product;
|
||||
|
@@ -76,4 +76,29 @@ void devm_ioremap_release(struct device *dev, void *res);
|
||||
#define arch_has_dev_port() (1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Some systems (x86 without PAT) have a somewhat reliable way to mark a
|
||||
* physical address range such that uncached mappings will actually
|
||||
* end up write-combining. This facility should be used in conjunction
|
||||
* with pgprot_writecombine, ioremap-wc, or set_memory_wc, since it has
|
||||
* no effect if the per-page mechanisms are functional.
|
||||
* (On x86 without PAT, these functions manipulate MTRRs.)
|
||||
*
|
||||
* arch_phys_del_wc(0) or arch_phys_del_wc(any error code) is guaranteed
|
||||
* to have no effect.
|
||||
*/
|
||||
#ifndef arch_phys_wc_add
|
||||
static inline int __must_check arch_phys_wc_add(unsigned long base,
|
||||
unsigned long size)
|
||||
{
|
||||
return 0; /* It worked (i.e. did nothing). */
|
||||
}
|
||||
|
||||
static inline void arch_phys_wc_del(int handle)
|
||||
{
|
||||
}
|
||||
|
||||
#define arch_phys_wc_add arch_phys_wc_add
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_IO_H */
|
||||
|
@@ -73,57 +73,48 @@ struct irq_domain_chip_generic;
|
||||
/**
|
||||
* struct irq_domain - Hardware interrupt number translation object
|
||||
* @link: Element in global irq_domain list.
|
||||
* @revmap_type: Method used for reverse mapping hwirq numbers to linux irq. This
|
||||
* will be one of the IRQ_DOMAIN_MAP_* values.
|
||||
* @revmap_data: Revmap method specific data.
|
||||
* @name: Name of interrupt domain
|
||||
* @ops: pointer to irq_domain methods
|
||||
* @host_data: private data pointer for use by owner. Not touched by irq_domain
|
||||
* core code.
|
||||
* @irq_base: Start of irq_desc range assigned to the irq_domain. The creator
|
||||
* of the irq_domain is responsible for allocating the array of
|
||||
* irq_desc structures.
|
||||
* @nr_irq: Number of irqs managed by the irq domain
|
||||
* @hwirq_base: Starting number for hwirqs managed by the irq domain
|
||||
* @of_node: (optional) Pointer to device tree nodes associated with the
|
||||
* irq_domain. Used when decoding device tree interrupt specifiers.
|
||||
*
|
||||
* Optional elements
|
||||
* @of_node: Pointer to device tree nodes associated with the irq_domain. Used
|
||||
* when decoding device tree interrupt specifiers.
|
||||
* @gc: Pointer to a list of generic chips. There is a helper function for
|
||||
* setting up one or more generic chips for interrupt controllers
|
||||
* drivers using the generic chip library which uses this pointer.
|
||||
*
|
||||
* Revmap data, used internally by irq_domain
|
||||
* @revmap_direct_max_irq: The largest hwirq that can be set for controllers that
|
||||
* support direct mapping
|
||||
* @revmap_size: Size of the linear map table @linear_revmap[]
|
||||
* @revmap_tree: Radix map tree for hwirqs that don't fit in the linear map
|
||||
* @linear_revmap: Linear table of hwirq->virq reverse mappings
|
||||
*/
|
||||
struct irq_domain {
|
||||
struct list_head link;
|
||||
|
||||
/* type of reverse mapping_technique */
|
||||
unsigned int revmap_type;
|
||||
union {
|
||||
struct {
|
||||
unsigned int size;
|
||||
unsigned int first_irq;
|
||||
irq_hw_number_t first_hwirq;
|
||||
} legacy;
|
||||
struct {
|
||||
unsigned int size;
|
||||
unsigned int *revmap;
|
||||
} linear;
|
||||
struct {
|
||||
unsigned int max_irq;
|
||||
} nomap;
|
||||
struct radix_tree_root tree;
|
||||
} revmap_data;
|
||||
const char *name;
|
||||
const struct irq_domain_ops *ops;
|
||||
void *host_data;
|
||||
irq_hw_number_t inval_irq;
|
||||
|
||||
/* Optional device node pointer */
|
||||
/* Optional data */
|
||||
struct device_node *of_node;
|
||||
/* Optional pointer to generic interrupt chips */
|
||||
struct irq_domain_chip_generic *gc;
|
||||
|
||||
/* reverse map data. The linear map gets appended to the irq_domain */
|
||||
irq_hw_number_t hwirq_max;
|
||||
unsigned int revmap_direct_max_irq;
|
||||
unsigned int revmap_size;
|
||||
struct radix_tree_root revmap_tree;
|
||||
unsigned int linear_revmap[];
|
||||
};
|
||||
|
||||
#define IRQ_DOMAIN_MAP_LEGACY 0 /* driver allocated fixed range of irqs.
|
||||
* ie. legacy 8259, gets irqs 1..15 */
|
||||
#define IRQ_DOMAIN_MAP_NOMAP 1 /* no fast reverse mapping */
|
||||
#define IRQ_DOMAIN_MAP_LINEAR 2 /* linear map of interrupts */
|
||||
#define IRQ_DOMAIN_MAP_TREE 3 /* radix tree */
|
||||
|
||||
#ifdef CONFIG_IRQ_DOMAIN
|
||||
struct irq_domain *__irq_domain_add(struct device_node *of_node, int size,
|
||||
irq_hw_number_t hwirq_max, int direct_max,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data);
|
||||
struct irq_domain *irq_domain_add_simple(struct device_node *of_node,
|
||||
unsigned int size,
|
||||
unsigned int first_irq,
|
||||
@@ -135,21 +126,30 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
|
||||
irq_hw_number_t first_hwirq,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data);
|
||||
struct irq_domain *irq_domain_add_linear(struct device_node *of_node,
|
||||
unsigned int size,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data);
|
||||
struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
|
||||
unsigned int max_irq,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data);
|
||||
struct irq_domain *irq_domain_add_tree(struct device_node *of_node,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data);
|
||||
|
||||
extern struct irq_domain *irq_find_host(struct device_node *node);
|
||||
extern void irq_set_default_host(struct irq_domain *host);
|
||||
|
||||
/**
|
||||
* irq_domain_add_linear() - Allocate and register a linear revmap irq_domain.
|
||||
* @of_node: pointer to interrupt controller's device tree node.
|
||||
* @size: Number of interrupts in the domain.
|
||||
* @ops: map/unmap domain callbacks
|
||||
* @host_data: Controller private data pointer
|
||||
*/
|
||||
static inline struct irq_domain *irq_domain_add_linear(struct device_node *of_node,
|
||||
unsigned int size,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data)
|
||||
{
|
||||
return __irq_domain_add(of_node, size, size, 0, ops, host_data);
|
||||
}
|
||||
static inline struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
|
||||
unsigned int max_irq,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data)
|
||||
{
|
||||
return __irq_domain_add(of_node, 0, max_irq, max_irq, ops, host_data);
|
||||
}
|
||||
static inline struct irq_domain *irq_domain_add_legacy_isa(
|
||||
struct device_node *of_node,
|
||||
const struct irq_domain_ops *ops,
|
||||
@@ -158,21 +158,40 @@ static inline struct irq_domain *irq_domain_add_legacy_isa(
|
||||
return irq_domain_add_legacy(of_node, NUM_ISA_INTERRUPTS, 0, 0, ops,
|
||||
host_data);
|
||||
}
|
||||
static inline struct irq_domain *irq_domain_add_tree(struct device_node *of_node,
|
||||
const struct irq_domain_ops *ops,
|
||||
void *host_data)
|
||||
{
|
||||
return __irq_domain_add(of_node, 0, ~0, 0, ops, host_data);
|
||||
}
|
||||
|
||||
extern void irq_domain_remove(struct irq_domain *host);
|
||||
|
||||
extern int irq_domain_associate_many(struct irq_domain *domain,
|
||||
unsigned int irq_base,
|
||||
irq_hw_number_t hwirq_base, int count);
|
||||
static inline int irq_domain_associate(struct irq_domain *domain, unsigned int irq,
|
||||
irq_hw_number_t hwirq)
|
||||
{
|
||||
return irq_domain_associate_many(domain, irq, hwirq, 1);
|
||||
}
|
||||
extern int irq_domain_associate(struct irq_domain *domain, unsigned int irq,
|
||||
irq_hw_number_t hwirq);
|
||||
extern void irq_domain_associate_many(struct irq_domain *domain,
|
||||
unsigned int irq_base,
|
||||
irq_hw_number_t hwirq_base, int count);
|
||||
|
||||
extern unsigned int irq_create_mapping(struct irq_domain *host,
|
||||
irq_hw_number_t hwirq);
|
||||
extern void irq_dispose_mapping(unsigned int virq);
|
||||
|
||||
/**
|
||||
* irq_linear_revmap() - Find a linux irq from a hw irq number.
|
||||
* @domain: domain owning this hardware interrupt
|
||||
* @hwirq: hardware irq number in that domain space
|
||||
*
|
||||
* This is a fast path alternative to irq_find_mapping() that can be
|
||||
* called directly by irq controller code to save a handful of
|
||||
* instructions. It is always safe to call, but won't find irqs mapped
|
||||
* using the radix tree.
|
||||
*/
|
||||
static inline unsigned int irq_linear_revmap(struct irq_domain *domain,
|
||||
irq_hw_number_t hwirq)
|
||||
{
|
||||
return hwirq < domain->revmap_size ? domain->linear_revmap[hwirq] : 0;
|
||||
}
|
||||
extern unsigned int irq_find_mapping(struct irq_domain *host,
|
||||
irq_hw_number_t hwirq);
|
||||
extern unsigned int irq_create_direct_mapping(struct irq_domain *host);
|
||||
@@ -186,9 +205,6 @@ static inline int irq_create_identity_mapping(struct irq_domain *host,
|
||||
return irq_create_strict_mappings(host, hwirq, hwirq, 1);
|
||||
}
|
||||
|
||||
extern unsigned int irq_linear_revmap(struct irq_domain *host,
|
||||
irq_hw_number_t hwirq);
|
||||
|
||||
extern const struct irq_domain_ops irq_domain_simple_ops;
|
||||
|
||||
/* stock xlate functions */
|
||||
@@ -202,14 +218,6 @@ int irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr,
|
||||
const u32 *intspec, unsigned int intsize,
|
||||
irq_hw_number_t *out_hwirq, unsigned int *out_type);
|
||||
|
||||
#if defined(CONFIG_OF_IRQ)
|
||||
extern void irq_domain_generate_simple(const struct of_device_id *match,
|
||||
u64 phys_base, unsigned int irq_start);
|
||||
#else /* CONFIG_OF_IRQ */
|
||||
static inline void irq_domain_generate_simple(const struct of_device_id *match,
|
||||
u64 phys_base, unsigned int irq_start) { }
|
||||
#endif /* !CONFIG_OF_IRQ */
|
||||
|
||||
#else /* CONFIG_IRQ_DOMAIN */
|
||||
static inline void irq_dispose_mapping(unsigned int virq) { }
|
||||
#endif /* !CONFIG_IRQ_DOMAIN */
|
||||
|
@@ -139,6 +139,10 @@ static inline u64 get_jiffies_64(void)
|
||||
((__s64)(a) - (__s64)(b) >= 0))
|
||||
#define time_before_eq64(a,b) time_after_eq64(b,a)
|
||||
|
||||
#define time_in_range64(a, b, c) \
|
||||
(time_after_eq64(a, b) && \
|
||||
time_before_eq64(a, c))
|
||||
|
||||
/*
|
||||
* These four macros compare jiffies and 'a' for convenience.
|
||||
*/
|
||||
|
@@ -561,9 +561,6 @@ int __trace_bprintk(unsigned long ip, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int __trace_printk(unsigned long ip, const char *fmt, ...);
|
||||
|
||||
extern int __trace_bputs(unsigned long ip, const char *str);
|
||||
extern int __trace_puts(unsigned long ip, const char *str, int size);
|
||||
|
||||
/**
|
||||
* trace_puts - write a string into the ftrace buffer
|
||||
* @str: the string to record
|
||||
@@ -599,6 +596,8 @@ extern int __trace_puts(unsigned long ip, const char *str, int size);
|
||||
else \
|
||||
__trace_puts(_THIS_IP_, str, strlen(str)); \
|
||||
})
|
||||
extern int __trace_bputs(unsigned long ip, const char *str);
|
||||
extern int __trace_puts(unsigned long ip, const char *str, int size);
|
||||
|
||||
extern void trace_dump_stack(int skip);
|
||||
|
||||
|
@@ -229,7 +229,8 @@ static inline ktime_t timespec_to_ktime(const struct timespec ts)
|
||||
static inline ktime_t timeval_to_ktime(const struct timeval tv)
|
||||
{
|
||||
return (ktime_t) { .tv = { .sec = (s32)tv.tv_sec,
|
||||
.nsec = (s32)tv.tv_usec * 1000 } };
|
||||
.nsec = (s32)(tv.tv_usec *
|
||||
NSEC_PER_USEC) } };
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -320,12 +321,17 @@ static inline s64 ktime_us_delta(const ktime_t later, const ktime_t earlier)
|
||||
|
||||
static inline ktime_t ktime_add_us(const ktime_t kt, const u64 usec)
|
||||
{
|
||||
return ktime_add_ns(kt, usec * 1000);
|
||||
return ktime_add_ns(kt, usec * NSEC_PER_USEC);
|
||||
}
|
||||
|
||||
static inline ktime_t ktime_add_ms(const ktime_t kt, const u64 msec)
|
||||
{
|
||||
return ktime_add_ns(kt, msec * NSEC_PER_MSEC);
|
||||
}
|
||||
|
||||
static inline ktime_t ktime_sub_us(const ktime_t kt, const u64 usec)
|
||||
{
|
||||
return ktime_sub_ns(kt, usec * 1000);
|
||||
return ktime_sub_ns(kt, usec * NSEC_PER_USEC);
|
||||
}
|
||||
|
||||
extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs);
|
||||
@@ -338,7 +344,8 @@ extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs);
|
||||
*
|
||||
* Returns true if there was a successful conversion, false if kt was 0.
|
||||
*/
|
||||
static inline bool ktime_to_timespec_cond(const ktime_t kt, struct timespec *ts)
|
||||
static inline __must_check bool ktime_to_timespec_cond(const ktime_t kt,
|
||||
struct timespec *ts)
|
||||
{
|
||||
if (kt.tv64) {
|
||||
*ts = ktime_to_timespec(kt);
|
||||
@@ -366,7 +373,15 @@ extern void ktime_get_ts(struct timespec *ts);
|
||||
static inline ktime_t ns_to_ktime(u64 ns)
|
||||
{
|
||||
static const ktime_t ktime_zero = { .tv64 = 0 };
|
||||
|
||||
return ktime_add_ns(ktime_zero, ns);
|
||||
}
|
||||
|
||||
static inline ktime_t ms_to_ktime(u64 ms)
|
||||
{
|
||||
static const ktime_t ktime_zero = { .tv64 = 0 };
|
||||
|
||||
return ktime_add_ms(ktime_zero, ms);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -125,6 +125,7 @@ static inline bool is_error_page(struct page *page)
|
||||
#define KVM_REQ_MCLOCK_INPROGRESS 19
|
||||
#define KVM_REQ_EPR_EXIT 20
|
||||
#define KVM_REQ_SCAN_IOAPIC 21
|
||||
#define KVM_REQ_GLOBAL_CLOCK_UPDATE 22
|
||||
|
||||
#define KVM_USERSPACE_IRQ_SOURCE_ID 0
|
||||
#define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1
|
||||
@@ -145,7 +146,8 @@ struct kvm_io_range {
|
||||
#define NR_IOBUS_DEVS 1000
|
||||
|
||||
struct kvm_io_bus {
|
||||
int dev_count;
|
||||
int dev_count;
|
||||
int ioeventfd_count;
|
||||
struct kvm_io_range range[];
|
||||
};
|
||||
|
||||
|
@@ -112,7 +112,12 @@ static inline void lcd_set_power(struct lcd_device *ld, int power)
|
||||
|
||||
extern struct lcd_device *lcd_device_register(const char *name,
|
||||
struct device *parent, void *devdata, struct lcd_ops *ops);
|
||||
extern struct lcd_device *devm_lcd_device_register(struct device *dev,
|
||||
const char *name, struct device *parent,
|
||||
void *devdata, struct lcd_ops *ops);
|
||||
extern void lcd_device_unregister(struct lcd_device *ld);
|
||||
extern void devm_lcd_device_unregister(struct device *dev,
|
||||
struct lcd_device *ld);
|
||||
|
||||
#define to_lcd_device(obj) container_of(obj, struct lcd_device, dev)
|
||||
|
||||
|
@@ -399,6 +399,7 @@ enum {
|
||||
ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */
|
||||
ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */
|
||||
ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */
|
||||
ATA_HORKAGE_ATAPI_DMADIR = (1 << 18), /* device requires dmadir */
|
||||
|
||||
/* DMA mask for user DMA control: User visible values; DO NOT
|
||||
renumber */
|
||||
@@ -746,6 +747,7 @@ struct ata_port {
|
||||
/* Flags that change dynamically, protected by ap->lock */
|
||||
unsigned int pflags; /* ATA_PFLAG_xxx */
|
||||
unsigned int print_id; /* user visible unique port ID */
|
||||
unsigned int local_port_no; /* host local port num */
|
||||
unsigned int port_no; /* 0 based port no. inside the host */
|
||||
|
||||
#ifdef CONFIG_ATA_SFF
|
||||
@@ -908,6 +910,9 @@ struct ata_port_operations {
|
||||
ssize_t (*sw_activity_show)(struct ata_device *dev, char *buf);
|
||||
ssize_t (*sw_activity_store)(struct ata_device *dev,
|
||||
enum sw_activity val);
|
||||
ssize_t (*transmit_led_message)(struct ata_port *ap, u32 state,
|
||||
ssize_t size);
|
||||
|
||||
/*
|
||||
* Obsolete
|
||||
*/
|
||||
|
87
include/linux/lz4.h
Normal file
87
include/linux/lz4.h
Normal file
@@ -0,0 +1,87 @@
|
||||
#ifndef __LZ4_H__
|
||||
#define __LZ4_H__
|
||||
/*
|
||||
* LZ4 Kernel Interface
|
||||
*
|
||||
* Copyright (C) 2013, LG Electronics, Kyungsik Lee <kyungsik.lee@lge.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#define LZ4_MEM_COMPRESS (4096 * sizeof(unsigned char *))
|
||||
#define LZ4HC_MEM_COMPRESS (65538 * sizeof(unsigned char *))
|
||||
|
||||
/*
|
||||
* lz4_compressbound()
|
||||
* Provides the maximum size that LZ4 may output in a "worst case" scenario
|
||||
* (input data not compressible)
|
||||
*/
|
||||
static inline size_t lz4_compressbound(size_t isize)
|
||||
{
|
||||
return isize + (isize / 255) + 16;
|
||||
}
|
||||
|
||||
/*
|
||||
* lz4_compress()
|
||||
* src : source address of the original data
|
||||
* src_len : size of the original data
|
||||
* dst : output buffer address of the compressed data
|
||||
* This requires 'dst' of size LZ4_COMPRESSBOUND.
|
||||
* dst_len : is the output size, which is returned after compress done
|
||||
* workmem : address of the working memory.
|
||||
* This requires 'workmem' of size LZ4_MEM_COMPRESS.
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer and workmem must be already allocated with
|
||||
* the defined size.
|
||||
*/
|
||||
int lz4_compress(const unsigned char *src, size_t src_len,
|
||||
unsigned char *dst, size_t *dst_len, void *wrkmem);
|
||||
|
||||
/*
|
||||
* lz4hc_compress()
|
||||
* src : source address of the original data
|
||||
* src_len : size of the original data
|
||||
* dst : output buffer address of the compressed data
|
||||
* This requires 'dst' of size LZ4_COMPRESSBOUND.
|
||||
* dst_len : is the output size, which is returned after compress done
|
||||
* workmem : address of the working memory.
|
||||
* This requires 'workmem' of size LZ4HC_MEM_COMPRESS.
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer and workmem must be already allocated with
|
||||
* the defined size.
|
||||
*/
|
||||
int lz4hc_compress(const unsigned char *src, size_t src_len,
|
||||
unsigned char *dst, size_t *dst_len, void *wrkmem);
|
||||
|
||||
/*
|
||||
* lz4_decompress()
|
||||
* src : source address of the compressed data
|
||||
* src_len : is the input size, whcih is returned after decompress done
|
||||
* dest : output buffer address of the decompressed data
|
||||
* actual_dest_len: is the size of uncompressed data, supposing it's known
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer must be already allocated.
|
||||
* slightly faster than lz4_decompress_unknownoutputsize()
|
||||
*/
|
||||
int lz4_decompress(const char *src, size_t *src_len, char *dest,
|
||||
size_t actual_dest_len);
|
||||
|
||||
/*
|
||||
* lz4_decompress_unknownoutputsize()
|
||||
* src : source address of the compressed data
|
||||
* src_len : is the input size, therefore the compressed size
|
||||
* dest : output buffer address of the decompressed data
|
||||
* dest_len: is the max size of the destination buffer, which is
|
||||
* returned with actual size of decompressed data after
|
||||
* decompress done
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer must be already allocated.
|
||||
*/
|
||||
int lz4_decompress_unknownoutputsize(const char *src, size_t src_len,
|
||||
char *dest, size_t *dest_len);
|
||||
#endif
|
@@ -14,6 +14,8 @@
|
||||
#define MARVELL_PHY_ID_88E1149R 0x01410e50
|
||||
#define MARVELL_PHY_ID_88E1240 0x01410e30
|
||||
#define MARVELL_PHY_ID_88E1318S 0x01410e90
|
||||
#define MARVELL_PHY_ID_88E1116R 0x01410e40
|
||||
#define MARVELL_PHY_ID_88E1510 0x01410dd0
|
||||
|
||||
/* struct phy_device dev_flags definitions */
|
||||
#define MARVELL_PHY_M1145_FLAGS_RESISTANCE 0x00000001
|
||||
|
@@ -77,7 +77,8 @@ extern void mem_cgroup_uncharge_cache_page(struct page *page);
|
||||
|
||||
bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg,
|
||||
struct mem_cgroup *memcg);
|
||||
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg);
|
||||
bool task_in_mem_cgroup(struct task_struct *task,
|
||||
const struct mem_cgroup *memcg);
|
||||
|
||||
extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
|
||||
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
|
||||
@@ -273,10 +274,10 @@ static inline bool mm_match_cgroup(struct mm_struct *mm,
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline int task_in_mem_cgroup(struct task_struct *task,
|
||||
const struct mem_cgroup *memcg)
|
||||
static inline bool task_in_mem_cgroup(struct task_struct *task,
|
||||
const struct mem_cgroup *memcg)
|
||||
{
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline struct cgroup_subsys_state
|
||||
|
@@ -234,6 +234,8 @@ static inline void unlock_memory_hotplug(void) {}
|
||||
|
||||
extern int is_mem_section_removable(unsigned long pfn, unsigned long nr_pages);
|
||||
extern void try_offline_node(int nid);
|
||||
extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
|
||||
extern void remove_memory(int nid, u64 start, u64 size);
|
||||
|
||||
#else
|
||||
static inline int is_mem_section_removable(unsigned long pfn,
|
||||
@@ -243,15 +245,23 @@ static inline int is_mem_section_removable(unsigned long pfn,
|
||||
}
|
||||
|
||||
static inline void try_offline_node(int nid) {}
|
||||
|
||||
static inline int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline void remove_memory(int nid, u64 start, u64 size) {}
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
|
||||
extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn,
|
||||
void *arg, int (*func)(struct memory_block *, void *));
|
||||
extern int mem_online_node(int nid);
|
||||
extern int add_memory(int nid, u64 start, u64 size);
|
||||
extern int arch_add_memory(int nid, u64 start, u64 size);
|
||||
extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
|
||||
extern int offline_memory_block(struct memory_block *mem);
|
||||
extern bool is_memblock_offlined(struct memory_block *mem);
|
||||
extern int remove_memory(int nid, u64 start, u64 size);
|
||||
extern void remove_memory(int nid, u64 start, u64 size);
|
||||
extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn,
|
||||
int nr_pages);
|
||||
extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms);
|
||||
|
@@ -17,7 +17,6 @@
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
#define PM80X_VERSION_MASK (0xFF) /* 80X chip ID mask */
|
||||
enum {
|
||||
CHIP_INVALID = 0,
|
||||
CHIP_PM800,
|
||||
@@ -299,8 +298,7 @@ struct pm80x_chip {
|
||||
struct regmap *regmap;
|
||||
struct regmap_irq_chip *regmap_irq_chip;
|
||||
struct regmap_irq_chip_data *irq_data;
|
||||
unsigned char version;
|
||||
int id;
|
||||
int type;
|
||||
int irq;
|
||||
int irq_mode;
|
||||
unsigned long wu_flag;
|
||||
@@ -309,8 +307,14 @@ struct pm80x_chip {
|
||||
|
||||
struct pm80x_platform_data {
|
||||
struct pm80x_rtc_pdata *rtc;
|
||||
unsigned short power_page_addr; /* power page I2C address */
|
||||
unsigned short gpadc_page_addr; /* gpadc page I2C address */
|
||||
/*
|
||||
* For the regulator not defined, set regulators[not_defined] to be
|
||||
* NULL. num_regulators are the number of regulators supposed to be
|
||||
* initialized. If all regulators are not defined, set num_regulators
|
||||
* to be 0.
|
||||
*/
|
||||
struct regulator_init_data *regulators[PM800_ID_RG_MAX];
|
||||
unsigned int num_regulators;
|
||||
int irq_mode; /* Clear interrupt by read/write(0/1) */
|
||||
int batt_det; /* enable/disable */
|
||||
int (*plat_config)(struct pm80x_chip *chip,
|
||||
@@ -363,7 +367,6 @@ static inline int pm80x_dev_resume(struct device *dev)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int pm80x_init(struct i2c_client *client,
|
||||
const struct i2c_device_id *id);
|
||||
extern int pm80x_init(struct i2c_client *client);
|
||||
extern int pm80x_deinit(void);
|
||||
#endif /* __LINUX_MFD_88PM80X_H */
|
||||
|
@@ -278,8 +278,8 @@ struct ab8500_sysctrl_platform_data {
|
||||
|
||||
#define AB9540_SYSCLK12CONFCTRL_PLL26TO38ENA BIT(0)
|
||||
#define AB9540_SYSCLK12CONFCTRL_SYSCLK12USBMUXSEL BIT(1)
|
||||
#define AB9540_SYSCLK12CONFCTRL_INT384MHZMUXSEL_MASK 0x0C
|
||||
#define AB9540_SYSCLK12CONFCTRL_INT384MHZMUXSEL_SHIFT 2
|
||||
#define AB9540_SYSCLK12CONFCTRL_INT384MHZMUXSEL0 BIT(2)
|
||||
#define AB9540_SYSCLK12CONFCTRL_INT384MHZMUXSEL1 BIT(3)
|
||||
#define AB9540_SYSCLK12CONFCTRL_SYSCLK12BUFMUX BIT(4)
|
||||
#define AB9540_SYSCLK12CONFCTRL_SYSCLK12PLLMUX BIT(5)
|
||||
#define AB9540_SYSCLK12CONFCTRL_SYSCLK2MUXVALID BIT(6)
|
||||
|
@@ -291,6 +291,8 @@ enum ab8500_version {
|
||||
#define AB8540_INT_FSYNC2R 213
|
||||
#define AB8540_INT_BITCLK2F 214
|
||||
#define AB8540_INT_BITCLK2R 215
|
||||
/* ab8540_irq_regoffset[27] -> IT[Source|Latch|Mask]33 */
|
||||
#define AB8540_INT_RTC_1S 216
|
||||
|
||||
/*
|
||||
* AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the
|
||||
|
@@ -23,6 +23,7 @@
|
||||
enum arizona_type {
|
||||
WM5102 = 1,
|
||||
WM5110 = 2,
|
||||
WM8997 = 3,
|
||||
};
|
||||
|
||||
#define ARIZONA_IRQ_GP1 0
|
||||
@@ -95,6 +96,8 @@ struct arizona {
|
||||
|
||||
struct arizona_pdata pdata;
|
||||
|
||||
unsigned int external_dcvdd:1;
|
||||
|
||||
int irq;
|
||||
struct irq_domain *virq;
|
||||
struct regmap_irq_chip_data *aod_irq_chip;
|
||||
@@ -119,5 +122,6 @@ int arizona_set_irq_wake(struct arizona *arizona, int irq, int on);
|
||||
|
||||
int wm5102_patch(struct arizona *arizona);
|
||||
int wm5110_patch(struct arizona *arizona);
|
||||
int wm8997_patch(struct arizona *arizona);
|
||||
|
||||
#endif
|
||||
|
@@ -77,7 +77,7 @@ struct arizona_micbias {
|
||||
int mV; /** Regulated voltage */
|
||||
unsigned int ext_cap:1; /** External capacitor fitted */
|
||||
unsigned int discharge:1; /** Actively discharge */
|
||||
unsigned int fast_start:1; /** Enable aggressive startup ramp rate */
|
||||
unsigned int soft_start:1; /** Disable aggressive startup ramp rate */
|
||||
unsigned int bypass:1; /** Use bypass mode */
|
||||
};
|
||||
|
||||
|
@@ -215,6 +215,9 @@
|
||||
#define ARIZONA_DAC_DIGITAL_VOLUME_6R 0x43D
|
||||
#define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E
|
||||
#define ARIZONA_NOISE_GATE_SELECT_6R 0x43F
|
||||
#define ARIZONA_DRE_ENABLE 0x440
|
||||
#define ARIZONA_DRE_CONTROL_2 0x442
|
||||
#define ARIZONA_DRE_CONTROL_3 0x443
|
||||
#define ARIZONA_DAC_AEC_CONTROL_1 0x450
|
||||
#define ARIZONA_NOISE_GATE_CONTROL 0x458
|
||||
#define ARIZONA_PDM_SPK1_CTRL_1 0x490
|
||||
@@ -1002,6 +1005,7 @@
|
||||
#define ARIZONA_DSP2_CLOCKING_1 0x1201
|
||||
#define ARIZONA_DSP2_STATUS_1 0x1204
|
||||
#define ARIZONA_DSP2_STATUS_2 0x1205
|
||||
#define ARIZONA_DSP2_STATUS_3 0x1206
|
||||
#define ARIZONA_DSP2_SCRATCH_0 0x1240
|
||||
#define ARIZONA_DSP2_SCRATCH_1 0x1241
|
||||
#define ARIZONA_DSP2_SCRATCH_2 0x1242
|
||||
@@ -1010,6 +1014,7 @@
|
||||
#define ARIZONA_DSP3_CLOCKING_1 0x1301
|
||||
#define ARIZONA_DSP3_STATUS_1 0x1304
|
||||
#define ARIZONA_DSP3_STATUS_2 0x1305
|
||||
#define ARIZONA_DSP3_STATUS_3 0x1306
|
||||
#define ARIZONA_DSP3_SCRATCH_0 0x1340
|
||||
#define ARIZONA_DSP3_SCRATCH_1 0x1341
|
||||
#define ARIZONA_DSP3_SCRATCH_2 0x1342
|
||||
@@ -1018,6 +1023,7 @@
|
||||
#define ARIZONA_DSP4_CLOCKING_1 0x1401
|
||||
#define ARIZONA_DSP4_STATUS_1 0x1404
|
||||
#define ARIZONA_DSP4_STATUS_2 0x1405
|
||||
#define ARIZONA_DSP4_STATUS_3 0x1406
|
||||
#define ARIZONA_DSP4_SCRATCH_0 0x1440
|
||||
#define ARIZONA_DSP4_SCRATCH_1 0x1441
|
||||
#define ARIZONA_DSP4_SCRATCH_2 0x1442
|
||||
@@ -3129,6 +3135,47 @@
|
||||
#define ARIZONA_OUT6R_NGATE_SRC_SHIFT 0 /* OUT6R_NGATE_SRC - [11:0] */
|
||||
#define ARIZONA_OUT6R_NGATE_SRC_WIDTH 12 /* OUT6R_NGATE_SRC - [11:0] */
|
||||
|
||||
/*
|
||||
* R1088 (0x440) - DRE Enable
|
||||
*/
|
||||
#define ARIZONA_DRE3L_ENA 0x0010 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE3L_ENA_MASK 0x0010 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE3L_ENA_SHIFT 4 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE3L_ENA_WIDTH 1 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE2R_ENA 0x0008 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2R_ENA_MASK 0x0008 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2R_ENA_SHIFT 3 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2R_ENA_WIDTH 1 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2L_ENA 0x0004 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE2L_ENA_MASK 0x0004 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE2L_ENA_SHIFT 2 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE2L_ENA_WIDTH 1 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE1R_ENA 0x0002 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1R_ENA_MASK 0x0002 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1R_ENA_SHIFT 1 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1R_ENA_WIDTH 1 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1L_ENA 0x0001 /* DRE1L_ENA */
|
||||
#define ARIZONA_DRE1L_ENA_MASK 0x0001 /* DRE1L_ENA */
|
||||
#define ARIZONA_DRE1L_ENA_SHIFT 0 /* DRE1L_ENA */
|
||||
#define ARIZONA_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */
|
||||
|
||||
/*
|
||||
* R1090 (0x442) - DRE Control 2
|
||||
*/
|
||||
#define ARIZONA_DRE_T_LOW_MASK 0x3F00 /* DRE_T_LOW - [13:8] */
|
||||
#define ARIZONA_DRE_T_LOW_SHIFT 8 /* DRE_T_LOW - [13:8] */
|
||||
#define ARIZONA_DRE_T_LOW_WIDTH 6 /* DRE_T_LOW - [13:8] */
|
||||
|
||||
/*
|
||||
* R1091 (0x443) - DRE Control 3
|
||||
*/
|
||||
#define ARIZONA_DRE_GAIN_SHIFT_MASK 0xC000 /* DRE_GAIN_SHIFT - [15:14] */
|
||||
#define ARIZONA_DRE_GAIN_SHIFT_SHIFT 14 /* DRE_GAIN_SHIFT - [15:14] */
|
||||
#define ARIZONA_DRE_GAIN_SHIFT_WIDTH 2 /* DRE_GAIN_SHIFT - [15:14] */
|
||||
#define ARIZONA_DRE_LOW_LEVEL_ABS_MASK 0x000F /* LOW_LEVEL_ABS - [3:0] */
|
||||
#define ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT 0 /* LOW_LEVEL_ABS - [3:0] */
|
||||
#define ARIZONA_DRE_LOW_LEVEL_ABS_WIDTH 4 /* LOW_LEVEL_ABS - [3:0] */
|
||||
|
||||
/*
|
||||
* R1104 (0x450) - DAC AEC Control 1
|
||||
*/
|
||||
|
@@ -28,6 +28,8 @@
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/platform_data/edma.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/*
|
||||
* Register values.
|
||||
*/
|
||||
@@ -111,8 +113,6 @@ struct davinci_vc {
|
||||
|
||||
/* Memory resources */
|
||||
void __iomem *base;
|
||||
resource_size_t pbase;
|
||||
size_t base_size;
|
||||
|
||||
/* MFD cells */
|
||||
struct mfd_cell cells[DAVINCI_VC_CELLS];
|
||||
|
@@ -134,6 +134,11 @@ enum prcmu_clock {
|
||||
PRCMU_SIACLK,
|
||||
PRCMU_SVACLK,
|
||||
PRCMU_ACLK,
|
||||
PRCMU_HVACLK, /* Ux540 only */
|
||||
PRCMU_G1CLK, /* Ux540 only */
|
||||
PRCMU_SDMMCHCLK,
|
||||
PRCMU_CAMCLK,
|
||||
PRCMU_BML8580CLK,
|
||||
PRCMU_NUM_REG_CLOCKS,
|
||||
PRCMU_SYSCLK = PRCMU_NUM_REG_CLOCKS,
|
||||
PRCMU_CDCLK,
|
||||
@@ -148,6 +153,13 @@ enum prcmu_clock {
|
||||
PRCMU_DSI0ESCCLK,
|
||||
PRCMU_DSI1ESCCLK,
|
||||
PRCMU_DSI2ESCCLK,
|
||||
/* LCD DSI PLL - Ux540 only */
|
||||
PRCMU_PLLDSI_LCD,
|
||||
PRCMU_DSI0CLK_LCD,
|
||||
PRCMU_DSI1CLK_LCD,
|
||||
PRCMU_DSI0ESCCLK_LCD,
|
||||
PRCMU_DSI1ESCCLK_LCD,
|
||||
PRCMU_DSI2ESCCLK_LCD,
|
||||
};
|
||||
|
||||
/**
|
||||
|
125
include/linux/mfd/kempld.h
Normal file
125
include/linux/mfd/kempld.h
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Kontron PLD driver definitions
|
||||
*
|
||||
* Copyright (c) 2010-2012 Kontron Europe GmbH
|
||||
* Author: Michael Brunner <michael.brunner@kontron.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License 2 as published
|
||||
* by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_MFD_KEMPLD_H_
|
||||
#define _LINUX_MFD_KEMPLD_H_
|
||||
|
||||
/* kempld register definitions */
|
||||
#define KEMPLD_IOINDEX 0xa80
|
||||
#define KEMPLD_IODATA 0xa81
|
||||
#define KEMPLD_MUTEX_KEY 0x80
|
||||
#define KEMPLD_VERSION 0x00
|
||||
#define KEMPLD_VERSION_LSB 0x00
|
||||
#define KEMPLD_VERSION_MSB 0x01
|
||||
#define KEMPLD_VERSION_GET_MINOR(x) (x & 0x1f)
|
||||
#define KEMPLD_VERSION_GET_MAJOR(x) ((x >> 5) & 0x1f)
|
||||
#define KEMPLD_VERSION_GET_NUMBER(x) ((x >> 10) & 0xf)
|
||||
#define KEMPLD_VERSION_GET_TYPE(x) ((x >> 14) & 0x3)
|
||||
#define KEMPLD_BUILDNR 0x02
|
||||
#define KEMPLD_BUILDNR_LSB 0x02
|
||||
#define KEMPLD_BUILDNR_MSB 0x03
|
||||
#define KEMPLD_FEATURE 0x04
|
||||
#define KEMPLD_FEATURE_LSB 0x04
|
||||
#define KEMPLD_FEATURE_MSB 0x05
|
||||
#define KEMPLD_FEATURE_BIT_I2C (1 << 0)
|
||||
#define KEMPLD_FEATURE_BIT_WATCHDOG (1 << 1)
|
||||
#define KEMPLD_FEATURE_BIT_GPIO (1 << 2)
|
||||
#define KEMPLD_FEATURE_MASK_UART (7 << 3)
|
||||
#define KEMPLD_FEATURE_BIT_NMI (1 << 8)
|
||||
#define KEMPLD_FEATURE_BIT_SMI (1 << 9)
|
||||
#define KEMPLD_FEATURE_BIT_SCI (1 << 10)
|
||||
#define KEMPLD_SPEC 0x06
|
||||
#define KEMPLD_SPEC_GET_MINOR(x) (x & 0x0f)
|
||||
#define KEMPLD_SPEC_GET_MAJOR(x) ((x >> 4) & 0x0f)
|
||||
#define KEMPLD_IRQ_GPIO 0x35
|
||||
#define KEMPLD_IRQ_I2C 0x36
|
||||
#define KEMPLD_CFG 0x37
|
||||
#define KEMPLD_CFG_GPIO_I2C_MUX (1 << 0)
|
||||
#define KEMPLD_CFG_BIOS_WP (1 << 7)
|
||||
|
||||
#define KEMPLD_CLK 33333333
|
||||
|
||||
#define KEMPLD_TYPE_RELEASE 0x0
|
||||
#define KEMPLD_TYPE_DEBUG 0x1
|
||||
#define KEMPLD_TYPE_CUSTOM 0x2
|
||||
|
||||
/**
|
||||
* struct kempld_info - PLD device information structure
|
||||
* @major: PLD major revision
|
||||
* @minor: PLD minor revision
|
||||
* @buildnr: PLD build number
|
||||
* @number: PLD board specific index
|
||||
* @type: PLD type
|
||||
* @spec_major: PLD FW specification major revision
|
||||
* @spec_minor: PLD FW specification minor revision
|
||||
*/
|
||||
struct kempld_info {
|
||||
unsigned int major;
|
||||
unsigned int minor;
|
||||
unsigned int buildnr;
|
||||
unsigned int number;
|
||||
unsigned int type;
|
||||
unsigned int spec_major;
|
||||
unsigned int spec_minor;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct kempld_device_data - Internal representation of the PLD device
|
||||
* @io_base: Pointer to the IO memory
|
||||
* @io_index: Pointer to the IO index register
|
||||
* @io_data: Pointer to the IO data register
|
||||
* @pld_clock: PLD clock frequency
|
||||
* @feature_mask: PLD feature mask
|
||||
* @dev: Pointer to kernel device structure
|
||||
* @info: KEMPLD info structure
|
||||
* @lock: PLD mutex
|
||||
*/
|
||||
struct kempld_device_data {
|
||||
void __iomem *io_base;
|
||||
void __iomem *io_index;
|
||||
void __iomem *io_data;
|
||||
u32 pld_clock;
|
||||
u32 feature_mask;
|
||||
struct device *dev;
|
||||
struct kempld_info info;
|
||||
struct mutex lock;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct kempld_platform_data - PLD hardware configuration structure
|
||||
* @pld_clock: PLD clock frequency
|
||||
* @gpio_base GPIO base pin number
|
||||
* @ioresource: IO addresses of the PLD
|
||||
* @get_mutex: PLD specific get_mutex callback
|
||||
* @release_mutex: PLD specific release_mutex callback
|
||||
* @get_info: PLD specific get_info callback
|
||||
* @register_cells: PLD specific register_cells callback
|
||||
*/
|
||||
struct kempld_platform_data {
|
||||
u32 pld_clock;
|
||||
int gpio_base;
|
||||
struct resource *ioresource;
|
||||
void (*get_hardware_mutex) (struct kempld_device_data *);
|
||||
void (*release_hardware_mutex) (struct kempld_device_data *);
|
||||
int (*get_info) (struct kempld_device_data *);
|
||||
int (*register_cells) (struct kempld_device_data *);
|
||||
};
|
||||
|
||||
extern void kempld_get_mutex(struct kempld_device_data *pld);
|
||||
extern void kempld_release_mutex(struct kempld_device_data *pld);
|
||||
extern u8 kempld_read8(struct kempld_device_data *pld, u8 index);
|
||||
extern void kempld_write8(struct kempld_device_data *pld, u8 index, u8 data);
|
||||
extern u16 kempld_read16(struct kempld_device_data *pld, u8 index);
|
||||
extern void kempld_write16(struct kempld_device_data *pld, u8 index, u16 data);
|
||||
extern u32 kempld_read32(struct kempld_device_data *pld, u8 index);
|
||||
extern void kempld_write32(struct kempld_device_data *pld, u8 index, u32 data);
|
||||
|
||||
#endif /* _LINUX_MFD_KEMPLD_H_ */
|
@@ -85,6 +85,19 @@ enum max77693_pmic_reg {
|
||||
MAX77693_PMIC_REG_END,
|
||||
};
|
||||
|
||||
/* MAX77693 CHG_CNFG_00 register */
|
||||
#define CHG_CNFG_00_CHG_MASK 0x1
|
||||
#define CHG_CNFG_00_BUCK_MASK 0x4
|
||||
|
||||
/* MAX77693 CHG_CNFG_09 Register */
|
||||
#define CHG_CNFG_09_CHGIN_ILIM_MASK 0x7F
|
||||
|
||||
/* MAX77693 CHG_CTRL Register */
|
||||
#define SAFEOUT_CTRL_SAFEOUT1_MASK 0x3
|
||||
#define SAFEOUT_CTRL_SAFEOUT2_MASK 0xC
|
||||
#define SAFEOUT_CTRL_ENSAFEOUT1_MASK 0x40
|
||||
#define SAFEOUT_CTRL_ENSAFEOUT2_MASK 0x80
|
||||
|
||||
/* Slave addr = 0x4A: MUIC */
|
||||
enum max77693_muic_reg {
|
||||
MAX77693_MUIC_REG_ID = 0x00,
|
||||
|
@@ -30,6 +30,20 @@
|
||||
#ifndef __LINUX_MFD_MAX77693_H
|
||||
#define __LINUX_MFD_MAX77693_H
|
||||
|
||||
/* MAX77686 regulator IDs */
|
||||
enum max77693_regulators {
|
||||
MAX77693_ESAFEOUT1 = 0,
|
||||
MAX77693_ESAFEOUT2,
|
||||
MAX77693_CHARGER,
|
||||
MAX77693_REG_MAX,
|
||||
};
|
||||
|
||||
struct max77693_regulator_data {
|
||||
int id;
|
||||
struct regulator_init_data *initdata;
|
||||
struct device_node *of_node;
|
||||
};
|
||||
|
||||
struct max77693_reg_data {
|
||||
u8 addr;
|
||||
u8 data;
|
||||
@@ -52,6 +66,10 @@ struct max77693_muic_platform_data {
|
||||
struct max77693_platform_data {
|
||||
int wakeup;
|
||||
|
||||
/* regulator data */
|
||||
struct max77693_regulator_data *regulators;
|
||||
int num_regulators;
|
||||
|
||||
/* muic data */
|
||||
struct max77693_muic_platform_data *muic_data;
|
||||
};
|
||||
|
@@ -132,9 +132,12 @@ enum {
|
||||
|
||||
#define MAX8998_ENRAMP (1 << 4)
|
||||
|
||||
struct irq_domain;
|
||||
|
||||
/**
|
||||
* struct max8998_dev - max8998 master device for sub-drivers
|
||||
* @dev: master device of the chip (can be used to access platform data)
|
||||
* @pdata: platform data for the driver and subdrivers
|
||||
* @i2c: i2c client private data for regulator
|
||||
* @rtc: i2c client private data for rtc
|
||||
* @iolock: mutex for serializing io access
|
||||
@@ -148,12 +151,14 @@ enum {
|
||||
*/
|
||||
struct max8998_dev {
|
||||
struct device *dev;
|
||||
struct max8998_platform_data *pdata;
|
||||
struct i2c_client *i2c;
|
||||
struct i2c_client *rtc;
|
||||
struct mutex iolock;
|
||||
struct mutex irqlock;
|
||||
|
||||
int irq_base;
|
||||
unsigned int irq_base;
|
||||
struct irq_domain *irq_domain;
|
||||
int irq;
|
||||
int ono;
|
||||
u8 irq_masks_cur[MAX8998_NUM_IRQ_REGS];
|
||||
|
@@ -58,10 +58,12 @@ enum {
|
||||
* max8998_regulator_data - regulator data
|
||||
* @id: regulator id
|
||||
* @initdata: regulator init data (contraints, supplies, ...)
|
||||
* @reg_node: DT node of regulator (unused on non-DT platforms)
|
||||
*/
|
||||
struct max8998_regulator_data {
|
||||
int id;
|
||||
struct regulator_init_data *initdata;
|
||||
struct device_node *reg_node;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -73,12 +75,8 @@ struct max8998_regulator_data {
|
||||
* @buck_voltage_lock: Do NOT change the values of the following six
|
||||
* registers set by buck?_voltage?. The voltage of BUCK1/2 cannot
|
||||
* be other than the preset values.
|
||||
* @buck1_voltage1: BUCK1 DVS mode 1 voltage register
|
||||
* @buck1_voltage2: BUCK1 DVS mode 2 voltage register
|
||||
* @buck1_voltage3: BUCK1 DVS mode 3 voltage register
|
||||
* @buck1_voltage4: BUCK1 DVS mode 4 voltage register
|
||||
* @buck2_voltage1: BUCK2 DVS mode 1 voltage register
|
||||
* @buck2_voltage2: BUCK2 DVS mode 2 voltage register
|
||||
* @buck1_voltage: BUCK1 DVS mode 1 voltage registers
|
||||
* @buck2_voltage: BUCK2 DVS mode 2 voltage registers
|
||||
* @buck1_set1: BUCK1 gpio pin 1 to set output voltage
|
||||
* @buck1_set2: BUCK1 gpio pin 2 to set output voltage
|
||||
* @buck1_default_idx: Default for BUCK1 gpio pin 1, 2
|
||||
@@ -100,15 +98,11 @@ struct max8998_regulator_data {
|
||||
struct max8998_platform_data {
|
||||
struct max8998_regulator_data *regulators;
|
||||
int num_regulators;
|
||||
int irq_base;
|
||||
unsigned int irq_base;
|
||||
int ono;
|
||||
bool buck_voltage_lock;
|
||||
int buck1_voltage1;
|
||||
int buck1_voltage2;
|
||||
int buck1_voltage3;
|
||||
int buck1_voltage4;
|
||||
int buck2_voltage1;
|
||||
int buck2_voltage2;
|
||||
int buck1_voltage[4];
|
||||
int buck2_voltage[2];
|
||||
int buck1_set1;
|
||||
int buck1_set2;
|
||||
int buck1_default_idx;
|
||||
|
@@ -78,20 +78,30 @@ struct mc13xxx_regulator_platform_data {
|
||||
struct mc13xxx_regulator_init_data *regulators;
|
||||
};
|
||||
|
||||
enum {
|
||||
/* MC13783 LED IDs */
|
||||
MC13783_LED_MD,
|
||||
MC13783_LED_AD,
|
||||
MC13783_LED_KP,
|
||||
MC13783_LED_R1,
|
||||
MC13783_LED_G1,
|
||||
MC13783_LED_B1,
|
||||
MC13783_LED_R2,
|
||||
MC13783_LED_G2,
|
||||
MC13783_LED_B2,
|
||||
MC13783_LED_R3,
|
||||
MC13783_LED_G3,
|
||||
MC13783_LED_B3,
|
||||
/* MC13892 LED IDs */
|
||||
MC13892_LED_MD,
|
||||
MC13892_LED_AD,
|
||||
MC13892_LED_KP,
|
||||
MC13892_LED_R,
|
||||
MC13892_LED_G,
|
||||
MC13892_LED_B,
|
||||
};
|
||||
|
||||
struct mc13xxx_led_platform_data {
|
||||
#define MC13783_LED_MD 0
|
||||
#define MC13783_LED_AD 1
|
||||
#define MC13783_LED_KP 2
|
||||
#define MC13783_LED_R1 3
|
||||
#define MC13783_LED_G1 4
|
||||
#define MC13783_LED_B1 5
|
||||
#define MC13783_LED_R2 6
|
||||
#define MC13783_LED_G2 7
|
||||
#define MC13783_LED_B2 8
|
||||
#define MC13783_LED_R3 9
|
||||
#define MC13783_LED_G3 10
|
||||
#define MC13783_LED_B3 11
|
||||
#define MC13783_LED_MAX MC13783_LED_B3
|
||||
int id;
|
||||
const char *name;
|
||||
const char *default_trigger;
|
||||
@@ -100,46 +110,36 @@ struct mc13xxx_led_platform_data {
|
||||
char max_current;
|
||||
};
|
||||
|
||||
#define MAX_LED_CONTROL_REGS 6
|
||||
|
||||
struct mc13xxx_leds_platform_data {
|
||||
int num_leds;
|
||||
struct mc13xxx_led_platform_data *led;
|
||||
int num_leds;
|
||||
|
||||
#define MC13783_LED_TRIODE_MD (1 << 0)
|
||||
#define MC13783_LED_TRIODE_AD (1 << 1)
|
||||
#define MC13783_LED_TRIODE_KP (1 << 2)
|
||||
#define MC13783_LED_BOOST_EN (1 << 3)
|
||||
#define MC13783_LED_TC1HALF (1 << 4)
|
||||
#define MC13783_LED_SLEWLIMTC (1 << 5)
|
||||
#define MC13783_LED_SLEWLIMBL (1 << 6)
|
||||
#define MC13783_LED_TRIODE_TC1 (1 << 7)
|
||||
#define MC13783_LED_TRIODE_TC2 (1 << 8)
|
||||
#define MC13783_LED_TRIODE_TC3 (1 << 9)
|
||||
int flags;
|
||||
|
||||
#define MC13783_LED_AB_DISABLED 0
|
||||
#define MC13783_LED_AB_MD1 1
|
||||
#define MC13783_LED_AB_MD12 2
|
||||
#define MC13783_LED_AB_MD123 3
|
||||
#define MC13783_LED_AB_MD1234 4
|
||||
#define MC13783_LED_AB_MD1234_AD1 5
|
||||
#define MC13783_LED_AB_MD1234_AD12 6
|
||||
#define MC13783_LED_AB_MD1_AD 7
|
||||
char abmode;
|
||||
|
||||
#define MC13783_LED_ABREF_200MV 0
|
||||
#define MC13783_LED_ABREF_400MV 1
|
||||
#define MC13783_LED_ABREF_600MV 2
|
||||
#define MC13783_LED_ABREF_800MV 3
|
||||
char abref;
|
||||
|
||||
#define MC13783_LED_PERIOD_10MS 0
|
||||
#define MC13783_LED_PERIOD_100MS 1
|
||||
#define MC13783_LED_PERIOD_500MS 2
|
||||
#define MC13783_LED_PERIOD_2S 3
|
||||
char bl_period;
|
||||
char tc1_period;
|
||||
char tc2_period;
|
||||
char tc3_period;
|
||||
/* LED Control 0 */
|
||||
#define MC13783_LED_C0_ENABLE (1 << 0)
|
||||
#define MC13783_LED_C0_TRIODE_MD (1 << 7)
|
||||
#define MC13783_LED_C0_TRIODE_AD (1 << 8)
|
||||
#define MC13783_LED_C0_TRIODE_KP (1 << 9)
|
||||
#define MC13783_LED_C0_BOOST (1 << 10)
|
||||
#define MC13783_LED_C0_ABMODE(x) (((x) & 0x7) << 11)
|
||||
#define MC13783_LED_C0_ABREF(x) (((x) & 0x3) << 14)
|
||||
/* LED Control 1 */
|
||||
#define MC13783_LED_C1_TC1HALF (1 << 18)
|
||||
#define MC13783_LED_C1_SLEWLIM (1 << 23)
|
||||
/* LED Control 2 */
|
||||
#define MC13783_LED_C2_PERIOD(x) (((x) & 0x3) << 21)
|
||||
#define MC13783_LED_C2_SLEWLIM (1 << 23)
|
||||
/* LED Control 3 */
|
||||
#define MC13783_LED_C3_PERIOD(x) (((x) & 0x3) << 21)
|
||||
#define MC13783_LED_C3_TRIODE_TC1 (1 << 23)
|
||||
/* LED Control 4 */
|
||||
#define MC13783_LED_C4_PERIOD(x) (((x) & 0x3) << 21)
|
||||
#define MC13783_LED_C4_TRIODE_TC2 (1 << 23)
|
||||
/* LED Control 5 */
|
||||
#define MC13783_LED_C5_PERIOD(x) (((x) & 0x3) << 21)
|
||||
#define MC13783_LED_C5_TRIODE_TC3 (1 << 23)
|
||||
u32 led_control[MAX_LED_CONTROL_REGS];
|
||||
};
|
||||
|
||||
struct mc13xxx_buttons_platform_data {
|
||||
|
@@ -34,6 +34,19 @@
|
||||
((a) == PALMAS_CHIP_ID))
|
||||
#define is_palmas_charger(a) ((a) == PALMAS_CHIP_CHARGER_ID)
|
||||
|
||||
/**
|
||||
* Palmas PMIC feature types
|
||||
*
|
||||
* PALMAS_PMIC_FEATURE_SMPS10_BOOST - used when the PMIC provides SMPS10_BOOST
|
||||
* regulator.
|
||||
*
|
||||
* PALMAS_PMIC_HAS(b, f) - macro to check if a bandgap device is capable of a
|
||||
* specific feature (above) or not. Return non-zero, if yes.
|
||||
*/
|
||||
#define PALMAS_PMIC_FEATURE_SMPS10_BOOST BIT(0)
|
||||
#define PALMAS_PMIC_HAS(b, f) \
|
||||
((b)->features & PALMAS_PMIC_FEATURE_ ## f)
|
||||
|
||||
struct palmas_pmic;
|
||||
struct palmas_gpadc;
|
||||
struct palmas_resource;
|
||||
@@ -54,6 +67,7 @@ struct palmas {
|
||||
/* Stored chip id */
|
||||
int id;
|
||||
|
||||
unsigned int features;
|
||||
/* IRQ Data */
|
||||
int irq;
|
||||
u32 irq_mask;
|
||||
|
@@ -575,6 +575,7 @@
|
||||
|
||||
#define CARD_PWR_CTL 0xFD50
|
||||
#define CARD_CLK_SWITCH 0xFD51
|
||||
#define RTL8411B_PACKAGE_MODE 0xFD51
|
||||
#define CARD_SHARE_MODE 0xFD52
|
||||
#define CARD_DRIVE_SEL 0xFD53
|
||||
#define CARD_STOP 0xFD54
|
||||
|
@@ -14,8 +14,6 @@
|
||||
#ifndef __LINUX_MFD_SEC_CORE_H
|
||||
#define __LINUX_MFD_SEC_CORE_H
|
||||
|
||||
#define NUM_IRQ_REGS 4
|
||||
|
||||
enum sec_device_type {
|
||||
S5M8751X,
|
||||
S5M8763X,
|
||||
@@ -44,8 +42,6 @@ struct sec_pmic_dev {
|
||||
struct regmap *regmap;
|
||||
struct i2c_client *i2c;
|
||||
struct i2c_client *rtc;
|
||||
struct mutex iolock;
|
||||
struct mutex irqlock;
|
||||
|
||||
int device_type;
|
||||
int irq_base;
|
||||
@@ -53,8 +49,6 @@ struct sec_pmic_dev {
|
||||
struct regmap_irq_chip_data *irq_data;
|
||||
|
||||
int ono;
|
||||
u8 irq_masks_cur[NUM_IRQ_REGS];
|
||||
u8 irq_masks_cache[NUM_IRQ_REGS];
|
||||
int type;
|
||||
bool wakeup;
|
||||
};
|
||||
|
@@ -189,6 +189,7 @@ enum s2mps11_regulators {
|
||||
#define S2MPS11_ENABLE_SHIFT 0x06
|
||||
#define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1)
|
||||
#define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1)
|
||||
#define S2MPS11_RAMP_DELAY 25000 /* uV/us */
|
||||
|
||||
#define S2MPS11_PMIC_EN_SHIFT 6
|
||||
#define S2MPS11_REGULATOR_MAX (S2MPS11_REG_MAX - 3)
|
||||
|
@@ -30,8 +30,8 @@
|
||||
#define REG_IDLECONFIG 0x058
|
||||
#define REG_CHARGECONFIG 0x05C
|
||||
#define REG_CHARGEDELAY 0x060
|
||||
#define REG_STEPCONFIG(n) (0x64 + ((n - 1) * 8))
|
||||
#define REG_STEPDELAY(n) (0x68 + ((n - 1) * 8))
|
||||
#define REG_STEPCONFIG(n) (0x64 + ((n) * 8))
|
||||
#define REG_STEPDELAY(n) (0x68 + ((n) * 8))
|
||||
#define REG_FIFO0CNT 0xE4
|
||||
#define REG_FIFO0THR 0xE8
|
||||
#define REG_FIFO1CNT 0xF0
|
||||
@@ -46,8 +46,6 @@
|
||||
/* Step Enable */
|
||||
#define STEPENB_MASK (0x1FFFF << 0)
|
||||
#define STEPENB(val) ((val) << 0)
|
||||
#define STPENB_STEPENB STEPENB(0x1FFFF)
|
||||
#define STPENB_STEPENB_TC STEPENB(0x1FFF)
|
||||
|
||||
/* IRQ enable */
|
||||
#define IRQENB_HW_PEN BIT(0)
|
||||
@@ -73,8 +71,6 @@
|
||||
#define STEPCONFIG_INM_ADCREFM STEPCONFIG_INM(8)
|
||||
#define STEPCONFIG_INP_MASK (0xF << 19)
|
||||
#define STEPCONFIG_INP(val) ((val) << 19)
|
||||
#define STEPCONFIG_INP_AN2 STEPCONFIG_INP(2)
|
||||
#define STEPCONFIG_INP_AN3 STEPCONFIG_INP(3)
|
||||
#define STEPCONFIG_INP_AN4 STEPCONFIG_INP(4)
|
||||
#define STEPCONFIG_INP_ADCREFM STEPCONFIG_INP(8)
|
||||
#define STEPCONFIG_FIFO1 BIT(26)
|
||||
@@ -96,7 +92,6 @@
|
||||
#define STEPCHARGE_INM_AN1 STEPCHARGE_INM(1)
|
||||
#define STEPCHARGE_INP_MASK (0xF << 19)
|
||||
#define STEPCHARGE_INP(val) ((val) << 19)
|
||||
#define STEPCHARGE_INP_AN1 STEPCHARGE_INP(1)
|
||||
#define STEPCHARGE_RFM_MASK (3 << 23)
|
||||
#define STEPCHARGE_RFM(val) ((val) << 23)
|
||||
#define STEPCHARGE_RFM_XNUR STEPCHARGE_RFM(1)
|
||||
@@ -125,22 +120,17 @@
|
||||
|
||||
#define TSCADC_CELLS 2
|
||||
|
||||
enum tscadc_cells {
|
||||
TSC_CELL,
|
||||
ADC_CELL,
|
||||
};
|
||||
|
||||
struct mfd_tscadc_board {
|
||||
struct tsc_data *tsc_init;
|
||||
struct adc_data *adc_init;
|
||||
};
|
||||
|
||||
struct ti_tscadc_dev {
|
||||
struct device *dev;
|
||||
struct regmap *regmap_tscadc;
|
||||
void __iomem *tscadc_base;
|
||||
int irq;
|
||||
int used_cells; /* 1-2 */
|
||||
int tsc_cell; /* -1 if not used */
|
||||
int adc_cell; /* -1 if not used */
|
||||
struct mfd_cell cells[TSCADC_CELLS];
|
||||
u32 reg_se_cache;
|
||||
spinlock_t reg_lock;
|
||||
|
||||
/* tsc device */
|
||||
struct titsc *tsc;
|
||||
@@ -149,4 +139,15 @@ struct ti_tscadc_dev {
|
||||
struct adc_device *adc;
|
||||
};
|
||||
|
||||
static inline struct ti_tscadc_dev *ti_tscadc_dev_get(struct platform_device *p)
|
||||
{
|
||||
struct ti_tscadc_dev **tscadc_dev = p->dev.platform_data;
|
||||
|
||||
return *tscadc_dev;
|
||||
}
|
||||
|
||||
void am335x_tsc_se_update(struct ti_tscadc_dev *tsadc);
|
||||
void am335x_tsc_se_set(struct ti_tscadc_dev *tsadc, u32 val);
|
||||
void am335x_tsc_se_clr(struct ti_tscadc_dev *tsadc, u32 val);
|
||||
|
||||
#endif
|
||||
|
@@ -81,10 +81,15 @@ int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base);
|
||||
void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state);
|
||||
void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state);
|
||||
|
||||
struct dma_chan;
|
||||
|
||||
struct tmio_mmc_dma {
|
||||
void *chan_priv_tx;
|
||||
void *chan_priv_rx;
|
||||
int slave_id_tx;
|
||||
int slave_id_rx;
|
||||
int alignment_shift;
|
||||
bool (*filter)(struct dma_chan *chan, void *arg);
|
||||
};
|
||||
|
||||
struct tmio_mmc_host;
|
||||
|
@@ -163,7 +163,6 @@ struct tps6507x_dev {
|
||||
|
||||
/* Client devices */
|
||||
struct tps6507x_pmic *pmic;
|
||||
struct tps6507x_ts *ts;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MFD_TPS6507X_H */
|
||||
|
@@ -125,8 +125,15 @@
|
||||
|
||||
#define TWL6040_HSDACENA (1 << 0)
|
||||
#define TWL6040_HSDACMODE (1 << 1)
|
||||
#define TWL6040_HSDRVENA (1 << 2)
|
||||
#define TWL6040_HSDRVMODE (1 << 3)
|
||||
|
||||
/* HFLCTL/R (0x14/0x16) fields */
|
||||
|
||||
#define TWL6040_HFDACENA (1 << 0)
|
||||
#define TWL6040_HFPGAENA (1 << 1)
|
||||
#define TWL6040_HFDRVENA (1 << 4)
|
||||
|
||||
/* VIBCTLL/R (0x18/0x1A) fields */
|
||||
|
||||
#define TWL6040_VIBENA (1 << 0)
|
||||
|
@@ -29,6 +29,7 @@ enum wm8994_type {
|
||||
|
||||
struct regulator_dev;
|
||||
struct regulator_bulk_data;
|
||||
struct irq_domain;
|
||||
|
||||
#define WM8994_NUM_GPIO_REGS 11
|
||||
#define WM8994_NUM_LDO_REGS 2
|
||||
@@ -73,6 +74,7 @@ struct wm8994 {
|
||||
|
||||
int irq;
|
||||
struct regmap_irq_chip_data *irq_data;
|
||||
struct irq_domain *edge_irq;
|
||||
|
||||
/* Used over suspend/resume */
|
||||
bool suspended;
|
||||
|
@@ -182,6 +182,11 @@ struct wm8994_pdata {
|
||||
*/
|
||||
int micdet_delay;
|
||||
|
||||
/* Delay between microphone detect completing and reporting on
|
||||
* insert (specified in ms)
|
||||
*/
|
||||
int mic_id_delay;
|
||||
|
||||
/* IRQ for microphone detection if brought out directly as a
|
||||
* signal.
|
||||
*/
|
||||
@@ -223,6 +228,11 @@ struct wm8994_pdata {
|
||||
* lines is mastered.
|
||||
*/
|
||||
int max_channels_clocked[WM8994_NUM_AIF];
|
||||
|
||||
/**
|
||||
* GPIO for the IRQ pin if host only supports edge triggering
|
||||
*/
|
||||
int irq_gpio;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -2668,6 +2668,10 @@
|
||||
/*
|
||||
* R772 (0x304) - AIF1ADC LRCLK
|
||||
*/
|
||||
#define WM8958_AIF1_LRCLK_INV 0x1000 /* AIF1_LRCLK_INV */
|
||||
#define WM8958_AIF1_LRCLK_INV_MASK 0x1000 /* AIF1_LRCLK_INV */
|
||||
#define WM8958_AIF1_LRCLK_INV_SHIFT 12 /* AIF1_LRCLK_INV */
|
||||
#define WM8958_AIF1_LRCLK_INV_WIDTH 1 /* AIF1_LRCLK_INV */
|
||||
#define WM8994_AIF1ADC_LRCLK_DIR 0x0800 /* AIF1ADC_LRCLK_DIR */
|
||||
#define WM8994_AIF1ADC_LRCLK_DIR_MASK 0x0800 /* AIF1ADC_LRCLK_DIR */
|
||||
#define WM8994_AIF1ADC_LRCLK_DIR_SHIFT 11 /* AIF1ADC_LRCLK_DIR */
|
||||
@@ -2679,6 +2683,10 @@
|
||||
/*
|
||||
* R773 (0x305) - AIF1DAC LRCLK
|
||||
*/
|
||||
#define WM8958_AIF1_LRCLK_INV 0x1000 /* AIF1_LRCLK_INV */
|
||||
#define WM8958_AIF1_LRCLK_INV_MASK 0x1000 /* AIF1_LRCLK_INV */
|
||||
#define WM8958_AIF1_LRCLK_INV_SHIFT 12 /* AIF1_LRCLK_INV */
|
||||
#define WM8958_AIF1_LRCLK_INV_WIDTH 1 /* AIF1_LRCLK_INV */
|
||||
#define WM8994_AIF1DAC_LRCLK_DIR 0x0800 /* AIF1DAC_LRCLK_DIR */
|
||||
#define WM8994_AIF1DAC_LRCLK_DIR_MASK 0x0800 /* AIF1DAC_LRCLK_DIR */
|
||||
#define WM8994_AIF1DAC_LRCLK_DIR_SHIFT 11 /* AIF1DAC_LRCLK_DIR */
|
||||
|
@@ -111,6 +111,7 @@ enum {
|
||||
MLX4_CMD_INIT2INIT_QP = 0x2d,
|
||||
MLX4_CMD_SUSPEND_QP = 0x32,
|
||||
MLX4_CMD_UNSUSPEND_QP = 0x33,
|
||||
MLX4_CMD_UPDATE_QP = 0x61,
|
||||
/* special QP and management commands */
|
||||
MLX4_CMD_CONF_SPECIAL_QP = 0x23,
|
||||
MLX4_CMD_MAD_IFC = 0x24,
|
||||
@@ -237,7 +238,7 @@ int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac);
|
||||
int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos);
|
||||
int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting);
|
||||
int mlx4_get_vf_config(struct mlx4_dev *dev, int port, int vf, struct ifla_vf_info *ivf);
|
||||
|
||||
int mlx4_set_vf_link_state(struct mlx4_dev *dev, int port, int vf, int link_state);
|
||||
|
||||
#define MLX4_COMM_GET_IF_REV(cmd_chan_ver) (u8)((cmd_chan_ver) >> 8)
|
||||
|
||||
|
@@ -157,7 +157,8 @@ enum {
|
||||
MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN = 1LL << 4,
|
||||
MLX4_DEV_CAP_FLAG2_TS = 1LL << 5,
|
||||
MLX4_DEV_CAP_FLAG2_VLAN_CONTROL = 1LL << 6,
|
||||
MLX4_DEV_CAP_FLAG2_FSM = 1LL << 7
|
||||
MLX4_DEV_CAP_FLAG2_FSM = 1LL << 7,
|
||||
MLX4_DEV_CAP_FLAG2_UPDATE_QP = 1LL << 8
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@@ -152,6 +152,8 @@ enum { /* fl */
|
||||
};
|
||||
enum { /* vlan_control */
|
||||
MLX4_VLAN_CTRL_ETH_TX_BLOCK_TAGGED = 1 << 6,
|
||||
MLX4_VLAN_CTRL_ETH_TX_BLOCK_PRIO_TAGGED = 1 << 5, /* 802.1p priority tag */
|
||||
MLX4_VLAN_CTRL_ETH_TX_BLOCK_UNTAGGED = 1 << 4,
|
||||
MLX4_VLAN_CTRL_ETH_RX_BLOCK_TAGGED = 1 << 2,
|
||||
MLX4_VLAN_CTRL_ETH_RX_BLOCK_PRIO_TAGGED = 1 << 1, /* 802.1p priority tag */
|
||||
MLX4_VLAN_CTRL_ETH_RX_BLOCK_UNTAGGED = 1 << 0
|
||||
@@ -206,6 +208,40 @@ struct mlx4_qp_context {
|
||||
u32 reserved5[10];
|
||||
};
|
||||
|
||||
struct mlx4_update_qp_context {
|
||||
__be64 qp_mask;
|
||||
__be64 primary_addr_path_mask;
|
||||
__be64 secondary_addr_path_mask;
|
||||
u64 reserved1;
|
||||
struct mlx4_qp_context qp_context;
|
||||
u64 reserved2[58];
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_UPD_QP_MASK_PM_STATE = 32,
|
||||
MLX4_UPD_QP_MASK_VSD = 33,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_UPD_QP_PATH_MASK_PKEY_INDEX = 0 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_FSM = 1 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_MAC_INDEX = 2 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_FVL = 3 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_CV = 4 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_VLAN_INDEX = 5 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_HIDE_CQE_VLAN = 6 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_UNTAGGED = 7 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_1P = 8 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_TAGGED = 9 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_UNTAGGED = 10 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_1P = 11 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_TAGGED = 12 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_FEUP = 13 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_SCHED_QUEUE = 14 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_IF_COUNTER_INDEX = 15 + 32,
|
||||
MLX4_UPD_QP_PATH_MASK_FVL_RX = 16 + 32,
|
||||
};
|
||||
|
||||
enum { /* param3 */
|
||||
MLX4_STRIP_VLAN = 1 << 30
|
||||
};
|
||||
|
@@ -25,11 +25,17 @@ struct file_ra_state;
|
||||
struct user_struct;
|
||||
struct writeback_control;
|
||||
|
||||
#ifndef CONFIG_DISCONTIGMEM /* Don't use mapnrs, do it properly */
|
||||
#ifndef CONFIG_NEED_MULTIPLE_NODES /* Don't use mapnrs, do it properly */
|
||||
extern unsigned long max_mapnr;
|
||||
|
||||
static inline void set_max_mapnr(unsigned long limit)
|
||||
{
|
||||
max_mapnr = limit;
|
||||
}
|
||||
#else
|
||||
static inline void set_max_mapnr(unsigned long limit) { }
|
||||
#endif
|
||||
|
||||
extern unsigned long num_physpages;
|
||||
extern unsigned long totalram_pages;
|
||||
extern void * high_memory;
|
||||
extern int page_cluster;
|
||||
@@ -52,6 +58,9 @@ extern unsigned long sysctl_admin_reserve_kbytes;
|
||||
/* to align the pointer to the (next) page boundary */
|
||||
#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)
|
||||
|
||||
/* test whether an address (unsigned long or pointer) is aligned to PAGE_SIZE */
|
||||
#define PAGE_ALIGNED(addr) IS_ALIGNED((unsigned long)addr, PAGE_SIZE)
|
||||
|
||||
/*
|
||||
* Linux kernel virtual memory manager primitives.
|
||||
* The idea being to have a "virtual" mm in the same way
|
||||
@@ -142,12 +151,6 @@ extern unsigned int kobjsize(const void *objp);
|
||||
#define VM_STACK_FLAGS (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
|
||||
#endif
|
||||
|
||||
#define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ)
|
||||
#define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK
|
||||
#define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK))
|
||||
#define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ)
|
||||
#define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ)
|
||||
|
||||
/*
|
||||
* Special vmas that are non-mergable, non-mlock()able.
|
||||
* Note: mm/huge_memory.c VM_NO_THP depends on this definition.
|
||||
@@ -1305,11 +1308,12 @@ extern void free_initmem(void);
|
||||
/*
|
||||
* Free reserved pages within range [PAGE_ALIGN(start), end & PAGE_MASK)
|
||||
* into the buddy system. The freed pages will be poisoned with pattern
|
||||
* "poison" if it's non-zero.
|
||||
* "poison" if it's within range [0, UCHAR_MAX].
|
||||
* Return pages freed into the buddy system.
|
||||
*/
|
||||
extern unsigned long free_reserved_area(unsigned long start, unsigned long end,
|
||||
extern unsigned long free_reserved_area(void *start, void *end,
|
||||
int poison, char *s);
|
||||
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
/*
|
||||
* Free a highmem page into the buddy system, adjusting totalhigh_pages
|
||||
@@ -1318,10 +1322,8 @@ extern unsigned long free_reserved_area(unsigned long start, unsigned long end,
|
||||
extern void free_highmem_page(struct page *page);
|
||||
#endif
|
||||
|
||||
static inline void adjust_managed_page_count(struct page *page, long count)
|
||||
{
|
||||
totalram_pages += count;
|
||||
}
|
||||
extern void adjust_managed_page_count(struct page *page, long count);
|
||||
extern void mem_init_print_info(const char *str);
|
||||
|
||||
/* Free the reserved page into the buddy system, so it gets managed. */
|
||||
static inline void __free_reserved_page(struct page *page)
|
||||
@@ -1345,18 +1347,29 @@ static inline void mark_page_reserved(struct page *page)
|
||||
|
||||
/*
|
||||
* Default method to free all the __init memory into the buddy system.
|
||||
* The freed pages will be poisoned with pattern "poison" if it is
|
||||
* non-zero. Return pages freed into the buddy system.
|
||||
* The freed pages will be poisoned with pattern "poison" if it's within
|
||||
* range [0, UCHAR_MAX].
|
||||
* Return pages freed into the buddy system.
|
||||
*/
|
||||
static inline unsigned long free_initmem_default(int poison)
|
||||
{
|
||||
extern char __init_begin[], __init_end[];
|
||||
|
||||
return free_reserved_area(PAGE_ALIGN((unsigned long)&__init_begin) ,
|
||||
((unsigned long)&__init_end) & PAGE_MASK,
|
||||
return free_reserved_area(&__init_begin, &__init_end,
|
||||
poison, "unused kernel");
|
||||
}
|
||||
|
||||
static inline unsigned long get_num_physpages(void)
|
||||
{
|
||||
int nid;
|
||||
unsigned long phys_pages = 0;
|
||||
|
||||
for_each_online_node(nid)
|
||||
phys_pages += node_present_pages(nid);
|
||||
|
||||
return phys_pages;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
|
||||
/*
|
||||
* With CONFIG_HAVE_MEMBLOCK_NODE_MAP set, an architecture may initialise its
|
||||
|
@@ -330,12 +330,9 @@ struct mm_struct {
|
||||
unsigned long (*get_unmapped_area) (struct file *filp,
|
||||
unsigned long addr, unsigned long len,
|
||||
unsigned long pgoff, unsigned long flags);
|
||||
void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
|
||||
#endif
|
||||
unsigned long mmap_base; /* base of mmap area */
|
||||
unsigned long task_size; /* size of task vm space */
|
||||
unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
|
||||
unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */
|
||||
unsigned long highest_vm_end; /* highest vma end address */
|
||||
pgd_t * pgd;
|
||||
atomic_t mm_users; /* How many users with user space? */
|
||||
|
@@ -11,11 +11,17 @@ extern int sysctl_overcommit_memory;
|
||||
extern int sysctl_overcommit_ratio;
|
||||
extern struct percpu_counter vm_committed_as;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
extern s32 vm_committed_as_batch;
|
||||
#else
|
||||
#define vm_committed_as_batch 0
|
||||
#endif
|
||||
|
||||
unsigned long vm_memory_committed(void);
|
||||
|
||||
static inline void vm_acct_memory(long pages)
|
||||
{
|
||||
percpu_counter_add(&vm_committed_as, pages);
|
||||
__percpu_counter_add(&vm_committed_as, pages, vm_committed_as_batch);
|
||||
}
|
||||
|
||||
static inline void vm_unacct_memory(long pages)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user