mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'osd-devel' into nfs-for-next
This commit is contained in:
commit
31cbecb4ab
7798 changed files with 502148 additions and 332837 deletions
|
|
@ -13,6 +13,16 @@ enum alarmtimer_type {
|
|||
ALARM_NUMTYPE,
|
||||
};
|
||||
|
||||
enum alarmtimer_restart {
|
||||
ALARMTIMER_NORESTART,
|
||||
ALARMTIMER_RESTART,
|
||||
};
|
||||
|
||||
|
||||
#define ALARMTIMER_STATE_INACTIVE 0x00
|
||||
#define ALARMTIMER_STATE_ENQUEUED 0x01
|
||||
#define ALARMTIMER_STATE_CALLBACK 0x02
|
||||
|
||||
/**
|
||||
* struct alarm - Alarm timer structure
|
||||
* @node: timerqueue node for adding to the event list this value
|
||||
|
|
@ -25,16 +35,45 @@ enum alarmtimer_type {
|
|||
*/
|
||||
struct alarm {
|
||||
struct timerqueue_node node;
|
||||
ktime_t period;
|
||||
void (*function)(struct alarm *);
|
||||
enum alarmtimer_restart (*function)(struct alarm *, ktime_t now);
|
||||
enum alarmtimer_type type;
|
||||
bool enabled;
|
||||
int state;
|
||||
void *data;
|
||||
};
|
||||
|
||||
void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
|
||||
void (*function)(struct alarm *));
|
||||
void alarm_start(struct alarm *alarm, ktime_t start, ktime_t period);
|
||||
void alarm_cancel(struct alarm *alarm);
|
||||
enum alarmtimer_restart (*function)(struct alarm *, ktime_t));
|
||||
void alarm_start(struct alarm *alarm, ktime_t start);
|
||||
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);
|
||||
|
||||
/*
|
||||
* A alarmtimer is active, when it is enqueued into timerqueue or the
|
||||
* callback function is running.
|
||||
*/
|
||||
static inline int alarmtimer_active(const struct alarm *timer)
|
||||
{
|
||||
return timer->state != ALARMTIMER_STATE_INACTIVE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function to check, whether the timer is on one of the queues
|
||||
*/
|
||||
static inline int alarmtimer_is_queued(struct alarm *timer)
|
||||
{
|
||||
return timer->state & ALARMTIMER_STATE_ENQUEUED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function to check, whether the timer is running the callback
|
||||
* function
|
||||
*/
|
||||
static inline int alarmtimer_callback_running(struct alarm *timer)
|
||||
{
|
||||
return timer->state & ALARMTIMER_STATE_CALLBACK;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ struct pl061_platform_data {
|
|||
unsigned gpio_base;
|
||||
|
||||
/* number of the first IRQ.
|
||||
* If the IRQ functionality in not desired this must be set to
|
||||
* (unsigned) -1.
|
||||
* If the IRQ functionality in not desired this must be set to NO_IRQ.
|
||||
*/
|
||||
unsigned irq_base;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/socket.h>
|
||||
|
||||
/*
|
||||
* AppleTalk networking structures
|
||||
|
|
@ -28,7 +29,7 @@ struct atalk_addr {
|
|||
};
|
||||
|
||||
struct sockaddr_at {
|
||||
sa_family_t sat_family;
|
||||
__kernel_sa_family_t sat_family;
|
||||
__u8 sat_port;
|
||||
struct atalk_addr sat_addr;
|
||||
char sat_zero[8];
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef __LINUX_ATMEL_MCI_H
|
||||
#define __LINUX_ATMEL_MCI_H
|
||||
|
||||
#define ATMEL_MCI_MAX_NR_SLOTS 2
|
||||
#define ATMCI_MAX_NR_SLOTS 2
|
||||
|
||||
/**
|
||||
* struct mci_slot_pdata - board-specific per-slot configuration
|
||||
|
|
@ -33,7 +33,7 @@ struct mci_slot_pdata {
|
|||
*/
|
||||
struct mci_platform_data {
|
||||
struct mci_dma_data *dma_slave;
|
||||
struct mci_slot_pdata slot[ATMEL_MCI_MAX_NR_SLOTS];
|
||||
struct mci_slot_pdata slot[ATMCI_MAX_NR_SLOTS];
|
||||
};
|
||||
|
||||
#endif /* __LINUX_ATMEL_MCI_H */
|
||||
|
|
|
|||
|
|
@ -33,4 +33,6 @@
|
|||
|
||||
#define ATMEL_PDC_PTSR 0x124 /* Transfer Status Register */
|
||||
|
||||
#define ATMEL_PDC_SCND_BUF_OFF 0x10 /* Offset between first and second buffer registers */
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -584,14 +584,13 @@ extern int audit_signals;
|
|||
#ifdef CONFIG_AUDIT
|
||||
/* These are defined in audit.c */
|
||||
/* Public API */
|
||||
extern void audit_log(struct audit_context *ctx, gfp_t gfp_mask,
|
||||
int type, const char *fmt, ...)
|
||||
__attribute__((format(printf,4,5)));
|
||||
extern __printf(4, 5)
|
||||
void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type,
|
||||
const char *fmt, ...);
|
||||
|
||||
extern struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type);
|
||||
extern void audit_log_format(struct audit_buffer *ab,
|
||||
const char *fmt, ...)
|
||||
__attribute__((format(printf,2,3)));
|
||||
extern __printf(2, 3)
|
||||
void audit_log_format(struct audit_buffer *ab, const char *fmt, ...);
|
||||
extern void audit_log_end(struct audit_buffer *ab);
|
||||
extern int audit_string_contains_control(const char *string,
|
||||
size_t len);
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ typedef struct {
|
|||
} ax25_address;
|
||||
|
||||
struct sockaddr_ax25 {
|
||||
sa_family_t sax25_family;
|
||||
__kernel_sa_family_t sax25_family;
|
||||
ax25_address sax25_call;
|
||||
int sax25_ndigis;
|
||||
/* Digipeater ax25_address sets follow */
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <linux/bcma/bcma_driver_chipcommon.h>
|
||||
#include <linux/bcma/bcma_driver_pci.h>
|
||||
#include <linux/bcma/bcma_driver_mips.h>
|
||||
#include <linux/ssb/ssb.h> /* SPROM sharing */
|
||||
|
||||
#include "bcma_regs.h"
|
||||
|
|
@ -14,9 +15,9 @@ struct bcma_device;
|
|||
struct bcma_bus;
|
||||
|
||||
enum bcma_hosttype {
|
||||
BCMA_HOSTTYPE_NONE,
|
||||
BCMA_HOSTTYPE_PCI,
|
||||
BCMA_HOSTTYPE_SDIO,
|
||||
BCMA_HOSTTYPE_SOC,
|
||||
};
|
||||
|
||||
struct bcma_chipinfo {
|
||||
|
|
@ -130,6 +131,7 @@ struct bcma_device {
|
|||
|
||||
struct device dev;
|
||||
struct device *dma_dev;
|
||||
|
||||
unsigned int irq;
|
||||
bool dev_registered;
|
||||
|
||||
|
|
@ -138,6 +140,9 @@ struct bcma_device {
|
|||
u32 addr;
|
||||
u32 wrap;
|
||||
|
||||
void __iomem *io_addr;
|
||||
void __iomem *io_wrap;
|
||||
|
||||
void *drvdata;
|
||||
struct list_head list;
|
||||
};
|
||||
|
|
@ -190,9 +195,11 @@ struct bcma_bus {
|
|||
struct bcma_device *mapped_core;
|
||||
struct list_head cores;
|
||||
u8 nr_cores;
|
||||
u8 init_done:1;
|
||||
|
||||
struct bcma_drv_cc drv_cc;
|
||||
struct bcma_drv_pci drv_pci;
|
||||
struct bcma_drv_mips drv_mips;
|
||||
|
||||
/* We decided to share SPROM struct with SSB as long as we do not need
|
||||
* any hacks for BCMA. This simplifies drivers code. */
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#define BCMA_CC_FLASHT_NONE 0x00000000 /* No flash */
|
||||
#define BCMA_CC_FLASHT_STSER 0x00000100 /* ST serial flash */
|
||||
#define BCMA_CC_FLASHT_ATSER 0x00000200 /* Atmel serial flash */
|
||||
#define BCMA_CC_FLASHT_NFLASH 0x00000200
|
||||
#define BCMA_CC_FLASHT_PARA 0x00000700 /* Parallel flash */
|
||||
#define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */
|
||||
#define BCMA_PLLTYPE_NONE 0x00000000
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
#define BCMA_CC_PROG_CFG 0x0120
|
||||
#define BCMA_CC_PROG_WAITCNT 0x0124
|
||||
#define BCMA_CC_FLASH_CFG 0x0128
|
||||
#define BCMA_CC_FLASH_CFG_DS 0x0010 /* Data size, 0=8bit, 1=16bit */
|
||||
#define BCMA_CC_FLASH_WAITCNT 0x012C
|
||||
/* 0x1E0 is defined as shared BCMA_CLKCTLST */
|
||||
#define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */
|
||||
|
|
@ -239,6 +241,64 @@
|
|||
#define BCMA_CC_SPROM 0x0800 /* SPROM beginning */
|
||||
#define BCMA_CC_SPROM_PCIE6 0x0830 /* SPROM beginning on PCIe rev >= 6 */
|
||||
|
||||
/* Divider allocation in 4716/47162/5356 */
|
||||
#define BCMA_CC_PMU5_MAINPLL_CPU 1
|
||||
#define BCMA_CC_PMU5_MAINPLL_MEM 2
|
||||
#define BCMA_CC_PMU5_MAINPLL_SSB 3
|
||||
|
||||
/* PLL usage in 4716/47162 */
|
||||
#define BCMA_CC_PMU4716_MAINPLL_PLL0 12
|
||||
|
||||
/* PLL usage in 5356/5357 */
|
||||
#define BCMA_CC_PMU5356_MAINPLL_PLL0 0
|
||||
#define BCMA_CC_PMU5357_MAINPLL_PLL0 0
|
||||
|
||||
/* 4706 PMU */
|
||||
#define BCMA_CC_PMU4706_MAINPLL_PLL0 0
|
||||
|
||||
/* ALP clock on pre-PMU chips */
|
||||
#define BCMA_CC_PMU_ALP_CLOCK 20000000
|
||||
/* HT clock for systems with PMU-enabled chipcommon */
|
||||
#define BCMA_CC_PMU_HT_CLOCK 80000000
|
||||
|
||||
/* PMU rev 5 (& 6) */
|
||||
#define BCMA_CC_PPL_P1P2_OFF 0
|
||||
#define BCMA_CC_PPL_P1_MASK 0x0f000000
|
||||
#define BCMA_CC_PPL_P1_SHIFT 24
|
||||
#define BCMA_CC_PPL_P2_MASK 0x00f00000
|
||||
#define BCMA_CC_PPL_P2_SHIFT 20
|
||||
#define BCMA_CC_PPL_M14_OFF 1
|
||||
#define BCMA_CC_PPL_MDIV_MASK 0x000000ff
|
||||
#define BCMA_CC_PPL_MDIV_WIDTH 8
|
||||
#define BCMA_CC_PPL_NM5_OFF 2
|
||||
#define BCMA_CC_PPL_NDIV_MASK 0xfff00000
|
||||
#define BCMA_CC_PPL_NDIV_SHIFT 20
|
||||
#define BCMA_CC_PPL_FMAB_OFF 3
|
||||
#define BCMA_CC_PPL_MRAT_MASK 0xf0000000
|
||||
#define BCMA_CC_PPL_MRAT_SHIFT 28
|
||||
#define BCMA_CC_PPL_ABRAT_MASK 0x08000000
|
||||
#define BCMA_CC_PPL_ABRAT_SHIFT 27
|
||||
#define BCMA_CC_PPL_FDIV_MASK 0x07ffffff
|
||||
#define BCMA_CC_PPL_PLLCTL_OFF 4
|
||||
#define BCMA_CC_PPL_PCHI_OFF 5
|
||||
#define BCMA_CC_PPL_PCHI_MASK 0x0000003f
|
||||
|
||||
/* BCM4331 ChipControl numbers. */
|
||||
#define BCMA_CHIPCTL_4331_BT_COEXIST BIT(0) /* 0 disable */
|
||||
#define BCMA_CHIPCTL_4331_SECI BIT(1) /* 0 SECI is disabled (JATG functional) */
|
||||
#define BCMA_CHIPCTL_4331_EXT_LNA BIT(2) /* 0 disable */
|
||||
#define BCMA_CHIPCTL_4331_SPROM_GPIO13_15 BIT(3) /* sprom/gpio13-15 mux */
|
||||
#define BCMA_CHIPCTL_4331_EXTPA_EN BIT(4) /* 0 ext pa disable, 1 ext pa enabled */
|
||||
#define BCMA_CHIPCTL_4331_GPIOCLK_ON_SPROMCS BIT(5) /* set drive out GPIO_CLK on sprom_cs pin */
|
||||
#define BCMA_CHIPCTL_4331_PCIE_MDIO_ON_SPROMCS BIT(6) /* use sprom_cs pin as PCIE mdio interface */
|
||||
#define BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5 BIT(7) /* aband extpa will be at gpio2/5 and sprom_dout */
|
||||
#define BCMA_CHIPCTL_4331_OVR_PIPEAUXCLKEN BIT(8) /* override core control on pipe_AuxClkEnable */
|
||||
#define BCMA_CHIPCTL_4331_OVR_PIPEAUXPWRDOWN BIT(9) /* override core control on pipe_AuxPowerDown */
|
||||
#define BCMA_CHIPCTL_4331_PCIE_AUXCLKEN BIT(10) /* pcie_auxclkenable */
|
||||
#define BCMA_CHIPCTL_4331_PCIE_PIPE_PLLDOWN BIT(11) /* pcie_pipe_pllpowerdown */
|
||||
#define BCMA_CHIPCTL_4331_BT_SHD0_ON_GPIO4 BIT(16) /* enable bt_shd0 at gpio4 */
|
||||
#define BCMA_CHIPCTL_4331_BT_SHD1_ON_GPIO5 BIT(17) /* enable bt_shd1 at gpio5 */
|
||||
|
||||
/* Data for the PMU, if available.
|
||||
* Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
|
||||
*/
|
||||
|
|
@ -247,14 +307,37 @@ struct bcma_chipcommon_pmu {
|
|||
u32 crystalfreq; /* The active crystal frequency (in kHz) */
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
struct bcma_pflash {
|
||||
u8 buswidth;
|
||||
u32 window;
|
||||
u32 window_size;
|
||||
};
|
||||
|
||||
struct bcma_serial_port {
|
||||
void *regs;
|
||||
unsigned long clockspeed;
|
||||
unsigned int irq;
|
||||
unsigned int baud_base;
|
||||
unsigned int reg_shift;
|
||||
};
|
||||
#endif /* CONFIG_BCMA_DRIVER_MIPS */
|
||||
|
||||
struct bcma_drv_cc {
|
||||
struct bcma_device *core;
|
||||
u32 status;
|
||||
u32 capabilities;
|
||||
u32 capabilities_ext;
|
||||
u8 setup_done:1;
|
||||
/* Fast Powerup Delay constant */
|
||||
u16 fast_pwrup_delay;
|
||||
struct bcma_chipcommon_pmu pmu;
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
struct bcma_pflash pflash;
|
||||
|
||||
int nr_serial_ports;
|
||||
struct bcma_serial_port serial_ports[4];
|
||||
#endif /* CONFIG_BCMA_DRIVER_MIPS */
|
||||
};
|
||||
|
||||
/* Register access */
|
||||
|
|
@ -275,6 +358,8 @@ extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
|
|||
extern void bcma_chipco_suspend(struct bcma_drv_cc *cc);
|
||||
extern void bcma_chipco_resume(struct bcma_drv_cc *cc);
|
||||
|
||||
void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);
|
||||
|
||||
extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc,
|
||||
u32 ticks);
|
||||
|
||||
|
|
@ -293,4 +378,13 @@ u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
|||
/* PMU support */
|
||||
extern void bcma_pmu_init(struct bcma_drv_cc *cc);
|
||||
|
||||
extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset,
|
||||
u32 value);
|
||||
extern void bcma_chipco_pll_maskset(struct bcma_drv_cc *cc, u32 offset,
|
||||
u32 mask, u32 set);
|
||||
extern void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc,
|
||||
u32 offset, u32 mask, u32 set);
|
||||
extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc,
|
||||
u32 offset, u32 mask, u32 set);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_CC_H_ */
|
||||
|
|
|
|||
51
include/linux/bcma/bcma_driver_mips.h
Normal file
51
include/linux/bcma/bcma_driver_mips.h
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#ifndef LINUX_BCMA_DRIVER_MIPS_H_
|
||||
#define LINUX_BCMA_DRIVER_MIPS_H_
|
||||
|
||||
#define BCMA_MIPS_IPSFLAG 0x0F08
|
||||
/* which sbflags get routed to mips interrupt 1 */
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ1 0x0000003F
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ1_SHIFT 0
|
||||
/* which sbflags get routed to mips interrupt 2 */
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ2 0x00003F00
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ2_SHIFT 8
|
||||
/* which sbflags get routed to mips interrupt 3 */
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ3 0x003F0000
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ3_SHIFT 16
|
||||
/* which sbflags get routed to mips interrupt 4 */
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ4 0x3F000000
|
||||
#define BCMA_MIPS_IPSFLAG_IRQ4_SHIFT 24
|
||||
|
||||
/* MIPS 74K core registers */
|
||||
#define BCMA_MIPS_MIPS74K_CORECTL 0x0000
|
||||
#define BCMA_MIPS_MIPS74K_EXCEPTBASE 0x0004
|
||||
#define BCMA_MIPS_MIPS74K_BIST 0x000C
|
||||
#define BCMA_MIPS_MIPS74K_INTMASK_INT0 0x0014
|
||||
#define BCMA_MIPS_MIPS74K_INTMASK(int) \
|
||||
((int) * 4 + BCMA_MIPS_MIPS74K_INTMASK_INT0)
|
||||
#define BCMA_MIPS_MIPS74K_NMIMASK 0x002C
|
||||
#define BCMA_MIPS_MIPS74K_GPIOSEL 0x0040
|
||||
#define BCMA_MIPS_MIPS74K_GPIOOUT 0x0044
|
||||
#define BCMA_MIPS_MIPS74K_GPIOEN 0x0048
|
||||
#define BCMA_MIPS_MIPS74K_CLKCTLST 0x01E0
|
||||
|
||||
#define BCMA_MIPS_OOBSELOUTA30 0x100
|
||||
|
||||
struct bcma_device;
|
||||
|
||||
struct bcma_drv_mips {
|
||||
struct bcma_device *core;
|
||||
u8 setup_done:1;
|
||||
unsigned int assigned_irqs;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
extern void bcma_core_mips_init(struct bcma_drv_mips *mcore);
|
||||
#else
|
||||
static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { }
|
||||
#endif
|
||||
|
||||
extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore);
|
||||
|
||||
extern unsigned int bcma_core_mips_irq(struct bcma_device *dev);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_MIPS_H_ */
|
||||
16
include/linux/bcma/bcma_soc.h
Normal file
16
include/linux/bcma/bcma_soc.h
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef LINUX_BCMA_SOC_H_
|
||||
#define LINUX_BCMA_SOC_H_
|
||||
|
||||
#include <linux/bcma/bcma.h>
|
||||
|
||||
struct bcma_soc {
|
||||
struct bcma_bus bus;
|
||||
struct bcma_device core_cc;
|
||||
struct bcma_device core_mips;
|
||||
};
|
||||
|
||||
int __init bcma_host_soc_register(struct bcma_soc *soc);
|
||||
|
||||
int bcma_bus_register(struct bcma_bus *bus);
|
||||
|
||||
#endif /* LINUX_BCMA_SOC_H_ */
|
||||
|
|
@ -170,7 +170,7 @@ extern void blk_trace_shutdown(struct request_queue *);
|
|||
extern int do_blk_trace_setup(struct request_queue *q, char *name,
|
||||
dev_t dev, struct block_device *bdev,
|
||||
struct blk_user_trace_setup *buts);
|
||||
extern __attribute__((format(printf, 2, 3)))
|
||||
extern __printf(2, 3)
|
||||
void __trace_note_message(struct blk_trace *, const char *fmt, ...);
|
||||
|
||||
/**
|
||||
|
|
|
|||
46
include/linux/bma150.h
Normal file
46
include/linux/bma150.h
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 2011 Bosch Sensortec GmbH
|
||||
* Copyright (c) 2011 Unixphere
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _BMA150_H_
|
||||
#define _BMA150_H_
|
||||
|
||||
#define BMA150_DRIVER "bma150"
|
||||
|
||||
struct bma150_cfg {
|
||||
bool any_motion_int; /* Set to enable any-motion interrupt */
|
||||
bool hg_int; /* Set to enable high-G interrupt */
|
||||
bool lg_int; /* Set to enable low-G interrupt */
|
||||
unsigned char any_motion_dur; /* Any-motion duration */
|
||||
unsigned char any_motion_thres; /* Any-motion threshold */
|
||||
unsigned char hg_hyst; /* High-G hysterisis */
|
||||
unsigned char hg_dur; /* High-G duration */
|
||||
unsigned char hg_thres; /* High-G threshold */
|
||||
unsigned char lg_hyst; /* Low-G hysterisis */
|
||||
unsigned char lg_dur; /* Low-G duration */
|
||||
unsigned char lg_thres; /* Low-G threshold */
|
||||
unsigned char range; /* BMA0150_RANGE_xxx (in G) */
|
||||
unsigned char bandwidth; /* BMA0150_BW_xxx (in Hz) */
|
||||
};
|
||||
|
||||
struct bma150_platform_data {
|
||||
struct bma150_cfg cfg;
|
||||
int (*irq_gpio_cfg)(void);
|
||||
};
|
||||
|
||||
#endif /* _BMA150_H_ */
|
||||
|
|
@ -9,12 +9,7 @@
|
|||
#define _LINUX_CAIF_SOCKET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/socket.h>
|
||||
#else
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
/**
|
||||
* enum caif_link_selector - Physical Link Selection.
|
||||
|
|
@ -144,7 +139,7 @@ enum caif_debug_service {
|
|||
* CAIF Channel. It defines the service to connect to on the modem.
|
||||
*/
|
||||
struct sockaddr_caif {
|
||||
sa_family_t family;
|
||||
__kernel_sa_family_t family;
|
||||
union {
|
||||
struct {
|
||||
__u8 type; /* type: enum caif_at_type */
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@
|
|||
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
|
||||
* All rights reserved.
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_H
|
||||
|
|
@ -78,7 +76,7 @@ struct can_frame {
|
|||
* @can_addr: protocol specific address information
|
||||
*/
|
||||
struct sockaddr_can {
|
||||
sa_family_t can_family;
|
||||
__kernel_sa_family_t can_family;
|
||||
int can_ifindex;
|
||||
union {
|
||||
/* transport protocol class address information (e.g. ISOTP) */
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
header-y += raw.h
|
||||
header-y += bcm.h
|
||||
header-y += gw.h
|
||||
header-y += error.h
|
||||
header-y += netlink.h
|
||||
|
|
|
|||
|
|
@ -7,14 +7,13 @@
|
|||
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
|
||||
* All rights reserved.
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_BCM_H
|
||||
#define CAN_BCM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/can.h>
|
||||
|
||||
/**
|
||||
* struct bcm_msg_head - head of messages to/from the broadcast manager
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@
|
|||
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
|
||||
* All rights reserved.
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_CORE_H
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
*
|
||||
* Copyright (C) 2008 Wolfgang Grandegger <wg@grandegger.com>
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*/
|
||||
|
||||
#ifndef CAN_DEV_H
|
||||
|
|
|
|||
|
|
@ -7,8 +7,6 @@
|
|||
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
|
||||
* All rights reserved.
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_ERROR_H
|
||||
|
|
|
|||
162
include/linux/can/gw.h
Normal file
162
include/linux/can/gw.h
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* linux/can/gw.h
|
||||
*
|
||||
* Definitions for CAN frame Gateway/Router/Bridge
|
||||
*
|
||||
* Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
|
||||
* Copyright (c) 2011 Volkswagen Group Electronic Research
|
||||
* All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_GW_H
|
||||
#define CAN_GW_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/can.h>
|
||||
|
||||
struct rtcanmsg {
|
||||
__u8 can_family;
|
||||
__u8 gwtype;
|
||||
__u16 flags;
|
||||
};
|
||||
|
||||
/* CAN gateway types */
|
||||
enum {
|
||||
CGW_TYPE_UNSPEC,
|
||||
CGW_TYPE_CAN_CAN, /* CAN->CAN routing */
|
||||
__CGW_TYPE_MAX
|
||||
};
|
||||
|
||||
#define CGW_TYPE_MAX (__CGW_TYPE_MAX - 1)
|
||||
|
||||
/* CAN rtnetlink attribute definitions */
|
||||
enum {
|
||||
CGW_UNSPEC,
|
||||
CGW_MOD_AND, /* CAN frame modification binary AND */
|
||||
CGW_MOD_OR, /* CAN frame modification binary OR */
|
||||
CGW_MOD_XOR, /* CAN frame modification binary XOR */
|
||||
CGW_MOD_SET, /* CAN frame modification set alternate values */
|
||||
CGW_CS_XOR, /* set data[] XOR checksum into data[index] */
|
||||
CGW_CS_CRC8, /* set data[] CRC8 checksum into data[index] */
|
||||
CGW_HANDLED, /* number of handled CAN frames */
|
||||
CGW_DROPPED, /* number of dropped CAN frames */
|
||||
CGW_SRC_IF, /* ifindex of source network interface */
|
||||
CGW_DST_IF, /* ifindex of destination network interface */
|
||||
CGW_FILTER, /* specify struct can_filter on source CAN device */
|
||||
__CGW_MAX
|
||||
};
|
||||
|
||||
#define CGW_MAX (__CGW_MAX - 1)
|
||||
|
||||
#define CGW_FLAGS_CAN_ECHO 0x01
|
||||
#define CGW_FLAGS_CAN_SRC_TSTAMP 0x02
|
||||
|
||||
#define CGW_MOD_FUNCS 4 /* AND OR XOR SET */
|
||||
|
||||
/* CAN frame elements that are affected by curr. 3 CAN frame modifications */
|
||||
#define CGW_MOD_ID 0x01
|
||||
#define CGW_MOD_DLC 0x02
|
||||
#define CGW_MOD_DATA 0x04
|
||||
|
||||
#define CGW_FRAME_MODS 3 /* ID DLC DATA */
|
||||
|
||||
#define MAX_MODFUNCTIONS (CGW_MOD_FUNCS * CGW_FRAME_MODS)
|
||||
|
||||
struct cgw_frame_mod {
|
||||
struct can_frame cf;
|
||||
__u8 modtype;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define CGW_MODATTR_LEN sizeof(struct cgw_frame_mod)
|
||||
|
||||
struct cgw_csum_xor {
|
||||
__s8 from_idx;
|
||||
__s8 to_idx;
|
||||
__s8 result_idx;
|
||||
__u8 init_xor_val;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct cgw_csum_crc8 {
|
||||
__s8 from_idx;
|
||||
__s8 to_idx;
|
||||
__s8 result_idx;
|
||||
__u8 init_crc_val;
|
||||
__u8 final_xor_val;
|
||||
__u8 crctab[256];
|
||||
__u8 profile;
|
||||
__u8 profile_data[20];
|
||||
} __attribute__((packed));
|
||||
|
||||
/* length of checksum operation parameters. idx = index in CAN frame data[] */
|
||||
#define CGW_CS_XOR_LEN sizeof(struct cgw_csum_xor)
|
||||
#define CGW_CS_CRC8_LEN sizeof(struct cgw_csum_crc8)
|
||||
|
||||
/* CRC8 profiles (compute CRC for additional data elements - see below) */
|
||||
enum {
|
||||
CGW_CRC8PRF_UNSPEC,
|
||||
CGW_CRC8PRF_1U8, /* compute one additional u8 value */
|
||||
CGW_CRC8PRF_16U8, /* u8 value table indexed by data[1] & 0xF */
|
||||
CGW_CRC8PRF_SFFID_XOR, /* (can_id & 0xFF) ^ (can_id >> 8 & 0xFF) */
|
||||
__CGW_CRC8PRF_MAX
|
||||
};
|
||||
|
||||
#define CGW_CRC8PRF_MAX (__CGW_CRC8PRF_MAX - 1)
|
||||
|
||||
/*
|
||||
* CAN rtnetlink attribute contents in detail
|
||||
*
|
||||
* CGW_XXX_IF (length 4 bytes):
|
||||
* Sets an interface index for source/destination network interfaces.
|
||||
* For the CAN->CAN gwtype the indices of _two_ CAN interfaces are mandatory.
|
||||
*
|
||||
* CGW_FILTER (length 8 bytes):
|
||||
* Sets a CAN receive filter for the gateway job specified by the
|
||||
* struct can_filter described in include/linux/can.h
|
||||
*
|
||||
* CGW_MOD_XXX (length 17 bytes):
|
||||
* Specifies a modification that's done to a received CAN frame before it is
|
||||
* send out to the destination interface.
|
||||
*
|
||||
* <struct can_frame> data used as operator
|
||||
* <u8> affected CAN frame elements
|
||||
*
|
||||
* CGW_CS_XOR (length 4 bytes):
|
||||
* Set a simple XOR checksum starting with an initial value into
|
||||
* data[result-idx] using data[start-idx] .. data[end-idx]
|
||||
*
|
||||
* The XOR checksum is calculated like this:
|
||||
*
|
||||
* xor = init_xor_val
|
||||
*
|
||||
* for (i = from_idx .. to_idx)
|
||||
* xor ^= can_frame.data[i]
|
||||
*
|
||||
* can_frame.data[ result_idx ] = xor
|
||||
*
|
||||
* CGW_CS_CRC8 (length 282 bytes):
|
||||
* Set a CRC8 value into data[result-idx] using a given 256 byte CRC8 table,
|
||||
* a given initial value and a defined input data[start-idx] .. data[end-idx].
|
||||
* Finally the result value is XOR'ed with the final_xor_val.
|
||||
*
|
||||
* The CRC8 checksum is calculated like this:
|
||||
*
|
||||
* crc = init_crc_val
|
||||
*
|
||||
* for (i = from_idx .. to_idx)
|
||||
* crc = crctab[ crc ^ can_frame.data[i] ]
|
||||
*
|
||||
* can_frame.data[ result_idx ] = crc ^ final_xor_val
|
||||
*
|
||||
* The calculated CRC may contain additional source data elements that can be
|
||||
* defined in the handling of 'checksum profiles' e.g. shown in AUTOSAR specs
|
||||
* like http://www.autosar.org/download/R4.0/AUTOSAR_SWS_E2ELibrary.pdf
|
||||
* E.g. the profile_data[] may contain additional u8 values (called DATA_IDs)
|
||||
* that are used depending on counter values inside the CAN frame data[].
|
||||
* So far only three profiles have been implemented for illustration.
|
||||
*
|
||||
* Remark: In general the attribute data is a linear buffer.
|
||||
* Beware of sending unpacked or aligned structs!
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
@ -5,8 +5,6 @@
|
|||
*
|
||||
* Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com>
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_NETLINK_H
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@
|
|||
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
|
||||
* All rights reserved.
|
||||
*
|
||||
* Send feedback to <socketcan-users@lists.berlios.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_RAW_H
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ struct cpu_vfs_cap_data {
|
|||
/* Allow modification of routing tables */
|
||||
/* Allow setting arbitrary process / process group ownership on
|
||||
sockets */
|
||||
/* Allow binding to any address for transparent proxying */
|
||||
/* Allow binding to any address for transparent proxying (also via NET_RAW) */
|
||||
/* Allow setting TOS (type of service) */
|
||||
/* Allow setting promiscuous mode */
|
||||
/* Allow clearing driver statistics */
|
||||
|
|
@ -210,6 +210,7 @@ struct cpu_vfs_cap_data {
|
|||
|
||||
/* Allow use of RAW sockets */
|
||||
/* Allow use of PACKET sockets */
|
||||
/* Allow binding to any address for transparent proxying (also via NET_ADMIN) */
|
||||
|
||||
#define CAP_NET_RAW 13
|
||||
|
||||
|
|
|
|||
|
|
@ -215,7 +215,9 @@ extern void ceph_destroy_options(struct ceph_options *opt);
|
|||
extern int ceph_compare_options(struct ceph_options *new_opt,
|
||||
struct ceph_client *client);
|
||||
extern struct ceph_client *ceph_create_client(struct ceph_options *opt,
|
||||
void *private);
|
||||
void *private,
|
||||
unsigned supported_features,
|
||||
unsigned required_features);
|
||||
extern u64 ceph_client_id(struct ceph_client *client);
|
||||
extern void ceph_destroy_client(struct ceph_client *client);
|
||||
extern int __ceph_open_session(struct ceph_client *client,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
#include <linux/net.h>
|
||||
#include <linux/radix-tree.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include "types.h"
|
||||
|
|
@ -238,7 +237,8 @@ extern void ceph_con_keepalive(struct ceph_connection *con);
|
|||
extern struct ceph_connection *ceph_con_get(struct ceph_connection *con);
|
||||
extern void ceph_con_put(struct ceph_connection *con);
|
||||
|
||||
extern struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags);
|
||||
extern struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
|
||||
bool can_fail);
|
||||
extern void ceph_msg_kfree(struct ceph_msg *m);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
#ifndef __LINUX_CLK_H
|
||||
#define __LINUX_CLK_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
||||
struct device;
|
||||
|
||||
/*
|
||||
|
|
@ -40,12 +42,32 @@ struct clk;
|
|||
*/
|
||||
struct clk *clk_get(struct device *dev, const char *id);
|
||||
|
||||
/**
|
||||
* clk_prepare - prepare a clock source
|
||||
* @clk: clock source
|
||||
*
|
||||
* This prepares the clock source for use.
|
||||
*
|
||||
* Must not be called from within atomic context.
|
||||
*/
|
||||
#ifdef CONFIG_HAVE_CLK_PREPARE
|
||||
int clk_prepare(struct clk *clk);
|
||||
#else
|
||||
static inline int clk_prepare(struct clk *clk)
|
||||
{
|
||||
might_sleep();
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* clk_enable - inform the system when the clock source should be running.
|
||||
* @clk: clock source
|
||||
*
|
||||
* If the clock can not be enabled/disabled, this should return success.
|
||||
*
|
||||
* May be called from atomic contexts.
|
||||
*
|
||||
* Returns success (0) or negative errno.
|
||||
*/
|
||||
int clk_enable(struct clk *clk);
|
||||
|
|
@ -57,6 +79,8 @@ int clk_enable(struct clk *clk);
|
|||
* Inform the system that a clock source is no longer required by
|
||||
* a driver and may be shut down.
|
||||
*
|
||||
* May be called from atomic contexts.
|
||||
*
|
||||
* Implementation detail: if the clock source is shared between
|
||||
* multiple drivers, clk_enable() calls must be balanced by the
|
||||
* same number of clk_disable() calls for the clock source to be
|
||||
|
|
@ -64,6 +88,25 @@ int clk_enable(struct clk *clk);
|
|||
*/
|
||||
void clk_disable(struct clk *clk);
|
||||
|
||||
|
||||
/**
|
||||
* clk_unprepare - undo preparation of a clock source
|
||||
* @clk: clock source
|
||||
*
|
||||
* This undoes a previously prepared clock. The caller must balance
|
||||
* the number of prepare and unprepare calls.
|
||||
*
|
||||
* Must not be called from within atomic context.
|
||||
*/
|
||||
#ifdef CONFIG_HAVE_CLK_PREPARE
|
||||
void clk_unprepare(struct clk *clk);
|
||||
#else
|
||||
static inline void clk_unprepare(struct clk *clk)
|
||||
{
|
||||
might_sleep();
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
|
||||
* This is only valid once the clock source has been enabled.
|
||||
|
|
|
|||
|
|
@ -24,6 +24,13 @@ struct clk_lookup {
|
|||
struct clk *clk;
|
||||
};
|
||||
|
||||
#define CLKDEV_INIT(d, n, c) \
|
||||
{ \
|
||||
.dev_id = d, \
|
||||
.con_id = n, \
|
||||
.clk = c, \
|
||||
}
|
||||
|
||||
struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id,
|
||||
const char *dev_fmt, ...);
|
||||
|
||||
|
|
|
|||
20
include/linux/clksrc-dbx500-prcmu.h
Normal file
20
include/linux/clksrc-dbx500-prcmu.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) ST-Ericsson SA 2011
|
||||
*
|
||||
* License Terms: GNU General Public License v2
|
||||
* Author: Mattias Wallin <mattias.wallin@stericsson.com>
|
||||
*
|
||||
*/
|
||||
#ifndef __CLKSRC_DBX500_PRCMU_H
|
||||
#define __CLKSRC_DBX500_PRCMU_H
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#ifdef CONFIG_CLKSRC_DBX500_PRCMU
|
||||
void __init clksrc_dbx500_prcmu_init(void __iomem *base);
|
||||
#else
|
||||
static inline void __init clksrc_dbx500_prcmu_init(void __iomem *base) {}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
@ -45,20 +45,22 @@ enum clock_event_nofitiers {
|
|||
*/
|
||||
#define CLOCK_EVT_FEAT_PERIODIC 0x000001
|
||||
#define CLOCK_EVT_FEAT_ONESHOT 0x000002
|
||||
#define CLOCK_EVT_FEAT_KTIME 0x000004
|
||||
/*
|
||||
* x86(64) specific misfeatures:
|
||||
*
|
||||
* - Clockevent source stops in C3 State and needs broadcast support.
|
||||
* - Local APIC timer is used as a dummy device.
|
||||
*/
|
||||
#define CLOCK_EVT_FEAT_C3STOP 0x000004
|
||||
#define CLOCK_EVT_FEAT_DUMMY 0x000008
|
||||
#define CLOCK_EVT_FEAT_C3STOP 0x000008
|
||||
#define CLOCK_EVT_FEAT_DUMMY 0x000010
|
||||
|
||||
/**
|
||||
* struct clock_event_device - clock event device descriptor
|
||||
* @event_handler: Assigned by the framework to be called by the low
|
||||
* level handler of the event source
|
||||
* @set_next_event: set next event function
|
||||
* @set_next_event: set next event function using a clocksource delta
|
||||
* @set_next_ktime: set next event function using a direct ktime value
|
||||
* @next_event: local storage for the next event in oneshot mode
|
||||
* @max_delta_ns: maximum delta value in ns
|
||||
* @min_delta_ns: minimum delta value in ns
|
||||
|
|
@ -81,6 +83,8 @@ struct clock_event_device {
|
|||
void (*event_handler)(struct clock_event_device *);
|
||||
int (*set_next_event)(unsigned long evt,
|
||||
struct clock_event_device *);
|
||||
int (*set_next_ktime)(ktime_t expires,
|
||||
struct clock_event_device *);
|
||||
ktime_t next_event;
|
||||
u64 max_delta_ns;
|
||||
u64 min_delta_ns;
|
||||
|
|
@ -140,7 +144,7 @@ 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, ktime_t now);
|
||||
ktime_t expires, bool force);
|
||||
|
||||
extern void clockevents_handle_noop(struct clock_event_device *dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ struct proc_event {
|
|||
PROC_EVENT_GID = 0x00000040,
|
||||
PROC_EVENT_SID = 0x00000080,
|
||||
PROC_EVENT_PTRACE = 0x00000100,
|
||||
PROC_EVENT_COMM = 0x00000200,
|
||||
/* "next" should be 0x00000400 */
|
||||
/* "last" is the last process event: exit */
|
||||
PROC_EVENT_EXIT = 0x80000000
|
||||
|
|
@ -103,6 +104,12 @@ struct proc_event {
|
|||
__kernel_pid_t tracer_tgid;
|
||||
} ptrace;
|
||||
|
||||
struct comm_proc_event {
|
||||
__kernel_pid_t process_pid;
|
||||
__kernel_pid_t process_tgid;
|
||||
char comm[16];
|
||||
} comm;
|
||||
|
||||
struct exit_proc_event {
|
||||
__kernel_pid_t process_pid;
|
||||
__kernel_pid_t process_tgid;
|
||||
|
|
@ -118,6 +125,7 @@ void proc_exec_connector(struct task_struct *task);
|
|||
void proc_id_connector(struct task_struct *task, int which_id);
|
||||
void proc_sid_connector(struct task_struct *task);
|
||||
void proc_ptrace_connector(struct task_struct *task, int which_id);
|
||||
void proc_comm_connector(struct task_struct *task);
|
||||
void proc_exit_connector(struct task_struct *task);
|
||||
#else
|
||||
static inline void proc_fork_connector(struct task_struct *task)
|
||||
|
|
@ -133,6 +141,9 @@ static inline void proc_id_connector(struct task_struct *task,
|
|||
static inline void proc_sid_connector(struct task_struct *task)
|
||||
{}
|
||||
|
||||
static inline void proc_comm_connector(struct task_struct *task)
|
||||
{}
|
||||
|
||||
static inline void proc_ptrace_connector(struct task_struct *task,
|
||||
int ptrace_id)
|
||||
{}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ extern unsigned long try_to_compact_pages(struct zonelist *zonelist,
|
|||
int order, gfp_t gfp_mask, nodemask_t *mask,
|
||||
bool sync);
|
||||
extern unsigned long compaction_suitable(struct zone *zone, int order);
|
||||
extern unsigned long compact_zone_order(struct zone *zone, int order,
|
||||
gfp_t gfp_mask, bool sync);
|
||||
|
||||
/* Do not skip compaction more than 64 times */
|
||||
#define COMPACT_MAX_DEFER_SHIFT 6
|
||||
|
|
@ -69,12 +67,6 @@ static inline unsigned long compaction_suitable(struct zone *zone, int order)
|
|||
return COMPACT_SKIPPED;
|
||||
}
|
||||
|
||||
static inline unsigned long compact_zone_order(struct zone *zone, int order,
|
||||
gfp_t gfp_mask, bool sync)
|
||||
{
|
||||
return COMPACT_CONTINUE;
|
||||
}
|
||||
|
||||
static inline void defer_compaction(struct zone *zone)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -547,7 +547,8 @@ extern ssize_t compat_rw_copy_check_uvector(int type,
|
|||
const struct compat_iovec __user *uvector,
|
||||
unsigned long nr_segs,
|
||||
unsigned long fast_segs, struct iovec *fast_pointer,
|
||||
struct iovec **ret_pointer);
|
||||
struct iovec **ret_pointer,
|
||||
int check_access);
|
||||
|
||||
extern void __user *compat_alloc_user_space(unsigned long len);
|
||||
|
||||
|
|
|
|||
109
include/linux/cpu_pm.h
Normal file
109
include/linux/cpu_pm.h
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Copyright (C) 2011 Google, Inc.
|
||||
*
|
||||
* Author:
|
||||
* Colin Cross <ccross@android.com>
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_CPU_PM_H
|
||||
#define _LINUX_CPU_PM_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
/*
|
||||
* When a CPU goes to a low power state that turns off power to the CPU's
|
||||
* power domain, the contents of some blocks (floating point coprocessors,
|
||||
* interrupt controllers, caches, timers) in the same power domain can
|
||||
* be lost. The cpm_pm notifiers provide a method for platform idle, suspend,
|
||||
* and hotplug implementations to notify the drivers for these blocks that
|
||||
* they may be reset.
|
||||
*
|
||||
* All cpu_pm notifications must be called with interrupts disabled.
|
||||
*
|
||||
* The notifications are split into two classes: CPU notifications and CPU
|
||||
* cluster notifications.
|
||||
*
|
||||
* CPU notifications apply to a single CPU and must be called on the affected
|
||||
* CPU. They are used to save per-cpu context for affected blocks.
|
||||
*
|
||||
* CPU cluster notifications apply to all CPUs in a single power domain. They
|
||||
* are used to save any global context for affected blocks, and must be called
|
||||
* after all the CPUs in the power domain have been notified of the low power
|
||||
* state.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Event codes passed as unsigned long val to notifier calls
|
||||
*/
|
||||
enum cpu_pm_event {
|
||||
/* A single cpu is entering a low power state */
|
||||
CPU_PM_ENTER,
|
||||
|
||||
/* A single cpu failed to enter a low power state */
|
||||
CPU_PM_ENTER_FAILED,
|
||||
|
||||
/* A single cpu is exiting a low power state */
|
||||
CPU_PM_EXIT,
|
||||
|
||||
/* A cpu power domain is entering a low power state */
|
||||
CPU_CLUSTER_PM_ENTER,
|
||||
|
||||
/* A cpu power domain failed to enter a low power state */
|
||||
CPU_CLUSTER_PM_ENTER_FAILED,
|
||||
|
||||
/* A cpu power domain is exiting a low power state */
|
||||
CPU_CLUSTER_PM_EXIT,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CPU_PM
|
||||
int cpu_pm_register_notifier(struct notifier_block *nb);
|
||||
int cpu_pm_unregister_notifier(struct notifier_block *nb);
|
||||
int cpu_pm_enter(void);
|
||||
int cpu_pm_exit(void);
|
||||
int cpu_cluster_pm_enter(void);
|
||||
int cpu_cluster_pm_exit(void);
|
||||
|
||||
#else
|
||||
|
||||
static inline int cpu_pm_register_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int cpu_pm_unregister_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int cpu_pm_enter(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int cpu_pm_exit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int cpu_cluster_pm_enter(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int cpu_cluster_pm_exit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
#define ELFCORE_ADDR_ERR (-2ULL)
|
||||
|
||||
extern unsigned long long elfcorehdr_addr;
|
||||
extern unsigned long long elfcorehdr_size;
|
||||
|
||||
extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
|
||||
unsigned long, int);
|
||||
|
|
|
|||
|
|
@ -71,6 +71,11 @@
|
|||
|
||||
#define CRYPTO_ALG_TESTED 0x00000400
|
||||
|
||||
/*
|
||||
* Set if the algorithm is an instance that is build from templates.
|
||||
*/
|
||||
#define CRYPTO_ALG_INSTANCE 0x00000800
|
||||
|
||||
/*
|
||||
* Transform masks and values (for crt_flags).
|
||||
*/
|
||||
|
|
|
|||
102
include/linux/cryptouser.h
Normal file
102
include/linux/cryptouser.h
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Crypto user configuration API.
|
||||
*
|
||||
* Copyright (C) 2011 secunet Security Networks AG
|
||||
* Copyright (C) 2011 Steffen Klassert <steffen.klassert@secunet.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/* Netlink configuration messages. */
|
||||
enum {
|
||||
CRYPTO_MSG_BASE = 0x10,
|
||||
CRYPTO_MSG_NEWALG = 0x10,
|
||||
CRYPTO_MSG_DELALG,
|
||||
CRYPTO_MSG_UPDATEALG,
|
||||
CRYPTO_MSG_GETALG,
|
||||
__CRYPTO_MSG_MAX
|
||||
};
|
||||
#define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
|
||||
#define CRYPTO_NR_MSGTYPES (CRYPTO_MSG_MAX + 1 - CRYPTO_MSG_BASE)
|
||||
|
||||
#define CRYPTO_MAX_NAME CRYPTO_MAX_ALG_NAME
|
||||
|
||||
/* Netlink message attributes. */
|
||||
enum crypto_attr_type_t {
|
||||
CRYPTOCFGA_UNSPEC,
|
||||
CRYPTOCFGA_PRIORITY_VAL, /* __u32 */
|
||||
CRYPTOCFGA_REPORT_LARVAL, /* struct crypto_report_larval */
|
||||
CRYPTOCFGA_REPORT_HASH, /* struct crypto_report_hash */
|
||||
CRYPTOCFGA_REPORT_BLKCIPHER, /* struct crypto_report_blkcipher */
|
||||
CRYPTOCFGA_REPORT_AEAD, /* struct crypto_report_aead */
|
||||
CRYPTOCFGA_REPORT_COMPRESS, /* struct crypto_report_comp */
|
||||
CRYPTOCFGA_REPORT_RNG, /* struct crypto_report_rng */
|
||||
CRYPTOCFGA_REPORT_CIPHER, /* struct crypto_report_cipher */
|
||||
__CRYPTOCFGA_MAX
|
||||
|
||||
#define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
|
||||
};
|
||||
|
||||
struct crypto_user_alg {
|
||||
char cru_name[CRYPTO_MAX_ALG_NAME];
|
||||
char cru_driver_name[CRYPTO_MAX_ALG_NAME];
|
||||
char cru_module_name[CRYPTO_MAX_ALG_NAME];
|
||||
__u32 cru_type;
|
||||
__u32 cru_mask;
|
||||
__u32 cru_refcnt;
|
||||
__u32 cru_flags;
|
||||
};
|
||||
|
||||
struct crypto_report_larval {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
};
|
||||
|
||||
struct crypto_report_hash {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
unsigned int blocksize;
|
||||
unsigned int digestsize;
|
||||
};
|
||||
|
||||
struct crypto_report_cipher {
|
||||
char type[CRYPTO_MAX_ALG_NAME];
|
||||
unsigned int blocksize;
|
||||
unsigned int min_keysize;
|
||||
unsigned int max_keysize;
|
||||
};
|
||||
|
||||
struct crypto_report_blkcipher {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
char geniv[CRYPTO_MAX_NAME];
|
||||
unsigned int blocksize;
|
||||
unsigned int min_keysize;
|
||||
unsigned int max_keysize;
|
||||
unsigned int ivsize;
|
||||
};
|
||||
|
||||
struct crypto_report_aead {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
char geniv[CRYPTO_MAX_NAME];
|
||||
unsigned int blocksize;
|
||||
unsigned int maxauthsize;
|
||||
unsigned int ivsize;
|
||||
};
|
||||
|
||||
struct crypto_report_comp {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
};
|
||||
|
||||
struct crypto_report_rng {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
unsigned int seedsize;
|
||||
};
|
||||
238
include/linux/devfreq.h
Normal file
238
include/linux/devfreq.h
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
/*
|
||||
* devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
|
||||
* for Non-CPU Devices.
|
||||
*
|
||||
* Copyright (C) 2011 Samsung Electronics
|
||||
* MyungJoo Ham <myungjoo.ham@samsung.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.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_DEVFREQ_H__
|
||||
#define __LINUX_DEVFREQ_H__
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/opp.h>
|
||||
|
||||
#define DEVFREQ_NAME_LEN 16
|
||||
|
||||
struct devfreq;
|
||||
|
||||
/**
|
||||
* struct devfreq_dev_status - Data given from devfreq user device to
|
||||
* governors. Represents the performance
|
||||
* statistics.
|
||||
* @total_time The total time represented by this instance of
|
||||
* devfreq_dev_status
|
||||
* @busy_time The time that the device was working among the
|
||||
* total_time.
|
||||
* @current_frequency The operating frequency.
|
||||
* @private_data An entry not specified by the devfreq framework.
|
||||
* A device and a specific governor may have their
|
||||
* own protocol with private_data. However, because
|
||||
* this is governor-specific, a governor using this
|
||||
* will be only compatible with devices aware of it.
|
||||
*/
|
||||
struct devfreq_dev_status {
|
||||
/* both since the last measure */
|
||||
unsigned long total_time;
|
||||
unsigned long busy_time;
|
||||
unsigned long current_frequency;
|
||||
void *private_date;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct devfreq_dev_profile - Devfreq's user device profile
|
||||
* @initial_freq The operating frequency when devfreq_add_device() is
|
||||
* called.
|
||||
* @polling_ms The polling interval in ms. 0 disables polling.
|
||||
* @target The device should set its operating frequency at
|
||||
* freq or lowest-upper-than-freq value. If freq is
|
||||
* higher than any operable frequency, set maximum.
|
||||
* Before returning, target function should set
|
||||
* freq at the current frequency.
|
||||
* @get_dev_status The device should provide the current performance
|
||||
* status to devfreq, which is used by governors.
|
||||
* @exit An optional callback that is called when devfreq
|
||||
* is removing the devfreq object due to error or
|
||||
* from devfreq_remove_device() call. If the user
|
||||
* has registered devfreq->nb at a notifier-head,
|
||||
* this is the time to unregister it.
|
||||
*/
|
||||
struct devfreq_dev_profile {
|
||||
unsigned long initial_freq;
|
||||
unsigned int polling_ms;
|
||||
|
||||
int (*target)(struct device *dev, unsigned long *freq);
|
||||
int (*get_dev_status)(struct device *dev,
|
||||
struct devfreq_dev_status *stat);
|
||||
void (*exit)(struct device *dev);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct devfreq_governor - Devfreq policy governor
|
||||
* @name Governor's name
|
||||
* @get_target_freq Returns desired operating frequency for the device.
|
||||
* Basically, get_target_freq will run
|
||||
* devfreq_dev_profile.get_dev_status() to get the
|
||||
* status of the device (load = busy_time / total_time).
|
||||
* If no_central_polling is set, this callback is called
|
||||
* only with update_devfreq() notified by OPP.
|
||||
* @init Called when the devfreq is being attached to a device
|
||||
* @exit Called when the devfreq is being removed from a
|
||||
* device. Governor should stop any internal routines
|
||||
* before return because related data may be
|
||||
* freed after exit().
|
||||
* @no_central_polling Do not use devfreq's central polling mechanism.
|
||||
* When this is set, devfreq will not call
|
||||
* get_target_freq with devfreq_monitor(). However,
|
||||
* devfreq will call get_target_freq with
|
||||
* devfreq_update() notified by OPP framework.
|
||||
*
|
||||
* Note that the callbacks are called with devfreq->lock locked by devfreq.
|
||||
*/
|
||||
struct devfreq_governor {
|
||||
const char name[DEVFREQ_NAME_LEN];
|
||||
int (*get_target_freq)(struct devfreq *this, unsigned long *freq);
|
||||
int (*init)(struct devfreq *this);
|
||||
void (*exit)(struct devfreq *this);
|
||||
const bool no_central_polling;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct devfreq - Device devfreq structure
|
||||
* @node list node - contains the devices with devfreq that have been
|
||||
* registered.
|
||||
* @lock a mutex to protect accessing devfreq.
|
||||
* @dev device registered by devfreq class. dev.parent is the device
|
||||
* using devfreq.
|
||||
* @profile device-specific devfreq profile
|
||||
* @governor method how to choose frequency based on the usage.
|
||||
* @nb notifier block used to notify devfreq object that it should
|
||||
* reevaluate operable frequencies. Devfreq users may use
|
||||
* devfreq.nb to the corresponding register notifier call chain.
|
||||
* @polling_jiffies interval in jiffies.
|
||||
* @previous_freq previously configured frequency value.
|
||||
* @next_polling the number of remaining jiffies to poll with
|
||||
* "devfreq_monitor" executions to reevaluate
|
||||
* frequency/voltage of the device. Set by
|
||||
* profile's polling_ms interval.
|
||||
* @data Private data of the governor. The devfreq framework does not
|
||||
* touch this.
|
||||
* @being_removed a flag to mark that this object is being removed in
|
||||
* order to prevent trying to remove the object multiple times.
|
||||
*
|
||||
* This structure stores the devfreq information for a give device.
|
||||
*
|
||||
* Note that when a governor accesses entries in struct devfreq in its
|
||||
* functions except for the context of callbacks defined in struct
|
||||
* devfreq_governor, the governor should protect its access with the
|
||||
* struct mutex lock in struct devfreq. A governor may use this mutex
|
||||
* to protect its own private data in void *data as well.
|
||||
*/
|
||||
struct devfreq {
|
||||
struct list_head node;
|
||||
|
||||
struct mutex lock;
|
||||
struct device dev;
|
||||
struct devfreq_dev_profile *profile;
|
||||
const struct devfreq_governor *governor;
|
||||
struct notifier_block nb;
|
||||
|
||||
unsigned long polling_jiffies;
|
||||
unsigned long previous_freq;
|
||||
unsigned int next_polling;
|
||||
|
||||
void *data; /* private data for governors */
|
||||
|
||||
bool being_removed;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_PM_DEVFREQ)
|
||||
extern struct devfreq *devfreq_add_device(struct device *dev,
|
||||
struct devfreq_dev_profile *profile,
|
||||
const struct devfreq_governor *governor,
|
||||
void *data);
|
||||
extern int devfreq_remove_device(struct devfreq *devfreq);
|
||||
|
||||
/* Helper functions for devfreq user device driver with OPP. */
|
||||
extern struct opp *devfreq_recommended_opp(struct device *dev,
|
||||
unsigned long *freq);
|
||||
extern int devfreq_register_opp_notifier(struct device *dev,
|
||||
struct devfreq *devfreq);
|
||||
extern int devfreq_unregister_opp_notifier(struct device *dev,
|
||||
struct devfreq *devfreq);
|
||||
|
||||
#ifdef CONFIG_DEVFREQ_GOV_POWERSAVE
|
||||
extern const struct devfreq_governor devfreq_powersave;
|
||||
#endif
|
||||
#ifdef CONFIG_DEVFREQ_GOV_PERFORMANCE
|
||||
extern const struct devfreq_governor devfreq_performance;
|
||||
#endif
|
||||
#ifdef CONFIG_DEVFREQ_GOV_USERSPACE
|
||||
extern const struct devfreq_governor devfreq_userspace;
|
||||
#endif
|
||||
#ifdef CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND
|
||||
extern const struct devfreq_governor devfreq_simple_ondemand;
|
||||
/**
|
||||
* struct devfreq_simple_ondemand_data - void *data fed to struct devfreq
|
||||
* and devfreq_add_device
|
||||
* @ upthreshold If the load is over this value, the frequency jumps.
|
||||
* Specify 0 to use the default. Valid value = 0 to 100.
|
||||
* @ downdifferential If the load is under upthreshold - downdifferential,
|
||||
* the governor may consider slowing the frequency down.
|
||||
* Specify 0 to use the default. Valid value = 0 to 100.
|
||||
* downdifferential < upthreshold must hold.
|
||||
*
|
||||
* If the fed devfreq_simple_ondemand_data pointer is NULL to the governor,
|
||||
* the governor uses the default values.
|
||||
*/
|
||||
struct devfreq_simple_ondemand_data {
|
||||
unsigned int upthreshold;
|
||||
unsigned int downdifferential;
|
||||
};
|
||||
#endif
|
||||
|
||||
#else /* !CONFIG_PM_DEVFREQ */
|
||||
static struct devfreq *devfreq_add_device(struct device *dev,
|
||||
struct devfreq_dev_profile *profile,
|
||||
struct devfreq_governor *governor,
|
||||
void *data);
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int devfreq_remove_device(struct devfreq *devfreq);
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct opp *devfreq_recommended_opp(struct device *dev,
|
||||
unsigned long *freq)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int devfreq_register_opp_notifier(struct device *dev,
|
||||
struct devfreq *devfreq)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int devfreq_unregister_opp_notifier(struct device *dev,
|
||||
struct devfreq *devfreq)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#define devfreq_powersave NULL
|
||||
#define devfreq_performance NULL
|
||||
#define devfreq_userspace NULL
|
||||
#define devfreq_simple_ondemand NULL
|
||||
|
||||
#endif /* CONFIG_PM_DEVFREQ */
|
||||
|
||||
#endif /* __LINUX_DEVFREQ_H__ */
|
||||
|
|
@ -33,6 +33,7 @@ struct class;
|
|||
struct subsys_private;
|
||||
struct bus_type;
|
||||
struct device_node;
|
||||
struct iommu_ops;
|
||||
|
||||
struct bus_attribute {
|
||||
struct attribute attr;
|
||||
|
|
@ -67,6 +68,9 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
|
|||
* @resume: Called to bring a device on this bus out of sleep mode.
|
||||
* @pm: Power management operations of this bus, callback the specific
|
||||
* device driver's pm-ops.
|
||||
* @iommu_ops IOMMU specific operations for this bus, used to attach IOMMU
|
||||
* driver implementations to a bus and allow the driver to do
|
||||
* bus-specific setup
|
||||
* @p: The private data of the driver core, only the driver core can
|
||||
* touch this.
|
||||
*
|
||||
|
|
@ -96,6 +100,8 @@ struct bus_type {
|
|||
|
||||
const struct dev_pm_ops *pm;
|
||||
|
||||
struct iommu_ops *iommu_ops;
|
||||
|
||||
struct subsys_private *p;
|
||||
};
|
||||
|
||||
|
|
@ -350,6 +356,8 @@ struct class_attribute {
|
|||
char *buf);
|
||||
ssize_t (*store)(struct class *class, struct class_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
const void *(*namespace)(struct class *class,
|
||||
const struct class_attribute *attr);
|
||||
};
|
||||
|
||||
#define CLASS_ATTR(_name, _mode, _show, _store) \
|
||||
|
|
@ -614,8 +622,8 @@ static inline const char *dev_name(const struct device *dev)
|
|||
return kobject_name(&dev->kobj);
|
||||
}
|
||||
|
||||
extern int dev_set_name(struct device *dev, const char *name, ...)
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
extern __printf(2, 3)
|
||||
int dev_set_name(struct device *dev, const char *name, ...);
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
static inline int dev_to_node(struct device *dev)
|
||||
|
|
@ -636,6 +644,11 @@ static inline void set_dev_node(struct device *dev, int node)
|
|||
}
|
||||
#endif
|
||||
|
||||
static inline struct pm_subsys_data *dev_to_psd(struct device *dev)
|
||||
{
|
||||
return dev ? dev->power.subsys_data : NULL;
|
||||
}
|
||||
|
||||
static inline unsigned int dev_get_uevent_suppress(const struct device *dev)
|
||||
{
|
||||
return dev->kobj.uevent_suppress;
|
||||
|
|
@ -740,10 +753,10 @@ extern struct device *device_create_vargs(struct class *cls,
|
|||
void *drvdata,
|
||||
const char *fmt,
|
||||
va_list vargs);
|
||||
extern struct device *device_create(struct class *cls, struct device *parent,
|
||||
dev_t devt, void *drvdata,
|
||||
const char *fmt, ...)
|
||||
__attribute__((format(printf, 5, 6)));
|
||||
extern __printf(5, 6)
|
||||
struct device *device_create(struct class *cls, struct device *parent,
|
||||
dev_t devt, void *drvdata,
|
||||
const char *fmt, ...);
|
||||
extern void device_destroy(struct class *cls, dev_t devt);
|
||||
|
||||
/*
|
||||
|
|
@ -785,61 +798,58 @@ extern const char *dev_driver_string(const struct device *dev);
|
|||
|
||||
#ifdef CONFIG_PRINTK
|
||||
|
||||
extern int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int __dev_printk(const char *level, const struct device *dev,
|
||||
struct va_format *vaf);
|
||||
extern __printf(3, 4)
|
||||
int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
;
|
||||
extern __printf(2, 3)
|
||||
int dev_emerg(const struct device *dev, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int dev_alert(const struct device *dev, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int dev_crit(const struct device *dev, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int dev_err(const struct device *dev, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int dev_warn(const struct device *dev, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int dev_notice(const struct device *dev, const char *fmt, ...);
|
||||
extern __printf(2, 3)
|
||||
int _dev_info(const struct device *dev, const char *fmt, ...);
|
||||
|
||||
#else
|
||||
|
||||
static inline int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
static inline int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int __dev_printk(const char *level, const struct device *dev,
|
||||
struct va_format *vaf)
|
||||
{ return 0; }
|
||||
static inline __printf(3, 4)
|
||||
int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
{ return 0; }
|
||||
|
||||
static inline int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline __printf(2, 3)
|
||||
int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -25,11 +25,12 @@ struct intel_iommu;
|
|||
struct dmar_domain;
|
||||
struct root_entry;
|
||||
|
||||
extern void free_dmar_iommu(struct intel_iommu *iommu);
|
||||
|
||||
#ifdef CONFIG_DMAR
|
||||
#ifdef CONFIG_INTEL_IOMMU
|
||||
extern void free_dmar_iommu(struct intel_iommu *iommu);
|
||||
extern int iommu_calculate_agaw(struct intel_iommu *iommu);
|
||||
extern int iommu_calculate_max_sagaw(struct intel_iommu *iommu);
|
||||
extern int dmar_disabled;
|
||||
#else
|
||||
static inline int iommu_calculate_agaw(struct intel_iommu *iommu)
|
||||
{
|
||||
|
|
@ -39,8 +40,11 @@ static inline int iommu_calculate_max_sagaw(struct intel_iommu *iommu)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void free_dmar_iommu(struct intel_iommu *iommu)
|
||||
{
|
||||
}
|
||||
#define dmar_disabled (1)
|
||||
#endif
|
||||
|
||||
extern int dmar_disabled;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -26,8 +26,15 @@
|
|||
#include <linux/msi.h>
|
||||
#include <linux/irqreturn.h>
|
||||
|
||||
struct acpi_dmar_header;
|
||||
|
||||
/* DMAR Flags */
|
||||
#define DMAR_INTR_REMAP 0x1
|
||||
#define DMAR_X2APIC_OPT_OUT 0x2
|
||||
|
||||
struct intel_iommu;
|
||||
#if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP)
|
||||
#ifdef CONFIG_DMAR_TABLE
|
||||
extern struct acpi_table_header *dmar_tbl;
|
||||
struct dmar_drhd_unit {
|
||||
struct list_head list; /* list of drhd units */
|
||||
struct acpi_dmar_header *hdr; /* ACPI header */
|
||||
|
|
@ -76,7 +83,7 @@ static inline int enable_drhd_fault_handling(void)
|
|||
{
|
||||
return -1;
|
||||
}
|
||||
#endif /* !CONFIG_DMAR && !CONFIG_INTR_REMAP */
|
||||
#endif /* !CONFIG_DMAR_TABLE */
|
||||
|
||||
struct irte {
|
||||
union {
|
||||
|
|
@ -107,10 +114,10 @@ struct irte {
|
|||
};
|
||||
};
|
||||
|
||||
#ifdef CONFIG_INTR_REMAP
|
||||
#ifdef CONFIG_IRQ_REMAP
|
||||
extern int intr_remapping_enabled;
|
||||
extern int intr_remapping_supported(void);
|
||||
extern int enable_intr_remapping(int);
|
||||
extern int enable_intr_remapping(void);
|
||||
extern void disable_intr_remapping(void);
|
||||
extern int reenable_intr_remapping(int);
|
||||
|
||||
|
|
@ -177,7 +184,7 @@ static inline int set_msi_sid(struct irte *irte, struct pci_dev *dev)
|
|||
|
||||
#define intr_remapping_enabled (0)
|
||||
|
||||
static inline int enable_intr_remapping(int eim)
|
||||
static inline int enable_intr_remapping(void)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -192,6 +199,11 @@ static inline int reenable_intr_remapping(int eim)
|
|||
}
|
||||
#endif
|
||||
|
||||
enum {
|
||||
IRQ_REMAP_XAPIC_MODE,
|
||||
IRQ_REMAP_X2APIC_MODE,
|
||||
};
|
||||
|
||||
/* Can't use the common MSI interrupt functions
|
||||
* since DMAR is not a pci device
|
||||
*/
|
||||
|
|
@ -204,7 +216,7 @@ extern int dmar_set_interrupt(struct intel_iommu *iommu);
|
|||
extern irqreturn_t dmar_fault(int irq, void *dev_id);
|
||||
extern int arch_setup_dmar_msi(unsigned int irq);
|
||||
|
||||
#ifdef CONFIG_DMAR
|
||||
#ifdef CONFIG_INTEL_IOMMU
|
||||
extern int iommu_detected, no_iommu;
|
||||
extern struct list_head dmar_rmrr_units;
|
||||
struct dmar_rmrr_unit {
|
||||
|
|
@ -227,9 +239,26 @@ struct dmar_atsr_unit {
|
|||
u8 include_all:1; /* include all ports */
|
||||
};
|
||||
|
||||
int dmar_parse_rmrr_atsr_dev(void);
|
||||
extern int dmar_parse_one_rmrr(struct acpi_dmar_header *header);
|
||||
extern int dmar_parse_one_atsr(struct acpi_dmar_header *header);
|
||||
extern int dmar_parse_dev_scope(void *start, void *end, int *cnt,
|
||||
struct pci_dev ***devices, u16 segment);
|
||||
extern int intel_iommu_init(void);
|
||||
#else /* !CONFIG_DMAR: */
|
||||
#else /* !CONFIG_INTEL_IOMMU: */
|
||||
static inline int intel_iommu_init(void) { return -ENODEV; }
|
||||
#endif /* CONFIG_DMAR */
|
||||
static inline int dmar_parse_one_rmrr(struct acpi_dmar_header *header)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int dmar_parse_one_atsr(struct acpi_dmar_header *header)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int dmar_parse_rmrr_atsr_dev(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_INTEL_IOMMU */
|
||||
|
||||
#endif /* __DMAR_H__ */
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ enum packet_types {
|
|||
#define NL_STRING(pn, pr, member, len) \
|
||||
unsigned char member[len]; int member ## _len; \
|
||||
int tag_and_len ## member;
|
||||
#include "linux/drbd_nl.h"
|
||||
#include <linux/drbd_nl.h>
|
||||
|
||||
/* declare tag-list-sizes */
|
||||
static const int tag_list_sizes[] = {
|
||||
|
|
|
|||
|
|
@ -349,6 +349,7 @@ typedef enum fe_delivery_system {
|
|||
SYS_CMMB,
|
||||
SYS_DAB,
|
||||
SYS_DVBT2,
|
||||
SYS_TURBO,
|
||||
} fe_delivery_system_t;
|
||||
|
||||
struct dtv_cmds_h {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,6 @@
|
|||
#define _DVBVERSION_H_
|
||||
|
||||
#define DVB_API_VERSION 5
|
||||
#define DVB_API_VERSION_MINOR 3
|
||||
#define DVB_API_VERSION_MINOR 4
|
||||
|
||||
#endif /*_DVBVERSION_H_*/
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ struct dw_apb_clock_event_device *
|
|||
dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
|
||||
void __iomem *base, int irq, unsigned long freq);
|
||||
struct dw_apb_clocksource *
|
||||
dw_apb_clocksource_init(unsigned rating, char *name, void __iomem *base,
|
||||
dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
|
||||
unsigned long freq);
|
||||
void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs);
|
||||
void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
|
||||
|
|
|
|||
|
|
@ -1,13 +1,6 @@
|
|||
#ifndef _DYNAMIC_DEBUG_H
|
||||
#define _DYNAMIC_DEBUG_H
|
||||
|
||||
/* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which
|
||||
* bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They
|
||||
* use independent hash functions, to reduce the chance of false positives.
|
||||
*/
|
||||
extern long long dynamic_debug_enabled;
|
||||
extern long long dynamic_debug_enabled2;
|
||||
|
||||
/*
|
||||
* An instance of this structure is created in a special
|
||||
* ELF section at every dynamic debug callsite. At runtime,
|
||||
|
|
@ -44,29 +37,57 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
|
|||
|
||||
#if defined(CONFIG_DYNAMIC_DEBUG)
|
||||
extern int ddebug_remove_module(const char *mod_name);
|
||||
extern int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern __printf(2, 3)
|
||||
int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
|
||||
|
||||
#define dynamic_pr_debug(fmt, ...) do { \
|
||||
static struct _ddebug descriptor \
|
||||
__used \
|
||||
__attribute__((section("__verbose"), aligned(8))) = \
|
||||
{ KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__, \
|
||||
_DPRINTK_FLAGS_DEFAULT }; \
|
||||
if (unlikely(descriptor.enabled)) \
|
||||
__dynamic_pr_debug(&descriptor, pr_fmt(fmt), ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
struct device;
|
||||
|
||||
extern __printf(3, 4)
|
||||
int __dynamic_dev_dbg(struct _ddebug *descriptor, const struct device *dev,
|
||||
const char *fmt, ...);
|
||||
|
||||
#define dynamic_dev_dbg(dev, fmt, ...) do { \
|
||||
static struct _ddebug descriptor \
|
||||
__used \
|
||||
__attribute__((section("__verbose"), aligned(8))) = \
|
||||
{ KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__, \
|
||||
_DPRINTK_FLAGS_DEFAULT }; \
|
||||
if (unlikely(descriptor.enabled)) \
|
||||
dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
struct net_device;
|
||||
|
||||
extern __printf(3, 4)
|
||||
int __dynamic_netdev_dbg(struct _ddebug *descriptor,
|
||||
const struct net_device *dev,
|
||||
const char *fmt, ...);
|
||||
|
||||
#define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) \
|
||||
static struct _ddebug __used __aligned(8) \
|
||||
__attribute__((section("__verbose"))) name = { \
|
||||
.modname = KBUILD_MODNAME, \
|
||||
.function = __func__, \
|
||||
.filename = __FILE__, \
|
||||
.format = (fmt), \
|
||||
.lineno = __LINE__, \
|
||||
.flags = _DPRINTK_FLAGS_DEFAULT, \
|
||||
.enabled = false, \
|
||||
}
|
||||
|
||||
#define dynamic_pr_debug(fmt, ...) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (unlikely(descriptor.enabled)) \
|
||||
__dynamic_pr_debug(&descriptor, pr_fmt(fmt), \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define dynamic_dev_dbg(dev, fmt, ...) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (unlikely(descriptor.enabled)) \
|
||||
__dynamic_dev_dbg(&descriptor, dev, fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define dynamic_netdev_dbg(dev, fmt, ...) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (unlikely(descriptor.enabled)) \
|
||||
__dynamic_netdev_dbg(&descriptor, dev, fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
|
|
|
|||
|
|
@ -395,6 +395,7 @@ typedef struct elf64_shdr {
|
|||
#define NT_S390_CTRS 0x304 /* s390 control registers */
|
||||
#define NT_S390_PREFIX 0x305 /* s390 prefix register */
|
||||
#define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */
|
||||
#define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */
|
||||
#define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -117,99 +117,101 @@ struct ethtool_eeprom {
|
|||
__u8 data[0];
|
||||
};
|
||||
|
||||
/* for configuring coalescing parameters of chip */
|
||||
/**
|
||||
* struct ethtool_coalesce - coalescing parameters for IRQs and stats updates
|
||||
* @cmd: ETHTOOL_{G,S}COALESCE
|
||||
* @rx_coalesce_usecs: How many usecs to delay an RX interrupt after
|
||||
* a packet arrives.
|
||||
* @rx_max_coalesced_frames: Maximum number of packets to receive
|
||||
* before an RX interrupt.
|
||||
* @rx_coalesce_usecs_irq: Same as @rx_coalesce_usecs, except that
|
||||
* this value applies while an IRQ is being serviced by the host.
|
||||
* @rx_max_coalesced_frames_irq: Same as @rx_max_coalesced_frames,
|
||||
* except that this value applies while an IRQ is being serviced
|
||||
* by the host.
|
||||
* @tx_coalesce_usecs: How many usecs to delay a TX interrupt after
|
||||
* a packet is sent.
|
||||
* @tx_max_coalesced_frames: Maximum number of packets to be sent
|
||||
* before a TX interrupt.
|
||||
* @tx_coalesce_usecs_irq: Same as @tx_coalesce_usecs, except that
|
||||
* this value applies while an IRQ is being serviced by the host.
|
||||
* @tx_max_coalesced_frames_irq: Same as @tx_max_coalesced_frames,
|
||||
* except that this value applies while an IRQ is being serviced
|
||||
* by the host.
|
||||
* @stats_block_coalesce_usecs: How many usecs to delay in-memory
|
||||
* statistics block updates. Some drivers do not have an
|
||||
* in-memory statistic block, and in such cases this value is
|
||||
* ignored. This value must not be zero.
|
||||
* @use_adaptive_rx_coalesce: Enable adaptive RX coalescing.
|
||||
* @use_adaptive_tx_coalesce: Enable adaptive TX coalescing.
|
||||
* @pkt_rate_low: Threshold for low packet rate (packets per second).
|
||||
* @rx_coalesce_usecs_low: How many usecs to delay an RX interrupt after
|
||||
* a packet arrives, when the packet rate is below @pkt_rate_low.
|
||||
* @rx_max_coalesced_frames_low: Maximum number of packets to be received
|
||||
* before an RX interrupt, when the packet rate is below @pkt_rate_low.
|
||||
* @tx_coalesce_usecs_low: How many usecs to delay a TX interrupt after
|
||||
* a packet is sent, when the packet rate is below @pkt_rate_low.
|
||||
* @tx_max_coalesced_frames_low: Maximum nuumber of packets to be sent before
|
||||
* a TX interrupt, when the packet rate is below @pkt_rate_low.
|
||||
* @pkt_rate_high: Threshold for high packet rate (packets per second).
|
||||
* @rx_coalesce_usecs_high: How many usecs to delay an RX interrupt after
|
||||
* a packet arrives, when the packet rate is above @pkt_rate_high.
|
||||
* @rx_max_coalesced_frames_high: Maximum number of packets to be received
|
||||
* before an RX interrupt, when the packet rate is above @pkt_rate_high.
|
||||
* @tx_coalesce_usecs_high: How many usecs to delay a TX interrupt after
|
||||
* a packet is sent, when the packet rate is above @pkt_rate_high.
|
||||
* @tx_max_coalesced_frames_high: Maximum number of packets to be sent before
|
||||
* a TX interrupt, when the packet rate is above @pkt_rate_high.
|
||||
* @rate_sample_interval: How often to do adaptive coalescing packet rate
|
||||
* sampling, measured in seconds. Must not be zero.
|
||||
*
|
||||
* Each pair of (usecs, max_frames) fields specifies this exit
|
||||
* condition for interrupt coalescing:
|
||||
* (usecs > 0 && time_since_first_completion >= usecs) ||
|
||||
* (max_frames > 0 && completed_frames >= max_frames)
|
||||
* It is illegal to set both usecs and max_frames to zero as this
|
||||
* would cause interrupts to never be generated. To disable
|
||||
* coalescing, set usecs = 0 and max_frames = 1.
|
||||
*
|
||||
* Some implementations ignore the value of max_frames and use the
|
||||
* condition:
|
||||
* time_since_first_completion >= usecs
|
||||
* This is deprecated. Drivers for hardware that does not support
|
||||
* counting completions should validate that max_frames == !rx_usecs.
|
||||
*
|
||||
* Adaptive RX/TX coalescing is an algorithm implemented by some
|
||||
* drivers to improve latency under low packet rates and improve
|
||||
* throughput under high packet rates. Some drivers only implement
|
||||
* one of RX or TX adaptive coalescing. Anything not implemented by
|
||||
* the driver causes these values to be silently ignored.
|
||||
*
|
||||
* When the packet rate is below @pkt_rate_high but above
|
||||
* @pkt_rate_low (both measured in packets per second) the
|
||||
* normal {rx,tx}_* coalescing parameters are used.
|
||||
*/
|
||||
struct ethtool_coalesce {
|
||||
__u32 cmd; /* ETHTOOL_{G,S}COALESCE */
|
||||
|
||||
/* How many usecs to delay an RX interrupt after
|
||||
* a packet arrives. If 0, only rx_max_coalesced_frames
|
||||
* is used.
|
||||
*/
|
||||
__u32 cmd;
|
||||
__u32 rx_coalesce_usecs;
|
||||
|
||||
/* How many packets to delay an RX interrupt after
|
||||
* a packet arrives. If 0, only rx_coalesce_usecs is
|
||||
* used. It is illegal to set both usecs and max frames
|
||||
* to zero as this would cause RX interrupts to never be
|
||||
* generated.
|
||||
*/
|
||||
__u32 rx_max_coalesced_frames;
|
||||
|
||||
/* Same as above two parameters, except that these values
|
||||
* apply while an IRQ is being serviced by the host. Not
|
||||
* all cards support this feature and the values are ignored
|
||||
* in that case.
|
||||
*/
|
||||
__u32 rx_coalesce_usecs_irq;
|
||||
__u32 rx_max_coalesced_frames_irq;
|
||||
|
||||
/* How many usecs to delay a TX interrupt after
|
||||
* a packet is sent. If 0, only tx_max_coalesced_frames
|
||||
* is used.
|
||||
*/
|
||||
__u32 tx_coalesce_usecs;
|
||||
|
||||
/* How many packets to delay a TX interrupt after
|
||||
* a packet is sent. If 0, only tx_coalesce_usecs is
|
||||
* used. It is illegal to set both usecs and max frames
|
||||
* to zero as this would cause TX interrupts to never be
|
||||
* generated.
|
||||
*/
|
||||
__u32 tx_max_coalesced_frames;
|
||||
|
||||
/* Same as above two parameters, except that these values
|
||||
* apply while an IRQ is being serviced by the host. Not
|
||||
* all cards support this feature and the values are ignored
|
||||
* in that case.
|
||||
*/
|
||||
__u32 tx_coalesce_usecs_irq;
|
||||
__u32 tx_max_coalesced_frames_irq;
|
||||
|
||||
/* How many usecs to delay in-memory statistics
|
||||
* block updates. Some drivers do not have an in-memory
|
||||
* statistic block, and in such cases this value is ignored.
|
||||
* This value must not be zero.
|
||||
*/
|
||||
__u32 stats_block_coalesce_usecs;
|
||||
|
||||
/* Adaptive RX/TX coalescing is an algorithm implemented by
|
||||
* some drivers to improve latency under low packet rates and
|
||||
* improve throughput under high packet rates. Some drivers
|
||||
* only implement one of RX or TX adaptive coalescing. Anything
|
||||
* not implemented by the driver causes these values to be
|
||||
* silently ignored.
|
||||
*/
|
||||
__u32 use_adaptive_rx_coalesce;
|
||||
__u32 use_adaptive_tx_coalesce;
|
||||
|
||||
/* When the packet rate (measured in packets per second)
|
||||
* is below pkt_rate_low, the {rx,tx}_*_low parameters are
|
||||
* used.
|
||||
*/
|
||||
__u32 pkt_rate_low;
|
||||
__u32 rx_coalesce_usecs_low;
|
||||
__u32 rx_max_coalesced_frames_low;
|
||||
__u32 tx_coalesce_usecs_low;
|
||||
__u32 tx_max_coalesced_frames_low;
|
||||
|
||||
/* When the packet rate is below pkt_rate_high but above
|
||||
* pkt_rate_low (both measured in packets per second) the
|
||||
* normal {rx,tx}_* coalescing parameters are used.
|
||||
*/
|
||||
|
||||
/* When the packet rate is (measured in packets per second)
|
||||
* is above pkt_rate_high, the {rx,tx}_*_high parameters are
|
||||
* used.
|
||||
*/
|
||||
__u32 pkt_rate_high;
|
||||
__u32 rx_coalesce_usecs_high;
|
||||
__u32 rx_max_coalesced_frames_high;
|
||||
__u32 tx_coalesce_usecs_high;
|
||||
__u32 tx_max_coalesced_frames_high;
|
||||
|
||||
/* How often to do adaptive coalescing packet rate sampling,
|
||||
* measured in seconds. Must not be zero.
|
||||
*/
|
||||
__u32 rate_sample_interval;
|
||||
};
|
||||
|
||||
|
|
@ -444,7 +446,7 @@ struct ethtool_flow_ext {
|
|||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_rx_flow_spec - specification for RX flow filter
|
||||
* struct ethtool_rx_flow_spec - classification rule for RX flows
|
||||
* @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
|
||||
* @h_u: Flow fields to match (dependent on @flow_type)
|
||||
* @h_ext: Additional fields to match
|
||||
|
|
@ -454,7 +456,9 @@ struct ethtool_flow_ext {
|
|||
* includes the %FLOW_EXT flag.
|
||||
* @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC
|
||||
* if packets should be discarded
|
||||
* @location: Index of filter in hardware table
|
||||
* @location: Location of rule in the table. Locations must be
|
||||
* numbered such that a flow matching multiple rules will be
|
||||
* classified according to the first (lowest numbered) rule.
|
||||
*/
|
||||
struct ethtool_rx_flow_spec {
|
||||
__u32 flow_type;
|
||||
|
|
@ -473,9 +477,9 @@ struct ethtool_rx_flow_spec {
|
|||
* %ETHTOOL_GRXCLSRLALL, %ETHTOOL_SRXCLSRLDEL or %ETHTOOL_SRXCLSRLINS
|
||||
* @flow_type: Type of flow to be affected, e.g. %TCP_V4_FLOW
|
||||
* @data: Command-dependent value
|
||||
* @fs: Flow filter specification
|
||||
* @fs: Flow classification rule
|
||||
* @rule_cnt: Number of rules to be affected
|
||||
* @rule_locs: Array of valid rule indices
|
||||
* @rule_locs: Array of used rule locations
|
||||
*
|
||||
* For %ETHTOOL_GRXFH and %ETHTOOL_SRXFH, @data is a bitmask indicating
|
||||
* the fields included in the flow hash, e.g. %RXH_IP_SRC. The following
|
||||
|
|
@ -487,23 +491,20 @@ struct ethtool_rx_flow_spec {
|
|||
* For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined
|
||||
* rules on return.
|
||||
*
|
||||
* For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the index of an
|
||||
* existing filter rule on entry and @fs contains the rule on return.
|
||||
* For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an
|
||||
* existing rule on entry and @fs contains the rule on return.
|
||||
*
|
||||
* For %ETHTOOL_GRXCLSRLALL, @rule_cnt specifies the array size of the
|
||||
* user buffer for @rule_locs on entry. On return, @data is the size
|
||||
* of the filter table and @rule_locs contains the indices of the
|
||||
* defined rules.
|
||||
* of the rule table, @rule_cnt is the number of defined rules, and
|
||||
* @rule_locs contains the locations of the defined rules. Drivers
|
||||
* must use the second parameter to get_rxnfc() instead of @rule_locs.
|
||||
*
|
||||
* For %ETHTOOL_SRXCLSRLINS, @fs specifies the filter rule to add or
|
||||
* update. @fs.@location specifies the index to use and must not be
|
||||
* ignored.
|
||||
* For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update.
|
||||
* @fs.@location specifies the location to use and must not be ignored.
|
||||
*
|
||||
* For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the index of an
|
||||
* existing filter rule on entry.
|
||||
*
|
||||
* Implementation of indexed classification rules generally requires a
|
||||
* TCAM.
|
||||
* For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an
|
||||
* existing rule on entry.
|
||||
*/
|
||||
struct ethtool_rxnfc {
|
||||
__u32 cmd;
|
||||
|
|
@ -726,6 +727,9 @@ enum ethtool_sfeatures_retval_bits {
|
|||
/* needed by dev_disable_lro() */
|
||||
extern int __ethtool_set_flags(struct net_device *dev, u32 flags);
|
||||
|
||||
extern int __ethtool_get_settings(struct net_device *dev,
|
||||
struct ethtool_cmd *cmd);
|
||||
|
||||
/**
|
||||
* enum ethtool_phys_id_state - indicator state for physical identification
|
||||
* @ETHTOOL_ID_INACTIVE: Physical ID indicator should be deactivated
|
||||
|
|
@ -936,7 +940,7 @@ struct ethtool_ops {
|
|||
int (*set_priv_flags)(struct net_device *, u32);
|
||||
int (*get_sset_count)(struct net_device *, int);
|
||||
int (*get_rxnfc)(struct net_device *,
|
||||
struct ethtool_rxnfc *, void *);
|
||||
struct ethtool_rxnfc *, u32 *rule_locs);
|
||||
int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
|
||||
int (*flash_device)(struct net_device *, struct ethtool_flash *);
|
||||
int (*reset)(struct net_device *, u32 *);
|
||||
|
|
|
|||
100
include/linux/evm.h
Normal file
100
include/linux/evm.h
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* evm.h
|
||||
*
|
||||
* Copyright (c) 2009 IBM Corporation
|
||||
* Author: Mimi Zohar <zohar@us.ibm.com>
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_EVM_H
|
||||
#define _LINUX_EVM_H
|
||||
|
||||
#include <linux/integrity.h>
|
||||
#include <linux/xattr.h>
|
||||
|
||||
struct integrity_iint_cache;
|
||||
|
||||
#ifdef CONFIG_EVM
|
||||
extern enum integrity_status evm_verifyxattr(struct dentry *dentry,
|
||||
const char *xattr_name,
|
||||
void *xattr_value,
|
||||
size_t xattr_value_len,
|
||||
struct integrity_iint_cache *iint);
|
||||
extern int evm_inode_setattr(struct dentry *dentry, struct iattr *attr);
|
||||
extern void evm_inode_post_setattr(struct dentry *dentry, int ia_valid);
|
||||
extern int evm_inode_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size);
|
||||
extern void evm_inode_post_setxattr(struct dentry *dentry,
|
||||
const char *xattr_name,
|
||||
const void *xattr_value,
|
||||
size_t xattr_value_len);
|
||||
extern int evm_inode_removexattr(struct dentry *dentry, const char *xattr_name);
|
||||
extern void evm_inode_post_removexattr(struct dentry *dentry,
|
||||
const char *xattr_name);
|
||||
extern int evm_inode_init_security(struct inode *inode,
|
||||
const struct xattr *xattr_array,
|
||||
struct xattr *evm);
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
extern int posix_xattr_acl(const char *xattrname);
|
||||
#else
|
||||
static inline int posix_xattr_acl(const char *xattrname)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#ifdef CONFIG_INTEGRITY
|
||||
static inline enum integrity_status evm_verifyxattr(struct dentry *dentry,
|
||||
const char *xattr_name,
|
||||
void *xattr_value,
|
||||
size_t xattr_value_len,
|
||||
struct integrity_iint_cache *iint)
|
||||
{
|
||||
return INTEGRITY_UNKNOWN;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int evm_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void evm_inode_post_setattr(struct dentry *dentry, int ia_valid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int evm_inode_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void evm_inode_post_setxattr(struct dentry *dentry,
|
||||
const char *xattr_name,
|
||||
const void *xattr_value,
|
||||
size_t xattr_value_len)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int evm_inode_removexattr(struct dentry *dentry,
|
||||
const char *xattr_name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void evm_inode_post_removexattr(struct dentry *dentry,
|
||||
const char *xattr_name)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int evm_inode_init_security(struct inode *inode,
|
||||
const struct xattr *xattr_array,
|
||||
struct xattr *evm)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_EVM_H */
|
||||
#endif /* LINUX_EVM_H */
|
||||
|
|
@ -937,15 +937,15 @@ extern int ext3_group_extend(struct super_block *sb,
|
|||
ext3_fsblk_t n_blocks_count);
|
||||
|
||||
/* super.c */
|
||||
extern void ext3_error (struct super_block *, const char *, const char *, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern __printf(3, 4)
|
||||
void ext3_error(struct super_block *, const char *, const char *, ...);
|
||||
extern void __ext3_std_error (struct super_block *, const char *, int);
|
||||
extern void ext3_abort (struct super_block *, const char *, const char *, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern void ext3_warning (struct super_block *, const char *, const char *, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern void ext3_msg(struct super_block *, const char *, const char *, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern __printf(3, 4)
|
||||
void ext3_abort(struct super_block *, const char *, const char *, ...);
|
||||
extern __printf(3, 4)
|
||||
void ext3_warning(struct super_block *, const char *, const char *, ...);
|
||||
extern __printf(3, 4)
|
||||
void ext3_msg(struct super_block *, const char *, const char *, ...);
|
||||
extern void ext3_update_dynamic_rev (struct super_block *sb);
|
||||
|
||||
#define ext3_std_error(sb, errno) \
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ extern unsigned int sk_run_filter(const struct sk_buff *skb,
|
|||
const struct sock_filter *filter);
|
||||
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
|
||||
extern int sk_detach_filter(struct sock *sk);
|
||||
extern int sk_chk_filter(struct sock_filter *filter, int flen);
|
||||
extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen);
|
||||
|
||||
#ifdef CONFIG_BPF_JIT
|
||||
extern void bpf_jit_compile(struct sk_filter *fp);
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ extern int thaw_process(struct task_struct *p);
|
|||
|
||||
extern void refrigerator(void);
|
||||
extern int freeze_processes(void);
|
||||
extern int freeze_kernel_threads(void);
|
||||
extern void thaw_processes(void);
|
||||
|
||||
static inline int try_to_freeze(void)
|
||||
|
|
@ -134,10 +135,25 @@ static inline void set_freezable_with_signal(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* Freezer-friendly wrappers around wait_event_interruptible() and
|
||||
* wait_event_interruptible_timeout(), originally defined in <linux/wait.h>
|
||||
* Freezer-friendly wrappers around wait_event_interruptible(),
|
||||
* wait_event_killable() and wait_event_interruptible_timeout(), originally
|
||||
* defined in <linux/wait.h>
|
||||
*/
|
||||
|
||||
#define wait_event_freezekillable(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
do { \
|
||||
__retval = wait_event_killable(wq, \
|
||||
(condition) || freezing(current)); \
|
||||
if (__retval && !freezing(current)) \
|
||||
break; \
|
||||
else if (!(condition)) \
|
||||
__retval = -ERESTARTSYS; \
|
||||
} while (try_to_freeze()); \
|
||||
__retval; \
|
||||
})
|
||||
|
||||
#define wait_event_freezable(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
|
|
@ -171,7 +187,8 @@ static inline void clear_freeze_flag(struct task_struct *p) {}
|
|||
static inline int thaw_process(struct task_struct *p) { return 1; }
|
||||
|
||||
static inline void refrigerator(void) {}
|
||||
static inline int freeze_processes(void) { BUG(); return 0; }
|
||||
static inline int freeze_processes(void) { return -ENOSYS; }
|
||||
static inline int freeze_kernel_threads(void) { return -ENOSYS; }
|
||||
static inline void thaw_processes(void) {}
|
||||
|
||||
static inline int try_to_freeze(void) { return 0; }
|
||||
|
|
@ -188,6 +205,9 @@ static inline void set_freezable_with_signal(void) {}
|
|||
#define wait_event_freezable_timeout(wq, condition, timeout) \
|
||||
wait_event_interruptible_timeout(wq, condition, timeout)
|
||||
|
||||
#define wait_event_freezekillable(wq, condition) \
|
||||
wait_event_killable(wq, condition)
|
||||
|
||||
#endif /* !CONFIG_FREEZER */
|
||||
|
||||
#endif /* FREEZER_H_INCLUDED */
|
||||
|
|
|
|||
|
|
@ -58,14 +58,15 @@ struct inodes_stat_t {
|
|||
|
||||
#define NR_FILE 8192 /* this can well be larger on a larger system */
|
||||
|
||||
#define MAY_EXEC 1
|
||||
#define MAY_WRITE 2
|
||||
#define MAY_READ 4
|
||||
#define MAY_APPEND 8
|
||||
#define MAY_ACCESS 16
|
||||
#define MAY_OPEN 32
|
||||
#define MAY_CHDIR 64
|
||||
#define MAY_NOT_BLOCK 128 /* called from RCU mode, don't block */
|
||||
#define MAY_EXEC 0x00000001
|
||||
#define MAY_WRITE 0x00000002
|
||||
#define MAY_READ 0x00000004
|
||||
#define MAY_APPEND 0x00000008
|
||||
#define MAY_ACCESS 0x00000010
|
||||
#define MAY_OPEN 0x00000020
|
||||
#define MAY_CHDIR 0x00000040
|
||||
/* called from RCU mode, don't block */
|
||||
#define MAY_NOT_BLOCK 0x00000080
|
||||
|
||||
/*
|
||||
* flags in file.f_mode. Note that FMODE_READ and FMODE_WRITE must correspond
|
||||
|
|
@ -963,7 +964,12 @@ struct file {
|
|||
#define f_dentry f_path.dentry
|
||||
#define f_vfsmnt f_path.mnt
|
||||
const struct file_operations *f_op;
|
||||
spinlock_t f_lock; /* f_ep_links, f_flags, no IRQ */
|
||||
|
||||
/*
|
||||
* Protects f_ep_links, f_flags, f_pos vs i_size in lseek SEEK_CUR.
|
||||
* Must not be taken from IRQ context.
|
||||
*/
|
||||
spinlock_t f_lock;
|
||||
#ifdef CONFIG_SMP
|
||||
int f_sb_list_cpu;
|
||||
#endif
|
||||
|
|
@ -1063,6 +1069,8 @@ static inline int file_check_writeable(struct file *filp)
|
|||
#define FL_LEASE 32 /* lease held on this file */
|
||||
#define FL_CLOSE 64 /* unlock on close */
|
||||
#define FL_SLEEP 128 /* A blocking lock */
|
||||
#define FL_DOWNGRADE_PENDING 256 /* Lease is being downgraded */
|
||||
#define FL_UNLOCK_PENDING 512 /* Lease is being broken */
|
||||
|
||||
/*
|
||||
* Special return value from posix_lock_file() and vfs_lock_file() for
|
||||
|
|
@ -1109,7 +1117,7 @@ struct file_lock {
|
|||
struct list_head fl_link; /* doubly linked list of all locks */
|
||||
struct list_head fl_block; /* circular list of blocked processes */
|
||||
fl_owner_t fl_owner;
|
||||
unsigned char fl_flags;
|
||||
unsigned int fl_flags;
|
||||
unsigned char fl_type;
|
||||
unsigned int fl_pid;
|
||||
struct pid *fl_nspid;
|
||||
|
|
@ -1119,7 +1127,9 @@ struct file_lock {
|
|||
loff_t fl_end;
|
||||
|
||||
struct fasync_struct * fl_fasync; /* for lease break notifications */
|
||||
unsigned long fl_break_time; /* for nonblocking lease breaks */
|
||||
/* for lease breaks: */
|
||||
unsigned long fl_break_time;
|
||||
unsigned long fl_downgrade_time;
|
||||
|
||||
const struct file_lock_operations *fl_ops; /* Callbacks for filesystems */
|
||||
const struct lock_manager_operations *fl_lmops; /* Callbacks for lockmanagers */
|
||||
|
|
@ -1623,9 +1633,10 @@ struct inode_operations {
|
|||
struct seq_file;
|
||||
|
||||
ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
|
||||
unsigned long nr_segs, unsigned long fast_segs,
|
||||
struct iovec *fast_pointer,
|
||||
struct iovec **ret_pointer);
|
||||
unsigned long nr_segs, unsigned long fast_segs,
|
||||
struct iovec *fast_pointer,
|
||||
struct iovec **ret_pointer,
|
||||
int check_access);
|
||||
|
||||
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
|
||||
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
|
||||
|
|
@ -2397,8 +2408,8 @@ 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 origin);
|
||||
extern loff_t no_llseek(struct file *file, loff_t offset, int origin);
|
||||
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);
|
||||
extern loff_t generic_file_llseek_unlocked(struct file *file, loff_t offset,
|
||||
int origin);
|
||||
extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
|
||||
int origin, loff_t maxsize);
|
||||
extern int generic_file_open(struct inode * inode, struct file * filp);
|
||||
extern int nonseekable_open(struct inode * inode, struct file * filp);
|
||||
|
||||
|
|
@ -2624,8 +2635,8 @@ static const struct file_operations __fops = { \
|
|||
.llseek = generic_file_llseek, \
|
||||
};
|
||||
|
||||
static inline void __attribute__((format(printf, 1, 2)))
|
||||
__simple_attr_check_format(const char *fmt, ...)
|
||||
static inline __printf(1, 2)
|
||||
void __simple_attr_check_format(const char *fmt, ...)
|
||||
{
|
||||
/* don't do anything, just let the compiler check the arguments; */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -492,10 +492,10 @@ static inline void fscache_end_io(struct fscache_retrieval *op,
|
|||
/*
|
||||
* out-of-line cache backend functions
|
||||
*/
|
||||
extern void fscache_init_cache(struct fscache_cache *cache,
|
||||
const struct fscache_cache_ops *ops,
|
||||
const char *idfmt,
|
||||
...) __attribute__ ((format (printf, 3, 4)));
|
||||
extern __printf(3, 4)
|
||||
void fscache_init_cache(struct fscache_cache *cache,
|
||||
const struct fscache_cache_ops *ops,
|
||||
const char *idfmt, ...);
|
||||
|
||||
extern int fscache_add_cache(struct fscache_cache *cache,
|
||||
struct fscache_object *fsdef,
|
||||
|
|
|
|||
|
|
@ -20,18 +20,8 @@
|
|||
#ifndef __FSL_DIU_FB_H__
|
||||
#define __FSL_DIU_FB_H__
|
||||
|
||||
/* Arbitrary threshold to determine the allocation method
|
||||
* See mpc8610fb_set_par(), map_video_memory(), and unmap_video_memory()
|
||||
*/
|
||||
#define MEM_ALLOC_THRESHOLD (1024*768*4+32)
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct mfb_alpha {
|
||||
int enable;
|
||||
int alpha;
|
||||
};
|
||||
|
||||
struct mfb_chroma_key {
|
||||
int enable;
|
||||
__u8 red_max;
|
||||
|
|
@ -43,25 +33,29 @@ struct mfb_chroma_key {
|
|||
};
|
||||
|
||||
struct aoi_display_offset {
|
||||
int x_aoi_d;
|
||||
int y_aoi_d;
|
||||
__s32 x_aoi_d;
|
||||
__s32 y_aoi_d;
|
||||
};
|
||||
|
||||
#define MFB_SET_CHROMA_KEY _IOW('M', 1, struct mfb_chroma_key)
|
||||
#define MFB_SET_BRIGHTNESS _IOW('M', 3, __u8)
|
||||
#define MFB_SET_ALPHA _IOW('M', 0, __u8)
|
||||
#define MFB_GET_ALPHA _IOR('M', 0, __u8)
|
||||
#define MFB_SET_AOID _IOW('M', 4, struct aoi_display_offset)
|
||||
#define MFB_GET_AOID _IOR('M', 4, struct aoi_display_offset)
|
||||
#define MFB_SET_PIXFMT _IOW('M', 8, __u32)
|
||||
#define MFB_GET_PIXFMT _IOR('M', 8, __u32)
|
||||
|
||||
#define MFB_SET_ALPHA 0x80014d00
|
||||
#define MFB_GET_ALPHA 0x40014d00
|
||||
#define MFB_SET_AOID 0x80084d04
|
||||
#define MFB_GET_AOID 0x40084d04
|
||||
#define MFB_SET_PIXFMT 0x80014d08
|
||||
#define MFB_GET_PIXFMT 0x40014d08
|
||||
|
||||
#define FBIOGET_GWINFO 0x46E0
|
||||
#define FBIOPUT_GWINFO 0x46E1
|
||||
/*
|
||||
* The original definitions of MFB_SET_PIXFMT and MFB_GET_PIXFMT used the
|
||||
* wrong value for 'size' field of the ioctl. The current macros above use the
|
||||
* right size, but we still need to provide backwards compatibility, at least
|
||||
* for a while.
|
||||
*/
|
||||
#define MFB_SET_PIXFMT_OLD 0x80014d08
|
||||
#define MFB_GET_PIXFMT_OLD 0x40014d08
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
/*
|
||||
* These are the fields of area descriptor(in DDR memory) for every plane
|
||||
|
|
@ -159,58 +153,12 @@ struct diu {
|
|||
__be32 plut;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct diu_hw {
|
||||
struct diu *diu_reg;
|
||||
spinlock_t reg_lock;
|
||||
|
||||
__u32 mode; /* DIU operation mode */
|
||||
};
|
||||
|
||||
struct diu_addr {
|
||||
__u8 __iomem *vaddr; /* Virtual address */
|
||||
dma_addr_t paddr; /* Physical address */
|
||||
__u32 offset;
|
||||
};
|
||||
|
||||
struct diu_pool {
|
||||
struct diu_addr ad;
|
||||
struct diu_addr gamma;
|
||||
struct diu_addr pallete;
|
||||
struct diu_addr cursor;
|
||||
};
|
||||
|
||||
#define FSL_DIU_BASE_OFFSET 0x2C000 /* Offset of DIU */
|
||||
#define INT_LCDC 64 /* DIU interrupt number */
|
||||
|
||||
#define FSL_AOI_NUM 6 /* 5 AOIs and one dummy AOI */
|
||||
/* 1 for plane 0, 2 for plane 1&2 each */
|
||||
|
||||
/* Minimum X and Y resolutions */
|
||||
#define MIN_XRES 64
|
||||
#define MIN_YRES 64
|
||||
|
||||
/* HW cursor parameters */
|
||||
#define MAX_CURS 32
|
||||
|
||||
/* Modes of operation of DIU */
|
||||
/*
|
||||
* Modes of operation of DIU. The DIU supports five different modes, but
|
||||
* the driver only supports modes 0 and 1.
|
||||
*/
|
||||
#define MFB_MODE0 0 /* DIU off */
|
||||
#define MFB_MODE1 1 /* All three planes output to display */
|
||||
#define MFB_MODE2 2 /* Plane 1 to display, planes 2+3 written back*/
|
||||
#define MFB_MODE3 3 /* All three planes written back to memory */
|
||||
#define MFB_MODE4 4 /* Color bar generation */
|
||||
|
||||
/* INT_STATUS/INT_MASK field descriptions */
|
||||
#define INT_VSYNC 0x01 /* Vsync interrupt */
|
||||
#define INT_VSYNC_WB 0x02 /* Vsync interrupt for write back operation */
|
||||
#define INT_UNDRUN 0x04 /* Under run exception interrupt */
|
||||
#define INT_PARERR 0x08 /* Display parameters error interrupt */
|
||||
#define INT_LS_BF_VS 0x10 /* Lines before vsync. interrupt */
|
||||
|
||||
/* Panels'operation modes */
|
||||
#define MFB_TYPE_OUTPUT 0 /* Panel output to display */
|
||||
#define MFB_TYPE_OFF 1 /* Panel off */
|
||||
#define MFB_TYPE_WB 2 /* Panel written back to memory */
|
||||
#define MFB_TYPE_TEST 3 /* Panel generate color bar */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __FSL_DIU_FB_H__ */
|
||||
|
|
|
|||
|
|
@ -78,8 +78,8 @@ static inline void gameport_register_port(struct gameport *gameport)
|
|||
|
||||
void gameport_unregister_port(struct gameport *gameport);
|
||||
|
||||
void gameport_set_phys(struct gameport *gameport, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
__printf(2, 3)
|
||||
void gameport_set_phys(struct gameport *gameport, const char *fmt, ...);
|
||||
|
||||
#else
|
||||
|
||||
|
|
@ -93,8 +93,8 @@ static inline void gameport_unregister_port(struct gameport *gameport)
|
|||
return;
|
||||
}
|
||||
|
||||
static inline void gameport_set_phys(struct gameport *gameport,
|
||||
const char *fmt, ...)
|
||||
static inline __printf(2, 3)
|
||||
void gameport_set_phys(struct gameport *gameport, const char *fmt, ...)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
#define dev_to_part(device) container_of((device), struct hd_struct, __dev)
|
||||
#define disk_to_dev(disk) (&(disk)->part0.__dev)
|
||||
#define part_to_dev(part) (&((part)->__dev))
|
||||
#define alias_name(disk) ((disk)->alias ? (disk)->alias : \
|
||||
(disk)->disk_name)
|
||||
|
||||
extern struct device_type part_type;
|
||||
extern struct kobject *block_depr;
|
||||
|
|
@ -58,6 +60,7 @@ enum {
|
|||
|
||||
#define DISK_MAX_PARTS 256
|
||||
#define DISK_NAME_LEN 32
|
||||
#define ALIAS_LEN 256
|
||||
|
||||
#include <linux/major.h>
|
||||
#include <linux/device.h>
|
||||
|
|
@ -162,6 +165,7 @@ struct gendisk {
|
|||
* disks that can't be partitioned. */
|
||||
|
||||
char disk_name[DISK_NAME_LEN]; /* name of major driver */
|
||||
char *alias; /* alias name of disk */
|
||||
char *(*devnode)(struct gendisk *gd, mode_t *mode);
|
||||
|
||||
unsigned int events; /* supported events */
|
||||
|
|
|
|||
|
|
@ -14,6 +14,18 @@
|
|||
#define GPIOF_OUT_INIT_LOW (GPIOF_DIR_OUT | GPIOF_INIT_LOW)
|
||||
#define GPIOF_OUT_INIT_HIGH (GPIOF_DIR_OUT | GPIOF_INIT_HIGH)
|
||||
|
||||
/**
|
||||
* struct gpio - a structure describing a GPIO with configuration
|
||||
* @gpio: the GPIO number
|
||||
* @flags: GPIO configuration as specified by GPIOF_*
|
||||
* @label: a literal description string of this GPIO
|
||||
*/
|
||||
struct gpio {
|
||||
unsigned gpio;
|
||||
unsigned long flags;
|
||||
const char *label;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_GENERIC_GPIO
|
||||
#include <asm/gpio.h>
|
||||
|
||||
|
|
@ -24,18 +36,8 @@
|
|||
#include <linux/errno.h>
|
||||
|
||||
struct device;
|
||||
struct gpio;
|
||||
struct gpio_chip;
|
||||
|
||||
/*
|
||||
* Some platforms don't support the GPIO programming interface.
|
||||
*
|
||||
* In case some driver uses it anyway (it should normally have
|
||||
* depended on GENERIC_GPIO), these routines help the compiler
|
||||
* optimize out much GPIO-related code ... or trigger a runtime
|
||||
* warning when something is wrongly called.
|
||||
*/
|
||||
|
||||
static inline bool gpio_is_valid(int number)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@
|
|||
#include <linux/timer.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/semaphore.h>
|
||||
|
||||
/*
|
||||
* We parse each description item into this structure. Short items data
|
||||
|
|
@ -312,6 +313,7 @@ struct hid_item {
|
|||
#define HID_QUIRK_BADPAD 0x00000020
|
||||
#define HID_QUIRK_MULTI_INPUT 0x00000040
|
||||
#define HID_QUIRK_HIDINPUT_FORCE 0x00000080
|
||||
#define HID_QUIRK_MULTITOUCH 0x00000100
|
||||
#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
|
||||
#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
|
||||
#define HID_QUIRK_NO_INIT_REPORTS 0x20000000
|
||||
|
|
@ -475,6 +477,7 @@ struct hid_device { /* device report descriptor */
|
|||
unsigned country; /* HID country */
|
||||
struct hid_report_enum report_enum[HID_REPORT_TYPES];
|
||||
|
||||
struct semaphore driver_lock; /* protects the current driver */
|
||||
struct device dev; /* device */
|
||||
struct hid_driver *driver;
|
||||
struct hid_ll_driver *ll_driver;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,11 @@ extern int zap_huge_pmd(struct mmu_gather *tlb,
|
|||
extern int mincore_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
|
||||
unsigned long addr, unsigned long end,
|
||||
unsigned char *vec);
|
||||
extern int move_huge_pmd(struct vm_area_struct *vma,
|
||||
struct vm_area_struct *new_vma,
|
||||
unsigned long old_addr,
|
||||
unsigned long new_addr, unsigned long old_end,
|
||||
pmd_t *old_pmd, pmd_t *new_pmd);
|
||||
extern int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
|
||||
unsigned long addr, pgprot_t newprot);
|
||||
|
||||
|
|
|
|||
873
include/linux/hyperv.h
Normal file
873
include/linux/hyperv.h
Normal file
|
|
@ -0,0 +1,873 @@
|
|||
/*
|
||||
*
|
||||
* Copyright (c) 2011, Microsoft Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
* Place - Suite 330, Boston, MA 02111-1307 USA.
|
||||
*
|
||||
* Authors:
|
||||
* Haiyang Zhang <haiyangz@microsoft.com>
|
||||
* Hank Janssen <hjanssen@microsoft.com>
|
||||
* K. Y. Srinivasan <kys@microsoft.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _HYPERV_H
|
||||
#define _HYPERV_H
|
||||
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/uuid.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
|
||||
#define MAX_PAGE_BUFFER_COUNT 16
|
||||
#define MAX_MULTIPAGE_BUFFER_COUNT 32 /* 128K */
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
/* Single-page buffer */
|
||||
struct hv_page_buffer {
|
||||
u32 len;
|
||||
u32 offset;
|
||||
u64 pfn;
|
||||
};
|
||||
|
||||
/* Multiple-page buffer */
|
||||
struct hv_multipage_buffer {
|
||||
/* Length and Offset determines the # of pfns in the array */
|
||||
u32 len;
|
||||
u32 offset;
|
||||
u64 pfn_array[MAX_MULTIPAGE_BUFFER_COUNT];
|
||||
};
|
||||
|
||||
/* 0x18 includes the proprietary packet header */
|
||||
#define MAX_PAGE_BUFFER_PACKET (0x18 + \
|
||||
(sizeof(struct hv_page_buffer) * \
|
||||
MAX_PAGE_BUFFER_COUNT))
|
||||
#define MAX_MULTIPAGE_BUFFER_PACKET (0x18 + \
|
||||
sizeof(struct hv_multipage_buffer))
|
||||
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
struct hv_ring_buffer {
|
||||
/* Offset in bytes from the start of ring data below */
|
||||
u32 write_index;
|
||||
|
||||
/* Offset in bytes from the start of ring data below */
|
||||
u32 read_index;
|
||||
|
||||
u32 interrupt_mask;
|
||||
|
||||
/* Pad it to PAGE_SIZE so that data starts on page boundary */
|
||||
u8 reserved[4084];
|
||||
|
||||
/* NOTE:
|
||||
* The interrupt_mask field is used only for channels but since our
|
||||
* vmbus connection also uses this data structure and its data starts
|
||||
* here, we commented out this field.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Ring data starts here + RingDataStartOffset
|
||||
* !!! DO NOT place any fields below this !!!
|
||||
*/
|
||||
u8 buffer[0];
|
||||
} __packed;
|
||||
|
||||
struct hv_ring_buffer_info {
|
||||
struct hv_ring_buffer *ring_buffer;
|
||||
u32 ring_size; /* Include the shared header */
|
||||
spinlock_t ring_lock;
|
||||
|
||||
u32 ring_datasize; /* < ring_size */
|
||||
u32 ring_data_startoffset;
|
||||
};
|
||||
|
||||
struct hv_ring_buffer_debug_info {
|
||||
u32 current_interrupt_mask;
|
||||
u32 current_read_index;
|
||||
u32 current_write_index;
|
||||
u32 bytes_avail_toread;
|
||||
u32 bytes_avail_towrite;
|
||||
};
|
||||
|
||||
/*
|
||||
* We use the same version numbering for all Hyper-V modules.
|
||||
*
|
||||
* Definition of versioning is as follows;
|
||||
*
|
||||
* Major Number Changes for these scenarios;
|
||||
* 1. When a new version of Windows Hyper-V
|
||||
* is released.
|
||||
* 2. A Major change has occurred in the
|
||||
* Linux IC's.
|
||||
* (For example the merge for the first time
|
||||
* into the kernel) Every time the Major Number
|
||||
* changes, the Revision number is reset to 0.
|
||||
* Minor Number Changes when new functionality is added
|
||||
* to the Linux IC's that is not a bug fix.
|
||||
*
|
||||
* 3.1 - Added completed hv_utils driver. Shutdown/Heartbeat/Timesync
|
||||
*/
|
||||
#define HV_DRV_VERSION "3.1"
|
||||
|
||||
|
||||
/*
|
||||
* A revision number of vmbus that is used for ensuring both ends on a
|
||||
* partition are using compatible versions.
|
||||
*/
|
||||
#define VMBUS_REVISION_NUMBER 13
|
||||
|
||||
/* Make maximum size of pipe payload of 16K */
|
||||
#define MAX_PIPE_DATA_PAYLOAD (sizeof(u8) * 16384)
|
||||
|
||||
/* Define PipeMode values. */
|
||||
#define VMBUS_PIPE_TYPE_BYTE 0x00000000
|
||||
#define VMBUS_PIPE_TYPE_MESSAGE 0x00000004
|
||||
|
||||
/* The size of the user defined data buffer for non-pipe offers. */
|
||||
#define MAX_USER_DEFINED_BYTES 120
|
||||
|
||||
/* The size of the user defined data buffer for pipe offers. */
|
||||
#define MAX_PIPE_USER_DEFINED_BYTES 116
|
||||
|
||||
/*
|
||||
* At the center of the Channel Management library is the Channel Offer. This
|
||||
* struct contains the fundamental information about an offer.
|
||||
*/
|
||||
struct vmbus_channel_offer {
|
||||
uuid_le if_type;
|
||||
uuid_le if_instance;
|
||||
u64 int_latency; /* in 100ns units */
|
||||
u32 if_revision;
|
||||
u32 server_ctx_size; /* in bytes */
|
||||
u16 chn_flags;
|
||||
u16 mmio_megabytes; /* in bytes * 1024 * 1024 */
|
||||
|
||||
union {
|
||||
/* Non-pipes: The user has MAX_USER_DEFINED_BYTES bytes. */
|
||||
struct {
|
||||
unsigned char user_def[MAX_USER_DEFINED_BYTES];
|
||||
} std;
|
||||
|
||||
/*
|
||||
* Pipes:
|
||||
* The following sructure is an integrated pipe protocol, which
|
||||
* is implemented on top of standard user-defined data. Pipe
|
||||
* clients have MAX_PIPE_USER_DEFINED_BYTES left for their own
|
||||
* use.
|
||||
*/
|
||||
struct {
|
||||
u32 pipe_mode;
|
||||
unsigned char user_def[MAX_PIPE_USER_DEFINED_BYTES];
|
||||
} pipe;
|
||||
} u;
|
||||
u32 padding;
|
||||
} __packed;
|
||||
|
||||
/* Server Flags */
|
||||
#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE 1
|
||||
#define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES 2
|
||||
#define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS 4
|
||||
#define VMBUS_CHANNEL_NAMED_PIPE_MODE 0x10
|
||||
#define VMBUS_CHANNEL_LOOPBACK_OFFER 0x100
|
||||
#define VMBUS_CHANNEL_PARENT_OFFER 0x200
|
||||
#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION 0x400
|
||||
|
||||
struct vmpacket_descriptor {
|
||||
u16 type;
|
||||
u16 offset8;
|
||||
u16 len8;
|
||||
u16 flags;
|
||||
u64 trans_id;
|
||||
} __packed;
|
||||
|
||||
struct vmpacket_header {
|
||||
u32 prev_pkt_start_offset;
|
||||
struct vmpacket_descriptor descriptor;
|
||||
} __packed;
|
||||
|
||||
struct vmtransfer_page_range {
|
||||
u32 byte_count;
|
||||
u32 byte_offset;
|
||||
} __packed;
|
||||
|
||||
struct vmtransfer_page_packet_header {
|
||||
struct vmpacket_descriptor d;
|
||||
u16 xfer_pageset_id;
|
||||
bool sender_owns_set;
|
||||
u8 reserved;
|
||||
u32 range_cnt;
|
||||
struct vmtransfer_page_range ranges[1];
|
||||
} __packed;
|
||||
|
||||
struct vmgpadl_packet_header {
|
||||
struct vmpacket_descriptor d;
|
||||
u32 gpadl;
|
||||
u32 reserved;
|
||||
} __packed;
|
||||
|
||||
struct vmadd_remove_transfer_page_set {
|
||||
struct vmpacket_descriptor d;
|
||||
u32 gpadl;
|
||||
u16 xfer_pageset_id;
|
||||
u16 reserved;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* This structure defines a range in guest physical space that can be made to
|
||||
* look virtually contiguous.
|
||||
*/
|
||||
struct gpa_range {
|
||||
u32 byte_count;
|
||||
u32 byte_offset;
|
||||
u64 pfn_array[0];
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the format for an Establish Gpadl packet, which contains a handle by
|
||||
* which this GPADL will be known and a set of GPA ranges associated with it.
|
||||
* This can be converted to a MDL by the guest OS. If there are multiple GPA
|
||||
* ranges, then the resulting MDL will be "chained," representing multiple VA
|
||||
* ranges.
|
||||
*/
|
||||
struct vmestablish_gpadl {
|
||||
struct vmpacket_descriptor d;
|
||||
u32 gpadl;
|
||||
u32 range_cnt;
|
||||
struct gpa_range range[1];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* This is the format for a Teardown Gpadl packet, which indicates that the
|
||||
* GPADL handle in the Establish Gpadl packet will never be referenced again.
|
||||
*/
|
||||
struct vmteardown_gpadl {
|
||||
struct vmpacket_descriptor d;
|
||||
u32 gpadl;
|
||||
u32 reserved; /* for alignment to a 8-byte boundary */
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* This is the format for a GPA-Direct packet, which contains a set of GPA
|
||||
* ranges, in addition to commands and/or data.
|
||||
*/
|
||||
struct vmdata_gpa_direct {
|
||||
struct vmpacket_descriptor d;
|
||||
u32 reserved;
|
||||
u32 range_cnt;
|
||||
struct gpa_range range[1];
|
||||
} __packed;
|
||||
|
||||
/* This is the format for a Additional Data Packet. */
|
||||
struct vmadditional_data {
|
||||
struct vmpacket_descriptor d;
|
||||
u64 total_bytes;
|
||||
u32 offset;
|
||||
u32 byte_cnt;
|
||||
unsigned char data[1];
|
||||
} __packed;
|
||||
|
||||
union vmpacket_largest_possible_header {
|
||||
struct vmpacket_descriptor simple_hdr;
|
||||
struct vmtransfer_page_packet_header xfer_page_hdr;
|
||||
struct vmgpadl_packet_header gpadl_hdr;
|
||||
struct vmadd_remove_transfer_page_set add_rm_xfer_page_hdr;
|
||||
struct vmestablish_gpadl establish_gpadl_hdr;
|
||||
struct vmteardown_gpadl teardown_gpadl_hdr;
|
||||
struct vmdata_gpa_direct data_gpa_direct_hdr;
|
||||
};
|
||||
|
||||
#define VMPACKET_DATA_START_ADDRESS(__packet) \
|
||||
(void *)(((unsigned char *)__packet) + \
|
||||
((struct vmpacket_descriptor)__packet)->offset8 * 8)
|
||||
|
||||
#define VMPACKET_DATA_LENGTH(__packet) \
|
||||
((((struct vmpacket_descriptor)__packet)->len8 - \
|
||||
((struct vmpacket_descriptor)__packet)->offset8) * 8)
|
||||
|
||||
#define VMPACKET_TRANSFER_MODE(__packet) \
|
||||
(((struct IMPACT)__packet)->type)
|
||||
|
||||
enum vmbus_packet_type {
|
||||
VM_PKT_INVALID = 0x0,
|
||||
VM_PKT_SYNCH = 0x1,
|
||||
VM_PKT_ADD_XFER_PAGESET = 0x2,
|
||||
VM_PKT_RM_XFER_PAGESET = 0x3,
|
||||
VM_PKT_ESTABLISH_GPADL = 0x4,
|
||||
VM_PKT_TEARDOWN_GPADL = 0x5,
|
||||
VM_PKT_DATA_INBAND = 0x6,
|
||||
VM_PKT_DATA_USING_XFER_PAGES = 0x7,
|
||||
VM_PKT_DATA_USING_GPADL = 0x8,
|
||||
VM_PKT_DATA_USING_GPA_DIRECT = 0x9,
|
||||
VM_PKT_CANCEL_REQUEST = 0xa,
|
||||
VM_PKT_COMP = 0xb,
|
||||
VM_PKT_DATA_USING_ADDITIONAL_PKT = 0xc,
|
||||
VM_PKT_ADDITIONAL_DATA = 0xd
|
||||
};
|
||||
|
||||
#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED 1
|
||||
|
||||
|
||||
/* Version 1 messages */
|
||||
enum vmbus_channel_message_type {
|
||||
CHANNELMSG_INVALID = 0,
|
||||
CHANNELMSG_OFFERCHANNEL = 1,
|
||||
CHANNELMSG_RESCIND_CHANNELOFFER = 2,
|
||||
CHANNELMSG_REQUESTOFFERS = 3,
|
||||
CHANNELMSG_ALLOFFERS_DELIVERED = 4,
|
||||
CHANNELMSG_OPENCHANNEL = 5,
|
||||
CHANNELMSG_OPENCHANNEL_RESULT = 6,
|
||||
CHANNELMSG_CLOSECHANNEL = 7,
|
||||
CHANNELMSG_GPADL_HEADER = 8,
|
||||
CHANNELMSG_GPADL_BODY = 9,
|
||||
CHANNELMSG_GPADL_CREATED = 10,
|
||||
CHANNELMSG_GPADL_TEARDOWN = 11,
|
||||
CHANNELMSG_GPADL_TORNDOWN = 12,
|
||||
CHANNELMSG_RELID_RELEASED = 13,
|
||||
CHANNELMSG_INITIATE_CONTACT = 14,
|
||||
CHANNELMSG_VERSION_RESPONSE = 15,
|
||||
CHANNELMSG_UNLOAD = 16,
|
||||
#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD
|
||||
CHANNELMSG_VIEWRANGE_ADD = 17,
|
||||
CHANNELMSG_VIEWRANGE_REMOVE = 18,
|
||||
#endif
|
||||
CHANNELMSG_COUNT
|
||||
};
|
||||
|
||||
struct vmbus_channel_message_header {
|
||||
enum vmbus_channel_message_type msgtype;
|
||||
u32 padding;
|
||||
} __packed;
|
||||
|
||||
/* Query VMBus Version parameters */
|
||||
struct vmbus_channel_query_vmbus_version {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 version;
|
||||
} __packed;
|
||||
|
||||
/* VMBus Version Supported parameters */
|
||||
struct vmbus_channel_version_supported {
|
||||
struct vmbus_channel_message_header header;
|
||||
bool version_supported;
|
||||
} __packed;
|
||||
|
||||
/* Offer Channel parameters */
|
||||
struct vmbus_channel_offer_channel {
|
||||
struct vmbus_channel_message_header header;
|
||||
struct vmbus_channel_offer offer;
|
||||
u32 child_relid;
|
||||
u8 monitorid;
|
||||
bool monitor_allocated;
|
||||
} __packed;
|
||||
|
||||
/* Rescind Offer parameters */
|
||||
struct vmbus_channel_rescind_offer {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Request Offer -- no parameters, SynIC message contains the partition ID
|
||||
* Set Snoop -- no parameters, SynIC message contains the partition ID
|
||||
* Clear Snoop -- no parameters, SynIC message contains the partition ID
|
||||
* All Offers Delivered -- no parameters, SynIC message contains the partition
|
||||
* ID
|
||||
* Flush Client -- no parameters, SynIC message contains the partition ID
|
||||
*/
|
||||
|
||||
/* Open Channel parameters */
|
||||
struct vmbus_channel_open_channel {
|
||||
struct vmbus_channel_message_header header;
|
||||
|
||||
/* Identifies the specific VMBus channel that is being opened. */
|
||||
u32 child_relid;
|
||||
|
||||
/* ID making a particular open request at a channel offer unique. */
|
||||
u32 openid;
|
||||
|
||||
/* GPADL for the channel's ring buffer. */
|
||||
u32 ringbuffer_gpadlhandle;
|
||||
|
||||
/* GPADL for the channel's server context save area. */
|
||||
u32 server_contextarea_gpadlhandle;
|
||||
|
||||
/*
|
||||
* The upstream ring buffer begins at offset zero in the memory
|
||||
* described by RingBufferGpadlHandle. The downstream ring buffer
|
||||
* follows it at this offset (in pages).
|
||||
*/
|
||||
u32 downstream_ringbuffer_pageoffset;
|
||||
|
||||
/* User-specific data to be passed along to the server endpoint. */
|
||||
unsigned char userdata[MAX_USER_DEFINED_BYTES];
|
||||
} __packed;
|
||||
|
||||
/* Open Channel Result parameters */
|
||||
struct vmbus_channel_open_result {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
u32 openid;
|
||||
u32 status;
|
||||
} __packed;
|
||||
|
||||
/* Close channel parameters; */
|
||||
struct vmbus_channel_close_channel {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
} __packed;
|
||||
|
||||
/* Channel Message GPADL */
|
||||
#define GPADL_TYPE_RING_BUFFER 1
|
||||
#define GPADL_TYPE_SERVER_SAVE_AREA 2
|
||||
#define GPADL_TYPE_TRANSACTION 8
|
||||
|
||||
/*
|
||||
* The number of PFNs in a GPADL message is defined by the number of
|
||||
* pages that would be spanned by ByteCount and ByteOffset. If the
|
||||
* implied number of PFNs won't fit in this packet, there will be a
|
||||
* follow-up packet that contains more.
|
||||
*/
|
||||
struct vmbus_channel_gpadl_header {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
u32 gpadl;
|
||||
u16 range_buflen;
|
||||
u16 rangecount;
|
||||
struct gpa_range range[0];
|
||||
} __packed;
|
||||
|
||||
/* This is the followup packet that contains more PFNs. */
|
||||
struct vmbus_channel_gpadl_body {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 msgnumber;
|
||||
u32 gpadl;
|
||||
u64 pfn[0];
|
||||
} __packed;
|
||||
|
||||
struct vmbus_channel_gpadl_created {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
u32 gpadl;
|
||||
u32 creation_status;
|
||||
} __packed;
|
||||
|
||||
struct vmbus_channel_gpadl_teardown {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
u32 gpadl;
|
||||
} __packed;
|
||||
|
||||
struct vmbus_channel_gpadl_torndown {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 gpadl;
|
||||
} __packed;
|
||||
|
||||
#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD
|
||||
struct vmbus_channel_view_range_add {
|
||||
struct vmbus_channel_message_header header;
|
||||
PHYSICAL_ADDRESS viewrange_base;
|
||||
u64 viewrange_length;
|
||||
u32 child_relid;
|
||||
} __packed;
|
||||
|
||||
struct vmbus_channel_view_range_remove {
|
||||
struct vmbus_channel_message_header header;
|
||||
PHYSICAL_ADDRESS viewrange_base;
|
||||
u32 child_relid;
|
||||
} __packed;
|
||||
#endif
|
||||
|
||||
struct vmbus_channel_relid_released {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 child_relid;
|
||||
} __packed;
|
||||
|
||||
struct vmbus_channel_initiate_contact {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 vmbus_version_requested;
|
||||
u32 padding2;
|
||||
u64 interrupt_page;
|
||||
u64 monitor_page1;
|
||||
u64 monitor_page2;
|
||||
} __packed;
|
||||
|
||||
struct vmbus_channel_version_response {
|
||||
struct vmbus_channel_message_header header;
|
||||
bool version_supported;
|
||||
} __packed;
|
||||
|
||||
enum vmbus_channel_state {
|
||||
CHANNEL_OFFER_STATE,
|
||||
CHANNEL_OPENING_STATE,
|
||||
CHANNEL_OPEN_STATE,
|
||||
};
|
||||
|
||||
struct vmbus_channel_debug_info {
|
||||
u32 relid;
|
||||
enum vmbus_channel_state state;
|
||||
uuid_le interfacetype;
|
||||
uuid_le interface_instance;
|
||||
u32 monitorid;
|
||||
u32 servermonitor_pending;
|
||||
u32 servermonitor_latency;
|
||||
u32 servermonitor_connectionid;
|
||||
u32 clientmonitor_pending;
|
||||
u32 clientmonitor_latency;
|
||||
u32 clientmonitor_connectionid;
|
||||
|
||||
struct hv_ring_buffer_debug_info inbound;
|
||||
struct hv_ring_buffer_debug_info outbound;
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents each channel msg on the vmbus connection This is a
|
||||
* variable-size data structure depending on the msg type itself
|
||||
*/
|
||||
struct vmbus_channel_msginfo {
|
||||
/* Bookkeeping stuff */
|
||||
struct list_head msglistentry;
|
||||
|
||||
/* So far, this is only used to handle gpadl body message */
|
||||
struct list_head submsglist;
|
||||
|
||||
/* Synchronize the request/response if needed */
|
||||
struct completion waitevent;
|
||||
union {
|
||||
struct vmbus_channel_version_supported version_supported;
|
||||
struct vmbus_channel_open_result open_result;
|
||||
struct vmbus_channel_gpadl_torndown gpadl_torndown;
|
||||
struct vmbus_channel_gpadl_created gpadl_created;
|
||||
struct vmbus_channel_version_response version_response;
|
||||
} response;
|
||||
|
||||
u32 msgsize;
|
||||
/*
|
||||
* The channel message that goes out on the "wire".
|
||||
* It will contain at minimum the VMBUS_CHANNEL_MESSAGE_HEADER header
|
||||
*/
|
||||
unsigned char msg[0];
|
||||
};
|
||||
|
||||
struct vmbus_close_msg {
|
||||
struct vmbus_channel_msginfo info;
|
||||
struct vmbus_channel_close_channel msg;
|
||||
};
|
||||
|
||||
struct vmbus_channel {
|
||||
struct list_head listentry;
|
||||
|
||||
struct hv_device *device_obj;
|
||||
|
||||
struct work_struct work;
|
||||
|
||||
enum vmbus_channel_state state;
|
||||
|
||||
struct vmbus_channel_offer_channel offermsg;
|
||||
/*
|
||||
* These are based on the OfferMsg.MonitorId.
|
||||
* Save it here for easy access.
|
||||
*/
|
||||
u8 monitor_grp;
|
||||
u8 monitor_bit;
|
||||
|
||||
u32 ringbuffer_gpadlhandle;
|
||||
|
||||
/* Allocated memory for ring buffer */
|
||||
void *ringbuffer_pages;
|
||||
u32 ringbuffer_pagecount;
|
||||
struct hv_ring_buffer_info outbound; /* send to parent */
|
||||
struct hv_ring_buffer_info inbound; /* receive from parent */
|
||||
spinlock_t inbound_lock;
|
||||
struct workqueue_struct *controlwq;
|
||||
|
||||
struct vmbus_close_msg close_msg;
|
||||
|
||||
/* Channel callback are invoked in this workqueue context */
|
||||
/* HANDLE dataWorkQueue; */
|
||||
|
||||
void (*onchannel_callback)(void *context);
|
||||
void *channel_callback_context;
|
||||
};
|
||||
|
||||
void vmbus_onmessage(void *context);
|
||||
|
||||
int vmbus_request_offers(void);
|
||||
|
||||
/* The format must be the same as struct vmdata_gpa_direct */
|
||||
struct vmbus_channel_packet_page_buffer {
|
||||
u16 type;
|
||||
u16 dataoffset8;
|
||||
u16 length8;
|
||||
u16 flags;
|
||||
u64 transactionid;
|
||||
u32 reserved;
|
||||
u32 rangecount;
|
||||
struct hv_page_buffer range[MAX_PAGE_BUFFER_COUNT];
|
||||
} __packed;
|
||||
|
||||
/* The format must be the same as struct vmdata_gpa_direct */
|
||||
struct vmbus_channel_packet_multipage_buffer {
|
||||
u16 type;
|
||||
u16 dataoffset8;
|
||||
u16 length8;
|
||||
u16 flags;
|
||||
u64 transactionid;
|
||||
u32 reserved;
|
||||
u32 rangecount; /* Always 1 in this case */
|
||||
struct hv_multipage_buffer range;
|
||||
} __packed;
|
||||
|
||||
|
||||
extern int vmbus_open(struct vmbus_channel *channel,
|
||||
u32 send_ringbuffersize,
|
||||
u32 recv_ringbuffersize,
|
||||
void *userdata,
|
||||
u32 userdatalen,
|
||||
void(*onchannel_callback)(void *context),
|
||||
void *context);
|
||||
|
||||
extern void vmbus_close(struct vmbus_channel *channel);
|
||||
|
||||
extern int vmbus_sendpacket(struct vmbus_channel *channel,
|
||||
const void *buffer,
|
||||
u32 bufferLen,
|
||||
u64 requestid,
|
||||
enum vmbus_packet_type type,
|
||||
u32 flags);
|
||||
|
||||
extern int vmbus_sendpacket_pagebuffer(struct vmbus_channel *channel,
|
||||
struct hv_page_buffer pagebuffers[],
|
||||
u32 pagecount,
|
||||
void *buffer,
|
||||
u32 bufferlen,
|
||||
u64 requestid);
|
||||
|
||||
extern int vmbus_sendpacket_multipagebuffer(struct vmbus_channel *channel,
|
||||
struct hv_multipage_buffer *mpb,
|
||||
void *buffer,
|
||||
u32 bufferlen,
|
||||
u64 requestid);
|
||||
|
||||
extern int vmbus_establish_gpadl(struct vmbus_channel *channel,
|
||||
void *kbuffer,
|
||||
u32 size,
|
||||
u32 *gpadl_handle);
|
||||
|
||||
extern int vmbus_teardown_gpadl(struct vmbus_channel *channel,
|
||||
u32 gpadl_handle);
|
||||
|
||||
extern int vmbus_recvpacket(struct vmbus_channel *channel,
|
||||
void *buffer,
|
||||
u32 bufferlen,
|
||||
u32 *buffer_actual_len,
|
||||
u64 *requestid);
|
||||
|
||||
extern int vmbus_recvpacket_raw(struct vmbus_channel *channel,
|
||||
void *buffer,
|
||||
u32 bufferlen,
|
||||
u32 *buffer_actual_len,
|
||||
u64 *requestid);
|
||||
|
||||
|
||||
extern void vmbus_get_debug_info(struct vmbus_channel *channel,
|
||||
struct vmbus_channel_debug_info *debug);
|
||||
|
||||
extern void vmbus_ontimer(unsigned long data);
|
||||
|
||||
struct hv_dev_port_info {
|
||||
u32 int_mask;
|
||||
u32 read_idx;
|
||||
u32 write_idx;
|
||||
u32 bytes_avail_toread;
|
||||
u32 bytes_avail_towrite;
|
||||
};
|
||||
|
||||
/* Base driver object */
|
||||
struct hv_driver {
|
||||
const char *name;
|
||||
|
||||
/* the device type supported by this driver */
|
||||
uuid_le dev_type;
|
||||
const struct hv_vmbus_device_id *id_table;
|
||||
|
||||
struct device_driver driver;
|
||||
|
||||
int (*probe)(struct hv_device *, const struct hv_vmbus_device_id *);
|
||||
int (*remove)(struct hv_device *);
|
||||
void (*shutdown)(struct hv_device *);
|
||||
|
||||
};
|
||||
|
||||
/* Base device object */
|
||||
struct hv_device {
|
||||
/* the device type id of this device */
|
||||
uuid_le dev_type;
|
||||
|
||||
/* the device instance id of this device */
|
||||
uuid_le dev_instance;
|
||||
|
||||
struct device device;
|
||||
|
||||
struct vmbus_channel *channel;
|
||||
};
|
||||
|
||||
|
||||
static inline struct hv_device *device_to_hv_device(struct device *d)
|
||||
{
|
||||
return container_of(d, struct hv_device, device);
|
||||
}
|
||||
|
||||
static inline struct hv_driver *drv_to_hv_drv(struct device_driver *d)
|
||||
{
|
||||
return container_of(d, struct hv_driver, driver);
|
||||
}
|
||||
|
||||
static inline void hv_set_drvdata(struct hv_device *dev, void *data)
|
||||
{
|
||||
dev_set_drvdata(&dev->device, data);
|
||||
}
|
||||
|
||||
static inline void *hv_get_drvdata(struct hv_device *dev)
|
||||
{
|
||||
return dev_get_drvdata(&dev->device);
|
||||
}
|
||||
|
||||
/* Vmbus interface */
|
||||
#define vmbus_driver_register(driver) \
|
||||
__vmbus_driver_register(driver, THIS_MODULE, KBUILD_MODNAME)
|
||||
int __must_check __vmbus_driver_register(struct hv_driver *hv_driver,
|
||||
struct module *owner,
|
||||
const char *mod_name);
|
||||
void vmbus_driver_unregister(struct hv_driver *hv_driver);
|
||||
|
||||
/**
|
||||
* VMBUS_DEVICE - macro used to describe a specific hyperv vmbus device
|
||||
*
|
||||
* This macro is used to create a struct hv_vmbus_device_id that matches a
|
||||
* specific device.
|
||||
*/
|
||||
#define VMBUS_DEVICE(g0, g1, g2, g3, g4, g5, g6, g7, \
|
||||
g8, g9, ga, gb, gc, gd, ge, gf) \
|
||||
.guid = { g0, g1, g2, g3, g4, g5, g6, g7, \
|
||||
g8, g9, ga, gb, gc, gd, ge, gf },
|
||||
|
||||
/*
|
||||
* Common header for Hyper-V ICs
|
||||
*/
|
||||
|
||||
#define ICMSGTYPE_NEGOTIATE 0
|
||||
#define ICMSGTYPE_HEARTBEAT 1
|
||||
#define ICMSGTYPE_KVPEXCHANGE 2
|
||||
#define ICMSGTYPE_SHUTDOWN 3
|
||||
#define ICMSGTYPE_TIMESYNC 4
|
||||
#define ICMSGTYPE_VSS 5
|
||||
|
||||
#define ICMSGHDRFLAG_TRANSACTION 1
|
||||
#define ICMSGHDRFLAG_REQUEST 2
|
||||
#define ICMSGHDRFLAG_RESPONSE 4
|
||||
|
||||
#define HV_S_OK 0x00000000
|
||||
#define HV_E_FAIL 0x80004005
|
||||
#define HV_ERROR_NOT_SUPPORTED 0x80070032
|
||||
#define HV_ERROR_MACHINE_LOCKED 0x800704F7
|
||||
|
||||
/*
|
||||
* While we want to handle util services as regular devices,
|
||||
* there is only one instance of each of these services; so
|
||||
* we statically allocate the service specific state.
|
||||
*/
|
||||
|
||||
struct hv_util_service {
|
||||
u8 *recv_buffer;
|
||||
void (*util_cb)(void *);
|
||||
int (*util_init)(struct hv_util_service *);
|
||||
void (*util_deinit)(void);
|
||||
};
|
||||
|
||||
struct vmbuspipe_hdr {
|
||||
u32 flags;
|
||||
u32 msgsize;
|
||||
} __packed;
|
||||
|
||||
struct ic_version {
|
||||
u16 major;
|
||||
u16 minor;
|
||||
} __packed;
|
||||
|
||||
struct icmsg_hdr {
|
||||
struct ic_version icverframe;
|
||||
u16 icmsgtype;
|
||||
struct ic_version icvermsg;
|
||||
u16 icmsgsize;
|
||||
u32 status;
|
||||
u8 ictransaction_id;
|
||||
u8 icflags;
|
||||
u8 reserved[2];
|
||||
} __packed;
|
||||
|
||||
struct icmsg_negotiate {
|
||||
u16 icframe_vercnt;
|
||||
u16 icmsg_vercnt;
|
||||
u32 reserved;
|
||||
struct ic_version icversion_data[1]; /* any size array */
|
||||
} __packed;
|
||||
|
||||
struct shutdown_msg_data {
|
||||
u32 reason_code;
|
||||
u32 timeout_seconds;
|
||||
u32 flags;
|
||||
u8 display_message[2048];
|
||||
} __packed;
|
||||
|
||||
struct heartbeat_msg_data {
|
||||
u64 seq_num;
|
||||
u32 reserved[8];
|
||||
} __packed;
|
||||
|
||||
/* Time Sync IC defs */
|
||||
#define ICTIMESYNCFLAG_PROBE 0
|
||||
#define ICTIMESYNCFLAG_SYNC 1
|
||||
#define ICTIMESYNCFLAG_SAMPLE 2
|
||||
|
||||
#ifdef __x86_64__
|
||||
#define WLTIMEDELTA 116444736000000000L /* in 100ns unit */
|
||||
#else
|
||||
#define WLTIMEDELTA 116444736000000000LL
|
||||
#endif
|
||||
|
||||
struct ictimesync_data {
|
||||
u64 parenttime;
|
||||
u64 childtime;
|
||||
u64 roundtriptime;
|
||||
u8 flags;
|
||||
} __packed;
|
||||
|
||||
struct hyperv_service_callback {
|
||||
u8 msg_type;
|
||||
char *log_msg;
|
||||
uuid_le data;
|
||||
struct vmbus_channel *channel;
|
||||
void (*callback) (void *context);
|
||||
};
|
||||
|
||||
extern void vmbus_prep_negotiate_resp(struct icmsg_hdr *,
|
||||
struct icmsg_negotiate *, u8 *);
|
||||
|
||||
#endif /* _HYPERV_H */
|
||||
|
|
@ -32,10 +32,9 @@
|
|||
|
||||
struct omap_i2c_bus_platform_data {
|
||||
u32 clkrate;
|
||||
u32 rev;
|
||||
u32 flags;
|
||||
void (*set_mpu_wkup_lat)(struct device *dev, long set);
|
||||
int (*device_enable) (struct platform_device *pdev);
|
||||
int (*device_shutdown) (struct platform_device *pdev);
|
||||
int (*device_idle) (struct platform_device *pdev);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include <linux/sched.h> /* for completion */
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/of.h> /* for struct device_node */
|
||||
#include <linux/swab.h> /* for swab16 */
|
||||
|
||||
extern struct bus_type i2c_bus_type;
|
||||
extern struct device_type i2c_adapter_type;
|
||||
|
|
@ -88,6 +89,22 @@ extern s32 i2c_smbus_read_word_data(const struct i2c_client *client,
|
|||
u8 command);
|
||||
extern s32 i2c_smbus_write_word_data(const struct i2c_client *client,
|
||||
u8 command, u16 value);
|
||||
|
||||
static inline s32
|
||||
i2c_smbus_read_word_swapped(const struct i2c_client *client, u8 command)
|
||||
{
|
||||
s32 value = i2c_smbus_read_word_data(client, command);
|
||||
|
||||
return (value < 0) ? value : swab16(value);
|
||||
}
|
||||
|
||||
static inline s32
|
||||
i2c_smbus_write_word_swapped(const struct i2c_client *client,
|
||||
u8 command, u16 value)
|
||||
{
|
||||
return i2c_smbus_write_word_data(client, command, swab16(value));
|
||||
}
|
||||
|
||||
/* Returns the number of read bytes */
|
||||
extern s32 i2c_smbus_read_block_data(const struct i2c_client *client,
|
||||
u8 command, u8 *values);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
struct tsc2007_platform_data {
|
||||
u16 model; /* 2007. */
|
||||
u16 x_plate_ohms;
|
||||
u16 x_plate_ohms; /* must be non-zero value */
|
||||
u16 max_rt; /* max. resistance above which samples are ignored */
|
||||
unsigned long poll_delay; /* delay (in ms) after pen-down event
|
||||
before polling starts */
|
||||
|
|
|
|||
|
|
@ -130,6 +130,8 @@
|
|||
#define IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK 0x0060
|
||||
/* A-MSDU 802.11n */
|
||||
#define IEEE80211_QOS_CTL_A_MSDU_PRESENT 0x0080
|
||||
/* Mesh Control 802.11s */
|
||||
#define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT 0x0100
|
||||
|
||||
/* U-APSD queue for WMM IEs sent by AP */
|
||||
#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7)
|
||||
|
|
@ -629,9 +631,14 @@ struct ieee80211_rann_ie {
|
|||
u8 rann_ttl;
|
||||
u8 rann_addr[6];
|
||||
u32 rann_seq;
|
||||
u32 rann_interval;
|
||||
u32 rann_metric;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
enum ieee80211_rann_flags {
|
||||
RANN_FLAG_IS_GATE = 1 << 0,
|
||||
};
|
||||
|
||||
#define WLAN_SA_QUERY_TR_ID_LEN 2
|
||||
|
||||
struct ieee80211_mgmt {
|
||||
|
|
@ -736,19 +743,10 @@ struct ieee80211_mgmt {
|
|||
__le16 params;
|
||||
__le16 reason_code;
|
||||
} __attribute__((packed)) delba;
|
||||
struct{
|
||||
struct {
|
||||
u8 action_code;
|
||||
/* capab_info for open and confirm,
|
||||
* reason for close
|
||||
*/
|
||||
__le16 aux;
|
||||
/* Followed in plink_confirm by status
|
||||
* code, AID and supported rates,
|
||||
* and directly by supported rates in
|
||||
* plink_open and plink_close
|
||||
*/
|
||||
u8 variable[0];
|
||||
} __attribute__((packed)) plink_action;
|
||||
} __attribute__((packed)) self_prot;
|
||||
struct{
|
||||
u8 action_code;
|
||||
u8 variable[0];
|
||||
|
|
@ -761,6 +759,12 @@ struct ieee80211_mgmt {
|
|||
u8 action;
|
||||
u8 smps_control;
|
||||
} __attribute__ ((packed)) ht_smps;
|
||||
struct {
|
||||
u8 action_code;
|
||||
u8 dialog_token;
|
||||
__le16 capability;
|
||||
u8 variable[0];
|
||||
} __packed tdls_discover_resp;
|
||||
} u;
|
||||
} __attribute__ ((packed)) action;
|
||||
} u;
|
||||
|
|
@ -779,6 +783,13 @@ struct ieee80211_mmie {
|
|||
u8 mic[8];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct ieee80211_vendor_ie {
|
||||
u8 element_id;
|
||||
u8 len;
|
||||
u8 oui[3];
|
||||
u8 oui_type;
|
||||
} __packed;
|
||||
|
||||
/* Control frames */
|
||||
struct ieee80211_rts {
|
||||
__le16 frame_control;
|
||||
|
|
@ -800,6 +811,52 @@ struct ieee80211_pspoll {
|
|||
u8 ta[6];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* TDLS */
|
||||
|
||||
/* Link-id information element */
|
||||
struct ieee80211_tdls_lnkie {
|
||||
u8 ie_type; /* Link Identifier IE */
|
||||
u8 ie_len;
|
||||
u8 bssid[6];
|
||||
u8 init_sta[6];
|
||||
u8 resp_sta[6];
|
||||
} __packed;
|
||||
|
||||
struct ieee80211_tdls_data {
|
||||
u8 da[6];
|
||||
u8 sa[6];
|
||||
__be16 ether_type;
|
||||
u8 payload_type;
|
||||
u8 category;
|
||||
u8 action_code;
|
||||
union {
|
||||
struct {
|
||||
u8 dialog_token;
|
||||
__le16 capability;
|
||||
u8 variable[0];
|
||||
} __packed setup_req;
|
||||
struct {
|
||||
__le16 status_code;
|
||||
u8 dialog_token;
|
||||
__le16 capability;
|
||||
u8 variable[0];
|
||||
} __packed setup_resp;
|
||||
struct {
|
||||
__le16 status_code;
|
||||
u8 dialog_token;
|
||||
u8 variable[0];
|
||||
} __packed setup_cfm;
|
||||
struct {
|
||||
__le16 reason_code;
|
||||
u8 variable[0];
|
||||
} __packed teardown;
|
||||
struct {
|
||||
u8 dialog_token;
|
||||
u8 variable[0];
|
||||
} __packed discover_req;
|
||||
} u;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct ieee80211_bar - HT Block Ack Request
|
||||
*
|
||||
|
|
@ -816,9 +873,11 @@ struct ieee80211_bar {
|
|||
} __attribute__((packed));
|
||||
|
||||
/* 802.11 BAR control masks */
|
||||
#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000
|
||||
#define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004
|
||||
|
||||
#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000
|
||||
#define IEEE80211_BAR_CTRL_MULTI_TID 0x0002
|
||||
#define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004
|
||||
#define IEEE80211_BAR_CTRL_TID_INFO_MASK 0xf000
|
||||
#define IEEE80211_BAR_CTRL_TID_INFO_SHIFT 12
|
||||
|
||||
#define IEEE80211_HT_MCS_MASK_LEN 10
|
||||
|
||||
|
|
@ -1189,16 +1248,13 @@ enum ieee80211_eid {
|
|||
WLAN_EID_TS_DELAY = 43,
|
||||
WLAN_EID_TCLAS_PROCESSING = 44,
|
||||
WLAN_EID_QOS_CAPA = 46,
|
||||
/* 802.11z */
|
||||
WLAN_EID_LINK_ID = 101,
|
||||
/* 802.11s */
|
||||
WLAN_EID_MESH_CONFIG = 113,
|
||||
WLAN_EID_MESH_ID = 114,
|
||||
WLAN_EID_LINK_METRIC_REPORT = 115,
|
||||
WLAN_EID_CONGESTION_NOTIFICATION = 116,
|
||||
/* Note that the Peer Link IE has been replaced with the similar
|
||||
* Peer Management IE. We will keep the former definition until mesh
|
||||
* code is changed to comply with latest 802.11s drafts.
|
||||
*/
|
||||
WLAN_EID_PEER_LINK = 55, /* no longer in 802.11s drafts */
|
||||
WLAN_EID_PEER_MGMT = 117,
|
||||
WLAN_EID_CHAN_SWITCH_PARAM = 118,
|
||||
WLAN_EID_MESH_AWAKE_WINDOW = 119,
|
||||
|
|
@ -1277,13 +1333,11 @@ enum ieee80211_category {
|
|||
WLAN_CATEGORY_HT = 7,
|
||||
WLAN_CATEGORY_SA_QUERY = 8,
|
||||
WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
|
||||
WLAN_CATEGORY_TDLS = 12,
|
||||
WLAN_CATEGORY_MESH_ACTION = 13,
|
||||
WLAN_CATEGORY_MULTIHOP_ACTION = 14,
|
||||
WLAN_CATEGORY_SELF_PROTECTED = 15,
|
||||
WLAN_CATEGORY_WMM = 17,
|
||||
/* TODO: remove MESH_PATH_SEL after mesh is updated
|
||||
* to current 802.11s draft */
|
||||
WLAN_CATEGORY_MESH_PATH_SEL = 32,
|
||||
WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
|
||||
WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
|
||||
};
|
||||
|
|
@ -1309,6 +1363,31 @@ enum ieee80211_ht_actioncode {
|
|||
WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7,
|
||||
};
|
||||
|
||||
/* Self Protected Action codes */
|
||||
enum ieee80211_self_protected_actioncode {
|
||||
WLAN_SP_RESERVED = 0,
|
||||
WLAN_SP_MESH_PEERING_OPEN = 1,
|
||||
WLAN_SP_MESH_PEERING_CONFIRM = 2,
|
||||
WLAN_SP_MESH_PEERING_CLOSE = 3,
|
||||
WLAN_SP_MGK_INFORM = 4,
|
||||
WLAN_SP_MGK_ACK = 5,
|
||||
};
|
||||
|
||||
/* Mesh action codes */
|
||||
enum ieee80211_mesh_actioncode {
|
||||
WLAN_MESH_ACTION_LINK_METRIC_REPORT,
|
||||
WLAN_MESH_ACTION_HWMP_PATH_SELECTION,
|
||||
WLAN_MESH_ACTION_GATE_ANNOUNCEMENT,
|
||||
WLAN_MESH_ACTION_CONGESTION_CONTROL_NOTIFICATION,
|
||||
WLAN_MESH_ACTION_MCCA_SETUP_REQUEST,
|
||||
WLAN_MESH_ACTION_MCCA_SETUP_REPLY,
|
||||
WLAN_MESH_ACTION_MCCA_ADVERTISEMENT_REQUEST,
|
||||
WLAN_MESH_ACTION_MCCA_ADVERTISEMENT,
|
||||
WLAN_MESH_ACTION_MCCA_TEARDOWN,
|
||||
WLAN_MESH_ACTION_TBTT_ADJUSTMENT_REQUEST,
|
||||
WLAN_MESH_ACTION_TBTT_ADJUSTMENT_RESPONSE,
|
||||
};
|
||||
|
||||
/* Security key length */
|
||||
enum ieee80211_key_len {
|
||||
WLAN_KEY_LEN_WEP40 = 5,
|
||||
|
|
@ -1318,6 +1397,36 @@ enum ieee80211_key_len {
|
|||
WLAN_KEY_LEN_AES_CMAC = 16,
|
||||
};
|
||||
|
||||
/* Public action codes */
|
||||
enum ieee80211_pub_actioncode {
|
||||
WLAN_PUB_ACTION_TDLS_DISCOVER_RES = 14,
|
||||
};
|
||||
|
||||
/* TDLS action codes */
|
||||
enum ieee80211_tdls_actioncode {
|
||||
WLAN_TDLS_SETUP_REQUEST = 0,
|
||||
WLAN_TDLS_SETUP_RESPONSE = 1,
|
||||
WLAN_TDLS_SETUP_CONFIRM = 2,
|
||||
WLAN_TDLS_TEARDOWN = 3,
|
||||
WLAN_TDLS_PEER_TRAFFIC_INDICATION = 4,
|
||||
WLAN_TDLS_CHANNEL_SWITCH_REQUEST = 5,
|
||||
WLAN_TDLS_CHANNEL_SWITCH_RESPONSE = 6,
|
||||
WLAN_TDLS_PEER_PSM_REQUEST = 7,
|
||||
WLAN_TDLS_PEER_PSM_RESPONSE = 8,
|
||||
WLAN_TDLS_PEER_TRAFFIC_RESPONSE = 9,
|
||||
WLAN_TDLS_DISCOVERY_REQUEST = 10,
|
||||
};
|
||||
|
||||
/*
|
||||
* TDLS capabililites to be enabled in the 5th byte of the
|
||||
* @WLAN_EID_EXT_CAPABILITY information element
|
||||
*/
|
||||
#define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5)
|
||||
#define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6)
|
||||
|
||||
/* TDLS specific payload type in the LLC/SNAP header */
|
||||
#define WLAN_TDLS_SNAP_RFTYPE 0x2
|
||||
|
||||
/**
|
||||
* enum - mesh path selection protocol identifier
|
||||
*
|
||||
|
|
@ -1453,6 +1562,9 @@ enum ieee80211_sa_query_action {
|
|||
|
||||
#define WLAN_PMKID_LEN 16
|
||||
|
||||
#define WLAN_OUI_WFA 0x506f9a
|
||||
#define WLAN_OUI_TYPE_WFA_P2P 9
|
||||
|
||||
/*
|
||||
* WMM/802.11e Tspec Element
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@
|
|||
* datapath port */
|
||||
#define IFF_TX_SKB_SHARING 0x10000 /* The interface supports sharing
|
||||
* skbs on transmit */
|
||||
#define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */
|
||||
|
||||
#define IF_GET_IFACE 0x0001 /* for querying only */
|
||||
#define IF_GET_PROTO 0x0002
|
||||
|
|
|
|||
|
|
@ -83,11 +83,13 @@
|
|||
#define ETH_P_8021AH 0x88E7 /* 802.1ah Backbone Service Tag */
|
||||
#define ETH_P_1588 0x88F7 /* IEEE 1588 Timesync */
|
||||
#define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */
|
||||
#define ETH_P_TDLS 0x890D /* TDLS */
|
||||
#define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */
|
||||
#define ETH_P_QINQ1 0x9100 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_QINQ2 0x9200 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_QINQ3 0x9300 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_AF_IUCV 0xFBFB /* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
|
||||
/*
|
||||
* Non DIX types. Won't clash for 1500 types.
|
||||
|
|
|
|||
|
|
@ -279,6 +279,7 @@ enum {
|
|||
IFLA_VF_MAC, /* Hardware queue specific attributes */
|
||||
IFLA_VF_VLAN,
|
||||
IFLA_VF_TX_RATE, /* TX Bandwidth Allocation */
|
||||
IFLA_VF_SPOOFCHK, /* Spoof Checking on/off switch */
|
||||
__IFLA_VF_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -300,13 +301,22 @@ struct ifla_vf_tx_rate {
|
|||
__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
|
||||
};
|
||||
|
||||
struct ifla_vf_spoofchk {
|
||||
__u32 vf;
|
||||
__u32 setting;
|
||||
};
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* We don't want this structure exposed to user space */
|
||||
struct ifla_vf_info {
|
||||
__u32 vf;
|
||||
__u8 mac[32];
|
||||
__u32 vlan;
|
||||
__u32 qos;
|
||||
__u32 tx_rate;
|
||||
__u32 spoofchk;
|
||||
};
|
||||
#endif
|
||||
|
||||
/* VF ports management section
|
||||
*
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ struct macvlan_dev {
|
|||
int (*forward)(struct net_device *dev, struct sk_buff *skb);
|
||||
struct macvtap_queue *taps[MAX_MACVTAP_QUEUES];
|
||||
int numvtaps;
|
||||
int minor;
|
||||
};
|
||||
|
||||
static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
|
||||
|
|
|
|||
|
|
@ -61,6 +61,17 @@ struct tpacket_stats {
|
|||
unsigned int tp_drops;
|
||||
};
|
||||
|
||||
struct tpacket_stats_v3 {
|
||||
unsigned int tp_packets;
|
||||
unsigned int tp_drops;
|
||||
unsigned int tp_freeze_q_cnt;
|
||||
};
|
||||
|
||||
union tpacket_stats_u {
|
||||
struct tpacket_stats stats1;
|
||||
struct tpacket_stats_v3 stats3;
|
||||
};
|
||||
|
||||
struct tpacket_auxdata {
|
||||
__u32 tp_status;
|
||||
__u32 tp_len;
|
||||
|
|
@ -78,6 +89,7 @@ struct tpacket_auxdata {
|
|||
#define TP_STATUS_LOSING 0x4
|
||||
#define TP_STATUS_CSUMNOTREADY 0x8
|
||||
#define TP_STATUS_VLAN_VALID 0x10 /* auxdata has valid tp_vlan_tci */
|
||||
#define TP_STATUS_BLK_TMO 0x20
|
||||
|
||||
/* Tx ring - header status */
|
||||
#define TP_STATUS_AVAILABLE 0x0
|
||||
|
|
@ -85,6 +97,9 @@ struct tpacket_auxdata {
|
|||
#define TP_STATUS_SENDING 0x2
|
||||
#define TP_STATUS_WRONG_FORMAT 0x4
|
||||
|
||||
/* Rx ring - feature request bits */
|
||||
#define TP_FT_REQ_FILL_RXHASH 0x1
|
||||
|
||||
struct tpacket_hdr {
|
||||
unsigned long tp_status;
|
||||
unsigned int tp_len;
|
||||
|
|
@ -111,11 +126,100 @@ struct tpacket2_hdr {
|
|||
__u16 tp_padding;
|
||||
};
|
||||
|
||||
struct tpacket_hdr_variant1 {
|
||||
__u32 tp_rxhash;
|
||||
__u32 tp_vlan_tci;
|
||||
};
|
||||
|
||||
struct tpacket3_hdr {
|
||||
__u32 tp_next_offset;
|
||||
__u32 tp_sec;
|
||||
__u32 tp_nsec;
|
||||
__u32 tp_snaplen;
|
||||
__u32 tp_len;
|
||||
__u32 tp_status;
|
||||
__u16 tp_mac;
|
||||
__u16 tp_net;
|
||||
/* pkt_hdr variants */
|
||||
union {
|
||||
struct tpacket_hdr_variant1 hv1;
|
||||
};
|
||||
};
|
||||
|
||||
struct tpacket_bd_ts {
|
||||
unsigned int ts_sec;
|
||||
union {
|
||||
unsigned int ts_usec;
|
||||
unsigned int ts_nsec;
|
||||
};
|
||||
};
|
||||
|
||||
struct tpacket_hdr_v1 {
|
||||
__u32 block_status;
|
||||
__u32 num_pkts;
|
||||
__u32 offset_to_first_pkt;
|
||||
|
||||
/* Number of valid bytes (including padding)
|
||||
* blk_len <= tp_block_size
|
||||
*/
|
||||
__u32 blk_len;
|
||||
|
||||
/*
|
||||
* Quite a few uses of sequence number:
|
||||
* 1. Make sure cache flush etc worked.
|
||||
* Well, one can argue - why not use the increasing ts below?
|
||||
* But look at 2. below first.
|
||||
* 2. When you pass around blocks to other user space decoders,
|
||||
* you can see which blk[s] is[are] outstanding etc.
|
||||
* 3. Validate kernel code.
|
||||
*/
|
||||
__aligned_u64 seq_num;
|
||||
|
||||
/*
|
||||
* ts_last_pkt:
|
||||
*
|
||||
* Case 1. Block has 'N'(N >=1) packets and TMO'd(timed out)
|
||||
* ts_last_pkt == 'time-stamp of last packet' and NOT the
|
||||
* time when the timer fired and the block was closed.
|
||||
* By providing the ts of the last packet we can absolutely
|
||||
* guarantee that time-stamp wise, the first packet in the
|
||||
* next block will never precede the last packet of the
|
||||
* previous block.
|
||||
* Case 2. Block has zero packets and TMO'd
|
||||
* ts_last_pkt = time when the timer fired and the block
|
||||
* was closed.
|
||||
* Case 3. Block has 'N' packets and NO TMO.
|
||||
* ts_last_pkt = time-stamp of the last pkt in the block.
|
||||
*
|
||||
* ts_first_pkt:
|
||||
* Is always the time-stamp when the block was opened.
|
||||
* Case a) ZERO packets
|
||||
* No packets to deal with but atleast you know the
|
||||
* time-interval of this block.
|
||||
* Case b) Non-zero packets
|
||||
* Use the ts of the first packet in the block.
|
||||
*
|
||||
*/
|
||||
struct tpacket_bd_ts ts_first_pkt, ts_last_pkt;
|
||||
};
|
||||
|
||||
union tpacket_bd_header_u {
|
||||
struct tpacket_hdr_v1 bh1;
|
||||
};
|
||||
|
||||
struct tpacket_block_desc {
|
||||
__u32 version;
|
||||
__u32 offset_to_priv;
|
||||
union tpacket_bd_header_u hdr;
|
||||
};
|
||||
|
||||
#define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
|
||||
#define TPACKET3_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll))
|
||||
|
||||
enum tpacket_versions {
|
||||
TPACKET_V1,
|
||||
TPACKET_V2,
|
||||
TPACKET_V3
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -138,6 +242,21 @@ struct tpacket_req {
|
|||
unsigned int tp_frame_nr; /* Total number of frames */
|
||||
};
|
||||
|
||||
struct tpacket_req3 {
|
||||
unsigned int tp_block_size; /* Minimal size of contiguous block */
|
||||
unsigned int tp_block_nr; /* Number of blocks */
|
||||
unsigned int tp_frame_size; /* Size of frame */
|
||||
unsigned int tp_frame_nr; /* Total number of frames */
|
||||
unsigned int tp_retire_blk_tov; /* timeout in msecs */
|
||||
unsigned int tp_sizeof_priv; /* offset to private data area */
|
||||
unsigned int tp_feature_req_word;
|
||||
};
|
||||
|
||||
union tpacket_req_u {
|
||||
struct tpacket_req req;
|
||||
struct tpacket_req3 req3;
|
||||
};
|
||||
|
||||
struct packet_mreq {
|
||||
int mr_ifindex;
|
||||
unsigned short mr_type;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ struct pppol2tp_addr {
|
|||
* bits. So we need a different sockaddr structure.
|
||||
*/
|
||||
struct pppol2tpv3_addr {
|
||||
pid_t pid; /* pid that owns the fd.
|
||||
__kernel_pid_t pid; /* pid that owns the fd.
|
||||
* 0 => current */
|
||||
int fd; /* FD of UDP or IP socket to use */
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,9 @@
|
|||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/socket.h>
|
||||
#include <linux/if_ether.h>
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/if.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/ppp_channel.h>
|
||||
|
|
@ -63,7 +64,7 @@ struct pptp_addr {
|
|||
#define PX_MAX_PROTO 3
|
||||
|
||||
struct sockaddr_pppox {
|
||||
sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
unsigned int sa_protocol; /* protocol identifier */
|
||||
union {
|
||||
struct pppoe_addr pppoe;
|
||||
|
|
@ -77,7 +78,7 @@ struct sockaddr_pppox {
|
|||
* type instead.
|
||||
*/
|
||||
struct sockaddr_pppol2tp {
|
||||
sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
unsigned int sa_protocol; /* protocol identifier */
|
||||
struct pppol2tp_addr pppol2tp;
|
||||
} __attribute__((packed));
|
||||
|
|
@ -86,7 +87,7 @@ struct sockaddr_pppol2tp {
|
|||
* bits. So we need a different sockaddr structure.
|
||||
*/
|
||||
struct sockaddr_pppol2tpv3 {
|
||||
sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
unsigned int sa_protocol; /* protocol identifier */
|
||||
struct pppol2tpv3_addr pppol2tp;
|
||||
} __attribute__((packed));
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ extern struct net_device *__vlan_find_dev_deep(struct net_device *real_dev,
|
|||
extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
|
||||
extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
||||
|
||||
extern bool vlan_do_receive(struct sk_buff **skb);
|
||||
extern bool vlan_do_receive(struct sk_buff **skb, bool last_handler);
|
||||
extern struct sk_buff *vlan_untag(struct sk_buff *skb);
|
||||
|
||||
#else
|
||||
|
|
@ -128,9 +128,9 @@ static inline u16 vlan_dev_vlan_id(const struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline bool vlan_do_receive(struct sk_buff **skb)
|
||||
static inline bool vlan_do_receive(struct sk_buff **skb, bool last_handler)
|
||||
{
|
||||
if ((*skb)->vlan_tci & VLAN_VID_MASK)
|
||||
if (((*skb)->vlan_tci & VLAN_VID_MASK) && last_handler)
|
||||
(*skb)->pkt_type = PACKET_OTHERHOST;
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,8 +15,6 @@ struct linux_binprm;
|
|||
|
||||
#ifdef CONFIG_IMA
|
||||
extern int ima_bprm_check(struct linux_binprm *bprm);
|
||||
extern int ima_inode_alloc(struct inode *inode);
|
||||
extern void ima_inode_free(struct inode *inode);
|
||||
extern int ima_file_check(struct file *file, int mask);
|
||||
extern void ima_file_free(struct file *file);
|
||||
extern int ima_file_mmap(struct file *file, unsigned long prot);
|
||||
|
|
@ -27,16 +25,6 @@ static inline int ima_bprm_check(struct linux_binprm *bprm)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int ima_inode_alloc(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void ima_inode_free(struct inode *inode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int ima_file_check(struct file *file, int mask)
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -51,6 +39,5 @@ static inline int ima_file_mmap(struct file *file, unsigned long prot)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_IMA_H */
|
||||
#endif /* _LINUX_IMA_H */
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ struct in_pktinfo {
|
|||
/* Structure describing an Internet (IP) socket address. */
|
||||
#define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */
|
||||
struct sockaddr_in {
|
||||
sa_family_t sin_family; /* Address family */
|
||||
__kernel_sa_family_t sin_family; /* Address family */
|
||||
__be16 sin_port; /* Port number */
|
||||
struct in_addr sin_addr; /* Internet address */
|
||||
|
||||
|
|
|
|||
|
|
@ -97,9 +97,10 @@ enum {
|
|||
INET_DIAG_INFO,
|
||||
INET_DIAG_VEGASINFO,
|
||||
INET_DIAG_CONG,
|
||||
INET_DIAG_TOS,
|
||||
};
|
||||
|
||||
#define INET_DIAG_MAX INET_DIAG_CONG
|
||||
#define INET_DIAG_MAX INET_DIAG_TOS
|
||||
|
||||
|
||||
/* INET_DIAG_MEM */
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ extern struct fs_struct init_fs;
|
|||
.cputimer = { \
|
||||
.cputime = INIT_CPUTIME, \
|
||||
.running = 0, \
|
||||
.lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \
|
||||
.lock = __RAW_SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \
|
||||
}, \
|
||||
.cred_guard_mutex = \
|
||||
__MUTEX_INITIALIZER(sig.cred_guard_mutex), \
|
||||
|
|
|
|||
|
|
@ -505,6 +505,7 @@ struct input_keymap_entry {
|
|||
#define BTN_TOOL_FINGER 0x145
|
||||
#define BTN_TOOL_MOUSE 0x146
|
||||
#define BTN_TOOL_LENS 0x147
|
||||
#define BTN_TOOL_QUINTTAP 0x148 /* Five fingers on trackpad */
|
||||
#define BTN_TOUCH 0x14a
|
||||
#define BTN_STYLUS 0x14b
|
||||
#define BTN_STYLUS2 0x14c
|
||||
|
|
@ -814,6 +815,7 @@ struct input_keymap_entry {
|
|||
#define SW_KEYPAD_SLIDE 0x0a /* set = keypad slide out */
|
||||
#define SW_FRONT_PROXIMITY 0x0b /* set = front proximity sensor active */
|
||||
#define SW_ROTATE_LOCK 0x0c /* set = rotate locked/disabled */
|
||||
#define SW_LINEIN_INSERT 0x0d /* set = inserted */
|
||||
#define SW_MAX 0x0f
|
||||
#define SW_CNT (SW_MAX+1)
|
||||
|
||||
|
|
@ -1609,7 +1611,7 @@ struct ff_device {
|
|||
struct file *effect_owners[];
|
||||
};
|
||||
|
||||
int input_ff_create(struct input_dev *dev, int max_effects);
|
||||
int input_ff_create(struct input_dev *dev, unsigned int max_effects);
|
||||
void input_ff_destroy(struct input_dev *dev);
|
||||
|
||||
int input_ff_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Analog Devices ADP5589 I/O Expander and QWERTY Keypad Controller
|
||||
* Analog Devices ADP5589/ADP5585 I/O Expander and QWERTY Keypad Controller
|
||||
*
|
||||
* Copyright 2010-2011 Analog Devices Inc.
|
||||
*
|
||||
|
|
@ -9,89 +9,9 @@
|
|||
#ifndef _ADP5589_H
|
||||
#define _ADP5589_H
|
||||
|
||||
#define ADP5589_ID 0x00
|
||||
#define ADP5589_INT_STATUS 0x01
|
||||
#define ADP5589_STATUS 0x02
|
||||
#define ADP5589_FIFO_1 0x03
|
||||
#define ADP5589_FIFO_2 0x04
|
||||
#define ADP5589_FIFO_3 0x05
|
||||
#define ADP5589_FIFO_4 0x06
|
||||
#define ADP5589_FIFO_5 0x07
|
||||
#define ADP5589_FIFO_6 0x08
|
||||
#define ADP5589_FIFO_7 0x09
|
||||
#define ADP5589_FIFO_8 0x0A
|
||||
#define ADP5589_FIFO_9 0x0B
|
||||
#define ADP5589_FIFO_10 0x0C
|
||||
#define ADP5589_FIFO_11 0x0D
|
||||
#define ADP5589_FIFO_12 0x0E
|
||||
#define ADP5589_FIFO_13 0x0F
|
||||
#define ADP5589_FIFO_14 0x10
|
||||
#define ADP5589_FIFO_15 0x11
|
||||
#define ADP5589_FIFO_16 0x12
|
||||
#define ADP5589_GPI_INT_STAT_A 0x13
|
||||
#define ADP5589_GPI_INT_STAT_B 0x14
|
||||
#define ADP5589_GPI_INT_STAT_C 0x15
|
||||
#define ADP5589_GPI_STATUS_A 0x16
|
||||
#define ADP5589_GPI_STATUS_B 0x17
|
||||
#define ADP5589_GPI_STATUS_C 0x18
|
||||
#define ADP5589_RPULL_CONFIG_A 0x19
|
||||
#define ADP5589_RPULL_CONFIG_B 0x1A
|
||||
#define ADP5589_RPULL_CONFIG_C 0x1B
|
||||
#define ADP5589_RPULL_CONFIG_D 0x1C
|
||||
#define ADP5589_RPULL_CONFIG_E 0x1D
|
||||
#define ADP5589_GPI_INT_LEVEL_A 0x1E
|
||||
#define ADP5589_GPI_INT_LEVEL_B 0x1F
|
||||
#define ADP5589_GPI_INT_LEVEL_C 0x20
|
||||
#define ADP5589_GPI_EVENT_EN_A 0x21
|
||||
#define ADP5589_GPI_EVENT_EN_B 0x22
|
||||
#define ADP5589_GPI_EVENT_EN_C 0x23
|
||||
#define ADP5589_GPI_INTERRUPT_EN_A 0x24
|
||||
#define ADP5589_GPI_INTERRUPT_EN_B 0x25
|
||||
#define ADP5589_GPI_INTERRUPT_EN_C 0x26
|
||||
#define ADP5589_DEBOUNCE_DIS_A 0x27
|
||||
#define ADP5589_DEBOUNCE_DIS_B 0x28
|
||||
#define ADP5589_DEBOUNCE_DIS_C 0x29
|
||||
#define ADP5589_GPO_DATA_OUT_A 0x2A
|
||||
#define ADP5589_GPO_DATA_OUT_B 0x2B
|
||||
#define ADP5589_GPO_DATA_OUT_C 0x2C
|
||||
#define ADP5589_GPO_OUT_MODE_A 0x2D
|
||||
#define ADP5589_GPO_OUT_MODE_B 0x2E
|
||||
#define ADP5589_GPO_OUT_MODE_C 0x2F
|
||||
#define ADP5589_GPIO_DIRECTION_A 0x30
|
||||
#define ADP5589_GPIO_DIRECTION_B 0x31
|
||||
#define ADP5589_GPIO_DIRECTION_C 0x32
|
||||
#define ADP5589_UNLOCK1 0x33
|
||||
#define ADP5589_UNLOCK2 0x34
|
||||
#define ADP5589_EXT_LOCK_EVENT 0x35
|
||||
#define ADP5589_UNLOCK_TIMERS 0x36
|
||||
#define ADP5589_LOCK_CFG 0x37
|
||||
#define ADP5589_RESET1_EVENT_A 0x38
|
||||
#define ADP5589_RESET1_EVENT_B 0x39
|
||||
#define ADP5589_RESET1_EVENT_C 0x3A
|
||||
#define ADP5589_RESET2_EVENT_A 0x3B
|
||||
#define ADP5589_RESET2_EVENT_B 0x3C
|
||||
#define ADP5589_RESET_CFG 0x3D
|
||||
#define ADP5589_PWM_OFFT_LOW 0x3E
|
||||
#define ADP5589_PWM_OFFT_HIGH 0x3F
|
||||
#define ADP5589_PWM_ONT_LOW 0x40
|
||||
#define ADP5589_PWM_ONT_HIGH 0x41
|
||||
#define ADP5589_PWM_CFG 0x42
|
||||
#define ADP5589_CLOCK_DIV_CFG 0x43
|
||||
#define ADP5589_LOGIC_1_CFG 0x44
|
||||
#define ADP5589_LOGIC_2_CFG 0x45
|
||||
#define ADP5589_LOGIC_FF_CFG 0x46
|
||||
#define ADP5589_LOGIC_INT_EVENT_EN 0x47
|
||||
#define ADP5589_POLL_PTIME_CFG 0x48
|
||||
#define ADP5589_PIN_CONFIG_A 0x49
|
||||
#define ADP5589_PIN_CONFIG_B 0x4A
|
||||
#define ADP5589_PIN_CONFIG_C 0x4B
|
||||
#define ADP5589_PIN_CONFIG_D 0x4C
|
||||
#define ADP5589_GENERAL_CFG 0x4D
|
||||
#define ADP5589_INT_EN 0x4E
|
||||
|
||||
#define ADP5589_DEVICE_ID_MASK 0xF
|
||||
|
||||
/* Put one of these structures in i2c_board_info platform_data */
|
||||
/*
|
||||
* ADP5589 specific GPI and Keymap defines
|
||||
*/
|
||||
|
||||
#define ADP5589_KEYMAPSIZE 88
|
||||
|
||||
|
|
@ -127,6 +47,35 @@
|
|||
|
||||
#define ADP5589_GPIMAPSIZE_MAX (ADP5589_GPI_PIN_END - ADP5589_GPI_PIN_BASE + 1)
|
||||
|
||||
/*
|
||||
* ADP5585 specific GPI and Keymap defines
|
||||
*/
|
||||
|
||||
#define ADP5585_KEYMAPSIZE 30
|
||||
|
||||
#define ADP5585_GPI_PIN_ROW0 37
|
||||
#define ADP5585_GPI_PIN_ROW1 38
|
||||
#define ADP5585_GPI_PIN_ROW2 39
|
||||
#define ADP5585_GPI_PIN_ROW3 40
|
||||
#define ADP5585_GPI_PIN_ROW4 41
|
||||
#define ADP5585_GPI_PIN_ROW5 42
|
||||
#define ADP5585_GPI_PIN_COL0 43
|
||||
#define ADP5585_GPI_PIN_COL1 44
|
||||
#define ADP5585_GPI_PIN_COL2 45
|
||||
#define ADP5585_GPI_PIN_COL3 46
|
||||
#define ADP5585_GPI_PIN_COL4 47
|
||||
#define GPI_LOGIC 48
|
||||
|
||||
#define ADP5585_GPI_PIN_ROW_BASE ADP5585_GPI_PIN_ROW0
|
||||
#define ADP5585_GPI_PIN_ROW_END ADP5585_GPI_PIN_ROW5
|
||||
#define ADP5585_GPI_PIN_COL_BASE ADP5585_GPI_PIN_COL0
|
||||
#define ADP5585_GPI_PIN_COL_END ADP5585_GPI_PIN_COL4
|
||||
|
||||
#define ADP5585_GPI_PIN_BASE ADP5585_GPI_PIN_ROW_BASE
|
||||
#define ADP5585_GPI_PIN_END ADP5585_GPI_PIN_COL_END
|
||||
|
||||
#define ADP5585_GPIMAPSIZE_MAX (ADP5585_GPI_PIN_END - ADP5585_GPI_PIN_BASE + 1)
|
||||
|
||||
struct adp5589_gpi_map {
|
||||
unsigned short pin;
|
||||
unsigned short sw_evt;
|
||||
|
|
@ -159,7 +108,7 @@ struct adp5589_gpi_map {
|
|||
#define RESET2_POL_HIGH (1 << 7)
|
||||
#define RESET2_POL_LOW (0 << 7)
|
||||
|
||||
/* Mask Bits:
|
||||
/* ADP5589 Mask Bits:
|
||||
* C C C C C C C C C C C | R R R R R R R R
|
||||
* 1 9 8 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
|
||||
* 0
|
||||
|
|
@ -168,18 +117,44 @@ struct adp5589_gpi_map {
|
|||
* 8 7 6 5 4 3 2 1 0 9 8 | 7 6 5 4 3 2 1 0
|
||||
*/
|
||||
|
||||
#define ADP_ROW(x) (1 << (x))
|
||||
#define ADP_COL(x) (1 << (x + 8))
|
||||
#define ADP_ROW(x) (1 << (x))
|
||||
#define ADP_COL(x) (1 << (x + 8))
|
||||
#define ADP5589_ROW_MASK 0xFF
|
||||
#define ADP5589_COL_MASK 0xFF
|
||||
#define ADP5589_COL_SHIFT 8
|
||||
#define ADP5589_MAX_ROW_NUM 7
|
||||
#define ADP5589_MAX_COL_NUM 10
|
||||
|
||||
/* ADP5585 Mask Bits:
|
||||
* C C C C C | R R R R R R
|
||||
* 4 3 2 1 0 | 5 4 3 2 1 0
|
||||
*
|
||||
* ---- BIT -- -----------
|
||||
* 1 0 0 0 0 | 0 0 0 0 0 0
|
||||
* 0 9 8 7 6 | 5 4 3 2 1 0
|
||||
*/
|
||||
|
||||
#define ADP5585_ROW_MASK 0x3F
|
||||
#define ADP5585_COL_MASK 0x1F
|
||||
#define ADP5585_ROW_SHIFT 0
|
||||
#define ADP5585_COL_SHIFT 6
|
||||
#define ADP5585_MAX_ROW_NUM 5
|
||||
#define ADP5585_MAX_COL_NUM 4
|
||||
|
||||
#define ADP5585_ROW(x) (1 << ((x) & ADP5585_ROW_MASK))
|
||||
#define ADP5585_COL(x) (1 << (((x) & ADP5585_COL_MASK) + ADP5585_COL_SHIFT))
|
||||
|
||||
/* Put one of these structures in i2c_board_info platform_data */
|
||||
|
||||
struct adp5589_kpad_platform_data {
|
||||
unsigned keypad_en_mask; /* Keypad (Rows/Columns) enable mask */
|
||||
const unsigned short *keymap; /* Pointer to keymap */
|
||||
unsigned short keymapsize; /* Keymap size */
|
||||
bool repeat; /* Enable key repeat */
|
||||
bool en_keylock; /* Enable key lock feature */
|
||||
unsigned char unlock_key1; /* Unlock Key 1 */
|
||||
unsigned char unlock_key2; /* Unlock Key 2 */
|
||||
unsigned char unlock_timer; /* Time in seconds [0..7] between the two unlock keys 0=disable */
|
||||
bool en_keylock; /* Enable key lock feature (ADP5589 only)*/
|
||||
unsigned char unlock_key1; /* Unlock Key 1 (ADP5589 only) */
|
||||
unsigned char unlock_key2; /* Unlock Key 2 (ADP5589 only) */
|
||||
unsigned char unlock_timer; /* Time in seconds [0..7] between the two unlock keys 0=disable (ADP5589 only) */
|
||||
unsigned char scan_cycle_time; /* Time between consecutive scan cycles */
|
||||
unsigned char reset_cfg; /* Reset config */
|
||||
unsigned short reset1_key_1; /* Reset Key 1 */
|
||||
|
|
|
|||
|
|
@ -30,8 +30,9 @@ struct adxl34x_platform_data {
|
|||
* Y, or Z participation in Tap detection. A '0' excludes the
|
||||
* selected axis from participation in Tap detection.
|
||||
* Setting the SUPPRESS bit suppresses Double Tap detection if
|
||||
* acceleration greater than tap_threshold is present between
|
||||
* taps.
|
||||
* acceleration greater than tap_threshold is present during the
|
||||
* tap_latency period, i.e. after the first tap but before the
|
||||
* opening of the second tap window.
|
||||
*/
|
||||
|
||||
#define ADXL_SUPPRESS (1 << 3)
|
||||
|
|
@ -226,13 +227,13 @@ struct adxl34x_platform_data {
|
|||
* detection will begin and prevent the detection of activity. This
|
||||
* bit serially links the activity and inactivity functions. When '0'
|
||||
* the inactivity and activity functions are concurrent. Additional
|
||||
* information can be found in the Application section under Link
|
||||
* Mode.
|
||||
* information can be found in the ADXL34x datasheet's Application
|
||||
* section under Link Mode.
|
||||
* AUTO_SLEEP: A '1' sets the ADXL34x to switch to Sleep Mode
|
||||
* when inactivity (acceleration has been below inactivity_threshold
|
||||
* for at least inactivity_time) is detected and the LINK bit is set.
|
||||
* A '0' disables automatic switching to Sleep Mode. See SLEEP
|
||||
* for further description.
|
||||
* A '0' disables automatic switching to Sleep Mode. See the
|
||||
* Sleep Bit section of the ADXL34x datasheet for more information.
|
||||
*/
|
||||
|
||||
#define ADXL_LINK (1 << 5)
|
||||
|
|
@ -266,6 +267,12 @@ struct adxl34x_platform_data {
|
|||
|
||||
u8 watermark;
|
||||
|
||||
/*
|
||||
* When acceleration measurements are received from the ADXL34x
|
||||
* events are sent to the event subsystem. The following settings
|
||||
* select the event type and event code for new x, y and z axis data
|
||||
* respectively.
|
||||
*/
|
||||
u32 ev_type; /* EV_ABS or EV_REL */
|
||||
|
||||
u32 ev_code_x; /* ABS_X,Y,Z or REL_X,Y,Z */
|
||||
|
|
@ -289,7 +296,7 @@ struct adxl34x_platform_data {
|
|||
u32 ev_code_act_inactivity; /* EV_KEY */
|
||||
|
||||
/*
|
||||
* Use ADXL34x INT2 instead of INT1
|
||||
* Use ADXL34x INT2 pin instead of INT1 pin for interrupt output
|
||||
*/
|
||||
u8 use_int2;
|
||||
|
||||
|
|
|
|||
39
include/linux/integrity.h
Normal file
39
include/linux/integrity.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright (C) 2009 IBM Corporation
|
||||
* Author: Mimi Zohar <zohar@us.ibm.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 2 of the License.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_INTEGRITY_H
|
||||
#define _LINUX_INTEGRITY_H
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
enum integrity_status {
|
||||
INTEGRITY_PASS = 0,
|
||||
INTEGRITY_FAIL,
|
||||
INTEGRITY_NOLABEL,
|
||||
INTEGRITY_NOXATTRS,
|
||||
INTEGRITY_UNKNOWN,
|
||||
};
|
||||
|
||||
/* List of EVM protected security xattrs */
|
||||
#ifdef CONFIG_INTEGRITY
|
||||
extern int integrity_inode_alloc(struct inode *inode);
|
||||
extern void integrity_inode_free(struct inode *inode);
|
||||
|
||||
#else
|
||||
static inline int integrity_inode_alloc(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void integrity_inode_free(struct inode *inode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_INTEGRITY_H */
|
||||
#endif /* _LINUX_INTEGRITY_H */
|
||||
|
|
@ -271,7 +271,7 @@ struct qi_desc {
|
|||
};
|
||||
|
||||
struct q_inval {
|
||||
spinlock_t q_lock;
|
||||
raw_spinlock_t q_lock;
|
||||
struct qi_desc *desc; /* invalidation queue */
|
||||
int *desc_status; /* desc status */
|
||||
int free_head; /* first free entry */
|
||||
|
|
@ -279,7 +279,7 @@ struct q_inval {
|
|||
int free_cnt;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_INTR_REMAP
|
||||
#ifdef CONFIG_IRQ_REMAP
|
||||
/* 1MB - maximum possible interrupt remapping table size */
|
||||
#define INTR_REMAP_PAGE_ORDER 8
|
||||
#define INTR_REMAP_TABLE_REG_SIZE 0xf
|
||||
|
|
@ -311,14 +311,14 @@ struct intel_iommu {
|
|||
u64 cap;
|
||||
u64 ecap;
|
||||
u32 gcmd; /* Holds TE, EAFL. Don't need SRTP, SFL, WBF */
|
||||
spinlock_t register_lock; /* protect register handling */
|
||||
raw_spinlock_t register_lock; /* protect register handling */
|
||||
int seq_id; /* sequence id of the iommu */
|
||||
int agaw; /* agaw of this iommu */
|
||||
int msagaw; /* max sagaw of this iommu */
|
||||
unsigned int irq;
|
||||
unsigned char name[13]; /* Device Name */
|
||||
|
||||
#ifdef CONFIG_DMAR
|
||||
#ifdef CONFIG_INTEL_IOMMU
|
||||
unsigned long *domain_ids; /* bitmap of domains */
|
||||
struct dmar_domain **domains; /* ptr to domains */
|
||||
spinlock_t lock; /* protect context, domain ids */
|
||||
|
|
@ -329,7 +329,7 @@ struct intel_iommu {
|
|||
struct q_inval *qi; /* Queued invalidation info */
|
||||
u32 *iommu_state; /* Store iommu states between suspend and resume.*/
|
||||
|
||||
#ifdef CONFIG_INTR_REMAP
|
||||
#ifdef CONFIG_IRQ_REMAP
|
||||
struct ir_table *ir_table; /* Interrupt remapping info */
|
||||
#endif
|
||||
int node;
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@
|
|||
* IRQF_NO_SUSPEND - Do not disable this IRQ during suspend
|
||||
* IRQF_FORCE_RESUME - Force enable it on resume even if IRQF_NO_SUSPEND is set
|
||||
* IRQF_NO_THREAD - Interrupt cannot be threaded
|
||||
* IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device
|
||||
* resume time.
|
||||
*/
|
||||
#define IRQF_DISABLED 0x00000020
|
||||
#define IRQF_SAMPLE_RANDOM 0x00000040
|
||||
|
|
@ -72,6 +74,7 @@
|
|||
#define IRQF_NO_SUSPEND 0x00004000
|
||||
#define IRQF_FORCE_RESUME 0x00008000
|
||||
#define IRQF_NO_THREAD 0x00010000
|
||||
#define IRQF_EARLY_RESUME 0x00020000
|
||||
|
||||
#define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD)
|
||||
|
||||
|
|
@ -95,6 +98,7 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
|
|||
* @flags: flags (see IRQF_* above)
|
||||
* @name: name of the device
|
||||
* @dev_id: cookie to identify the device
|
||||
* @percpu_dev_id: cookie to identify the device
|
||||
* @next: pointer to the next irqaction for shared interrupts
|
||||
* @irq: interrupt number
|
||||
* @dir: pointer to the proc/irq/NN/name entry
|
||||
|
|
@ -104,17 +108,18 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
|
|||
* @thread_mask: bitmask for keeping track of @thread activity
|
||||
*/
|
||||
struct irqaction {
|
||||
irq_handler_t handler;
|
||||
unsigned long flags;
|
||||
void *dev_id;
|
||||
struct irqaction *next;
|
||||
int irq;
|
||||
irq_handler_t thread_fn;
|
||||
struct task_struct *thread;
|
||||
unsigned long thread_flags;
|
||||
unsigned long thread_mask;
|
||||
const char *name;
|
||||
struct proc_dir_entry *dir;
|
||||
irq_handler_t handler;
|
||||
unsigned long flags;
|
||||
void *dev_id;
|
||||
void __percpu *percpu_dev_id;
|
||||
struct irqaction *next;
|
||||
int irq;
|
||||
irq_handler_t thread_fn;
|
||||
struct task_struct *thread;
|
||||
unsigned long thread_flags;
|
||||
unsigned long thread_mask;
|
||||
const char *name;
|
||||
struct proc_dir_entry *dir;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
extern irqreturn_t no_action(int cpl, void *dev_id);
|
||||
|
|
@ -136,6 +141,10 @@ extern int __must_check
|
|||
request_any_context_irq(unsigned int irq, irq_handler_t handler,
|
||||
unsigned long flags, const char *name, void *dev_id);
|
||||
|
||||
extern int __must_check
|
||||
request_percpu_irq(unsigned int irq, irq_handler_t handler,
|
||||
const char *devname, void __percpu *percpu_dev_id);
|
||||
|
||||
extern void exit_irq_thread(void);
|
||||
#else
|
||||
|
||||
|
|
@ -164,10 +173,18 @@ request_any_context_irq(unsigned int irq, irq_handler_t handler,
|
|||
return request_irq(irq, handler, flags, name, dev_id);
|
||||
}
|
||||
|
||||
static inline int __must_check
|
||||
request_percpu_irq(unsigned int irq, irq_handler_t handler,
|
||||
const char *devname, void __percpu *percpu_dev_id)
|
||||
{
|
||||
return request_irq(irq, handler, 0, devname, percpu_dev_id);
|
||||
}
|
||||
|
||||
static inline void exit_irq_thread(void) { }
|
||||
#endif
|
||||
|
||||
extern void free_irq(unsigned int, void *);
|
||||
extern void free_percpu_irq(unsigned int, void __percpu *);
|
||||
|
||||
struct device;
|
||||
|
||||
|
|
@ -207,7 +224,9 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
|
|||
|
||||
extern void disable_irq_nosync(unsigned int irq);
|
||||
extern void disable_irq(unsigned int irq);
|
||||
extern void disable_percpu_irq(unsigned int irq);
|
||||
extern void enable_irq(unsigned int irq);
|
||||
extern void enable_percpu_irq(unsigned int irq, unsigned int type);
|
||||
|
||||
/* The following three functions are for the core kernel use only. */
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
* The io_mapping mechanism provides an abstraction for mapping
|
||||
* individual pages from an io device to the CPU in an efficient fashion.
|
||||
*
|
||||
* See Documentation/io_mapping.txt
|
||||
* See Documentation/io-mapping.txt
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_HAVE_ATOMIC_IOMAP
|
||||
|
|
@ -117,6 +117,8 @@ io_mapping_unmap(void __iomem *vaddr)
|
|||
|
||||
#else
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
/* this struct isn't actually defined anywhere */
|
||||
struct io_mapping;
|
||||
|
||||
|
|
@ -138,12 +140,14 @@ static inline void __iomem *
|
|||
io_mapping_map_atomic_wc(struct io_mapping *mapping,
|
||||
unsigned long offset)
|
||||
{
|
||||
pagefault_disable();
|
||||
return ((char __force __iomem *) mapping) + offset;
|
||||
}
|
||||
|
||||
static inline void
|
||||
io_mapping_unmap_atomic(void __iomem *vaddr)
|
||||
{
|
||||
pagefault_enable();
|
||||
}
|
||||
|
||||
/* Non-atomic map/unmap */
|
||||
|
|
|
|||
|
|
@ -25,15 +25,29 @@
|
|||
#define IOMMU_WRITE (2)
|
||||
#define IOMMU_CACHE (4) /* DMA cache coherency */
|
||||
|
||||
struct iommu_ops;
|
||||
struct bus_type;
|
||||
struct device;
|
||||
struct iommu_domain;
|
||||
|
||||
/* iommu fault flags */
|
||||
#define IOMMU_FAULT_READ 0x0
|
||||
#define IOMMU_FAULT_WRITE 0x1
|
||||
|
||||
typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
|
||||
struct device *, unsigned long, int);
|
||||
|
||||
struct iommu_domain {
|
||||
struct iommu_ops *ops;
|
||||
void *priv;
|
||||
iommu_fault_handler_t handler;
|
||||
};
|
||||
|
||||
#define IOMMU_CAP_CACHE_COHERENCY 0x1
|
||||
#define IOMMU_CAP_INTR_REMAP 0x2 /* isolates device intrs */
|
||||
|
||||
#ifdef CONFIG_IOMMU_API
|
||||
|
||||
struct iommu_ops {
|
||||
int (*domain_init)(struct iommu_domain *domain);
|
||||
void (*domain_destroy)(struct iommu_domain *domain);
|
||||
|
|
@ -49,11 +63,9 @@ struct iommu_ops {
|
|||
unsigned long cap);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_IOMMU_API
|
||||
|
||||
extern void register_iommu(struct iommu_ops *ops);
|
||||
extern bool iommu_found(void);
|
||||
extern struct iommu_domain *iommu_domain_alloc(void);
|
||||
extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
|
||||
extern bool iommu_present(struct bus_type *bus);
|
||||
extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
|
||||
extern void iommu_domain_free(struct iommu_domain *domain);
|
||||
extern int iommu_attach_device(struct iommu_domain *domain,
|
||||
struct device *dev);
|
||||
|
|
@ -67,19 +79,58 @@ extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,
|
|||
unsigned long iova);
|
||||
extern int iommu_domain_has_cap(struct iommu_domain *domain,
|
||||
unsigned long cap);
|
||||
extern void iommu_set_fault_handler(struct iommu_domain *domain,
|
||||
iommu_fault_handler_t handler);
|
||||
|
||||
/**
|
||||
* report_iommu_fault() - report about an IOMMU fault to the IOMMU framework
|
||||
* @domain: the iommu domain where the fault has happened
|
||||
* @dev: the device where the fault has happened
|
||||
* @iova: the faulting address
|
||||
* @flags: mmu fault flags (e.g. IOMMU_FAULT_READ/IOMMU_FAULT_WRITE/...)
|
||||
*
|
||||
* This function should be called by the low-level IOMMU implementations
|
||||
* whenever IOMMU faults happen, to allow high-level users, that are
|
||||
* interested in such events, to know about them.
|
||||
*
|
||||
* This event may be useful for several possible use cases:
|
||||
* - mere logging of the event
|
||||
* - dynamic TLB/PTE loading
|
||||
* - if restarting of the faulting device is required
|
||||
*
|
||||
* Returns 0 on success and an appropriate error code otherwise (if dynamic
|
||||
* PTE/TLB loading will one day be supported, implementations will be able
|
||||
* to tell whether it succeeded or not according to this return value).
|
||||
*
|
||||
* Specifically, -ENOSYS is returned if a fault handler isn't installed
|
||||
* (though fault handlers can also return -ENOSYS, in case they want to
|
||||
* elicit the default behavior of the IOMMU drivers).
|
||||
*/
|
||||
static inline int report_iommu_fault(struct iommu_domain *domain,
|
||||
struct device *dev, unsigned long iova, int flags)
|
||||
{
|
||||
int ret = -ENOSYS;
|
||||
|
||||
/*
|
||||
* if upper layers showed interest and installed a fault handler,
|
||||
* invoke it.
|
||||
*/
|
||||
if (domain->handler)
|
||||
ret = domain->handler(domain, dev, iova, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else /* CONFIG_IOMMU_API */
|
||||
|
||||
static inline void register_iommu(struct iommu_ops *ops)
|
||||
{
|
||||
}
|
||||
struct iommu_ops {};
|
||||
|
||||
static inline bool iommu_found(void)
|
||||
static inline bool iommu_present(struct bus_type *bus)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline struct iommu_domain *iommu_domain_alloc(void)
|
||||
static inline struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -123,6 +174,11 @@ static inline int domain_has_cap(struct iommu_domain *domain,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void iommu_set_fault_handler(struct iommu_domain *domain,
|
||||
iommu_fault_handler_t handler)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_IOMMU_API */
|
||||
|
||||
#endif /* __LINUX_IOMMU_H */
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
#define IP6_TNL_F_MIP6_DEV 0x8
|
||||
/* copy DSCP from the outer packet */
|
||||
#define IP6_TNL_F_RCV_DSCP_COPY 0x10
|
||||
/* copy fwmark from inner packet */
|
||||
#define IP6_TNL_F_USE_ORIG_FWMARK 0x20
|
||||
|
||||
struct ip6_tnl_parm {
|
||||
char name[IFNAMSIZ]; /* name of tunnel device */
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
#define IPX_MTU 576
|
||||
|
||||
struct sockaddr_ipx {
|
||||
sa_family_t sipx_family;
|
||||
__kernel_sa_family_t sipx_family;
|
||||
__be16 sipx_port;
|
||||
__be32 sipx_network;
|
||||
unsigned char sipx_node[IPX_NODE_LEN];
|
||||
|
|
|
|||
|
|
@ -26,12 +26,9 @@
|
|||
#define KERNEL_IRDA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/socket.h>
|
||||
|
||||
/* Please do *not* add any #include in this file, this file is
|
||||
* included as-is in user space.
|
||||
* Please fix the calling file to properly included needed files before
|
||||
* this one, or preferably to include <net/irda/irda.h> instead.
|
||||
* Jean II */
|
||||
/* Note that this file is shared with user space. */
|
||||
|
||||
/* Hint bit positions for first hint byte */
|
||||
#define HINT_PNP 0x01
|
||||
|
|
@ -125,7 +122,7 @@ enum {
|
|||
#define LSAP_ANY 0xff
|
||||
|
||||
struct sockaddr_irda {
|
||||
sa_family_t sir_family; /* AF_IRDA */
|
||||
__kernel_sa_family_t sir_family; /* AF_IRDA */
|
||||
__u8 sir_lsap_sel; /* LSAP selector */
|
||||
__u32 sir_addr; /* Device address */
|
||||
char sir_name[25]; /* Usually <service>:IrDA:TinyTP */
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ typedef void (*irq_preflow_handler_t)(struct irq_data *data);
|
|||
* IRQ_NO_BALANCING - Interrupt cannot be balanced (affinity set)
|
||||
* IRQ_MOVE_PCNTXT - Interrupt can be migrated from process context
|
||||
* IRQ_NESTED_TRHEAD - Interrupt nests into another thread
|
||||
* IRQ_PER_CPU_DEVID - Dev_id is a per-cpu variable
|
||||
*/
|
||||
enum {
|
||||
IRQ_TYPE_NONE = 0x00000000,
|
||||
|
|
@ -88,12 +89,13 @@ enum {
|
|||
IRQ_MOVE_PCNTXT = (1 << 14),
|
||||
IRQ_NESTED_THREAD = (1 << 15),
|
||||
IRQ_NOTHREAD = (1 << 16),
|
||||
IRQ_PER_CPU_DEVID = (1 << 17),
|
||||
};
|
||||
|
||||
#define IRQF_MODIFY_MASK \
|
||||
(IRQ_TYPE_SENSE_MASK | IRQ_NOPROBE | IRQ_NOREQUEST | \
|
||||
IRQ_NOAUTOEN | IRQ_MOVE_PCNTXT | IRQ_LEVEL | IRQ_NO_BALANCING | \
|
||||
IRQ_PER_CPU | IRQ_NESTED_THREAD)
|
||||
IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID)
|
||||
|
||||
#define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING)
|
||||
|
||||
|
|
@ -336,12 +338,14 @@ struct irq_chip {
|
|||
* IRQCHIP_MASK_ON_SUSPEND: Mask non wake irqs in the suspend path
|
||||
* IRQCHIP_ONOFFLINE_ENABLED: Only call irq_on/off_line callbacks
|
||||
* when irq enabled
|
||||
* IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip
|
||||
*/
|
||||
enum {
|
||||
IRQCHIP_SET_TYPE_MASKED = (1 << 0),
|
||||
IRQCHIP_EOI_IF_HANDLED = (1 << 1),
|
||||
IRQCHIP_MASK_ON_SUSPEND = (1 << 2),
|
||||
IRQCHIP_ONOFFLINE_ENABLED = (1 << 3),
|
||||
IRQCHIP_SKIP_SET_WAKE = (1 << 4),
|
||||
};
|
||||
|
||||
/* This include will go away once we isolated irq_desc usage to core code */
|
||||
|
|
@ -365,6 +369,8 @@ enum {
|
|||
struct irqaction;
|
||||
extern int setup_irq(unsigned int irq, struct irqaction *new);
|
||||
extern void remove_irq(unsigned int irq, struct irqaction *act);
|
||||
extern int setup_percpu_irq(unsigned int irq, struct irqaction *new);
|
||||
extern void remove_percpu_irq(unsigned int irq, struct irqaction *act);
|
||||
|
||||
extern void irq_cpu_online(void);
|
||||
extern void irq_cpu_offline(void);
|
||||
|
|
@ -392,6 +398,7 @@ extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc);
|
|||
extern void handle_edge_eoi_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void handle_percpu_devid_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void handle_nested_irq(unsigned int irq);
|
||||
|
||||
|
|
@ -420,6 +427,8 @@ static inline void irq_set_chip_and_handler(unsigned int irq, struct irq_chip *c
|
|||
irq_set_chip_and_handler_name(irq, chip, handle, NULL);
|
||||
}
|
||||
|
||||
extern int irq_set_percpu_devid(unsigned int irq);
|
||||
|
||||
extern void
|
||||
__irq_set_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
|
||||
const char *name);
|
||||
|
|
@ -481,6 +490,13 @@ static inline void irq_set_nested_thread(unsigned int irq, bool nest)
|
|||
irq_clear_status_flags(irq, IRQ_NESTED_THREAD);
|
||||
}
|
||||
|
||||
static inline void irq_set_percpu_devid_flags(unsigned int irq)
|
||||
{
|
||||
irq_set_status_flags(irq,
|
||||
IRQ_NOAUTOEN | IRQ_PER_CPU | IRQ_NOTHREAD |
|
||||
IRQ_NOPROBE | IRQ_PER_CPU_DEVID);
|
||||
}
|
||||
|
||||
/* Handle dynamic irq creation and destruction */
|
||||
extern unsigned int create_irq_nr(unsigned int irq_want, int node);
|
||||
extern int create_irq(void);
|
||||
|
|
|
|||
|
|
@ -1,20 +1,23 @@
|
|||
#ifndef _LINUX_IRQ_WORK_H
|
||||
#define _LINUX_IRQ_WORK_H
|
||||
|
||||
#include <linux/llist.h>
|
||||
|
||||
struct irq_work {
|
||||
struct irq_work *next;
|
||||
unsigned long flags;
|
||||
struct llist_node llnode;
|
||||
void (*func)(struct irq_work *);
|
||||
};
|
||||
|
||||
static inline
|
||||
void init_irq_work(struct irq_work *entry, void (*func)(struct irq_work *))
|
||||
void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))
|
||||
{
|
||||
entry->next = NULL;
|
||||
entry->func = func;
|
||||
work->flags = 0;
|
||||
work->func = func;
|
||||
}
|
||||
|
||||
bool irq_work_queue(struct irq_work *entry);
|
||||
bool irq_work_queue(struct irq_work *work);
|
||||
void irq_work_run(void);
|
||||
void irq_work_sync(struct irq_work *entry);
|
||||
void irq_work_sync(struct irq_work *work);
|
||||
|
||||
#endif /* _LINUX_IRQ_WORK_H */
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ struct irq_desc {
|
|||
unsigned long last_unhandled; /* Aging timer for unhandled count */
|
||||
unsigned int irqs_unhandled;
|
||||
raw_spinlock_t lock;
|
||||
struct cpumask *percpu_enabled;
|
||||
#ifdef CONFIG_SMP
|
||||
const struct cpumask *affinity_hint;
|
||||
struct irq_affinity_notify *affinity_notify;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ struct irq_domain_ops {
|
|||
* 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
|
||||
* @ops: pointer to irq_domain methods
|
||||
* @priv: private data pointer for use by owner. Not touched by irq_domain
|
||||
* core code.
|
||||
|
|
@ -57,6 +58,7 @@ struct irq_domain {
|
|||
struct list_head list;
|
||||
unsigned int irq_base;
|
||||
unsigned int nr_irq;
|
||||
unsigned int hwirq_base;
|
||||
const struct irq_domain_ops *ops;
|
||||
void *priv;
|
||||
struct device_node *of_node;
|
||||
|
|
@ -72,9 +74,21 @@ struct irq_domain {
|
|||
static inline unsigned int irq_domain_to_irq(struct irq_domain *d,
|
||||
unsigned long hwirq)
|
||||
{
|
||||
return d->ops->to_irq ? d->ops->to_irq(d, hwirq) : d->irq_base + hwirq;
|
||||
if (d->ops->to_irq)
|
||||
return d->ops->to_irq(d, hwirq);
|
||||
if (WARN_ON(hwirq < d->hwirq_base))
|
||||
return 0;
|
||||
return d->irq_base + hwirq - d->hwirq_base;
|
||||
}
|
||||
|
||||
#define irq_domain_for_each_hwirq(d, hw) \
|
||||
for (hw = d->hwirq_base; hw < d->hwirq_base + d->nr_irq; hw++)
|
||||
|
||||
#define irq_domain_for_each_irq(d, hw, irq) \
|
||||
for (hw = d->hwirq_base, irq = irq_domain_to_irq(d, hw); \
|
||||
hw < d->hwirq_base + d->nr_irq; \
|
||||
hw++, irq = irq_domain_to_irq(d, hw))
|
||||
|
||||
extern void irq_domain_add(struct irq_domain *domain);
|
||||
extern void irq_domain_del(struct irq_domain *domain);
|
||||
#endif /* CONFIG_IRQ_DOMAIN */
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
#define ISDN_NET_ENCAP_SYNCPPP 4
|
||||
#define ISDN_NET_ENCAP_UIHDLC 5
|
||||
#define ISDN_NET_ENCAP_CISCOHDLCK 6 /* With SLARP and keepalive */
|
||||
#define ISDN_NET_ENCAP_X25IFACE 7 /* Documentation/networking/x25-iface.txt*/
|
||||
#define ISDN_NET_ENCAP_X25IFACE 7 /* Documentation/networking/x25-iface.txt */
|
||||
#define ISDN_NET_ENCAP_MAX_ENCAP ISDN_NET_ENCAP_X25IFACE
|
||||
|
||||
/* Facility which currently uses an ISDN-channel */
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ extern void jiffies_to_timespec(const unsigned long jiffies,
|
|||
extern unsigned long timeval_to_jiffies(const struct timeval *value);
|
||||
extern void jiffies_to_timeval(const unsigned long jiffies,
|
||||
struct timeval *value);
|
||||
extern clock_t jiffies_to_clock_t(long x);
|
||||
extern clock_t jiffies_to_clock_t(unsigned long x);
|
||||
extern unsigned long clock_t_to_jiffies(unsigned long x);
|
||||
extern u64 jiffies_64_to_clock_t(u64 x);
|
||||
extern u64 nsec_to_clock_t(u64 x);
|
||||
|
|
|
|||
|
|
@ -101,9 +101,8 @@ static inline int lookup_symbol_attrs(unsigned long addr, unsigned long *size, u
|
|||
#endif /*CONFIG_KALLSYMS*/
|
||||
|
||||
/* This macro allows us to keep printk typechecking */
|
||||
static void __check_printsym_format(const char *fmt, ...)
|
||||
__attribute__((format(printf,1,2)));
|
||||
static inline void __check_printsym_format(const char *fmt, ...)
|
||||
static __printf(1, 2)
|
||||
void __check_printsym_format(const char *fmt, ...)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -114,12 +114,9 @@ typedef enum {
|
|||
} kdb_reason_t;
|
||||
|
||||
extern int kdb_trap_printk;
|
||||
extern int vkdb_printf(const char *fmt, va_list args)
|
||||
__attribute__ ((format (printf, 1, 0)));
|
||||
extern int kdb_printf(const char *, ...)
|
||||
__attribute__ ((format (printf, 1, 2)));
|
||||
typedef int (*kdb_printf_t)(const char *, ...)
|
||||
__attribute__ ((format (printf, 1, 2)));
|
||||
extern __printf(1, 0) int vkdb_printf(const char *fmt, va_list args);
|
||||
extern __printf(1, 2) int kdb_printf(const char *, ...);
|
||||
typedef __printf(1, 2) int (*kdb_printf_t)(const char *, ...);
|
||||
|
||||
extern void kdb_init(int level);
|
||||
|
||||
|
|
|
|||
|
|
@ -287,6 +287,8 @@ static inline int __must_check kstrtos32_from_user(const char __user *s, size_t
|
|||
return kstrtoint_from_user(s, count, base, res);
|
||||
}
|
||||
|
||||
/* Obsolete, do not use. Use kstrto<foo> instead */
|
||||
|
||||
extern unsigned long simple_strtoul(const char *,char **,unsigned int);
|
||||
extern long simple_strtol(const char *,char **,unsigned int);
|
||||
extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
|
||||
|
|
@ -296,20 +298,20 @@ extern long long simple_strtoll(const char *,char **,unsigned int);
|
|||
#define strict_strtoull kstrtoull
|
||||
#define strict_strtoll kstrtoll
|
||||
|
||||
extern int sprintf(char * buf, const char * fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int vsprintf(char *buf, const char *, va_list)
|
||||
__attribute__ ((format (printf, 2, 0)));
|
||||
extern int snprintf(char * buf, size_t size, const char * fmt, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
|
||||
__attribute__ ((format (printf, 3, 0)));
|
||||
extern int scnprintf(char * buf, size_t size, const char * fmt, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
|
||||
__attribute__ ((format (printf, 3, 0)));
|
||||
extern char *kasprintf(gfp_t gfp, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
/* lib/printf utilities */
|
||||
|
||||
extern __printf(2, 3) int sprintf(char *buf, const char * fmt, ...);
|
||||
extern __printf(2, 0) int vsprintf(char *buf, const char *, va_list);
|
||||
extern __printf(3, 4)
|
||||
int snprintf(char *buf, size_t size, const char *fmt, ...);
|
||||
extern __printf(3, 0)
|
||||
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
|
||||
extern __printf(3, 4)
|
||||
int scnprintf(char *buf, size_t size, const char *fmt, ...);
|
||||
extern __printf(3, 0)
|
||||
int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
|
||||
extern __printf(2, 3)
|
||||
char *kasprintf(gfp_t gfp, const char *fmt, ...);
|
||||
extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
|
||||
|
||||
extern int sscanf(const char *, const char *, ...)
|
||||
|
|
@ -374,15 +376,20 @@ extern const char hex_asc[];
|
|||
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
|
||||
#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
|
||||
|
||||
static inline char *pack_hex_byte(char *buf, u8 byte)
|
||||
static inline char *hex_byte_pack(char *buf, u8 byte)
|
||||
{
|
||||
*buf++ = hex_asc_hi(byte);
|
||||
*buf++ = hex_asc_lo(byte);
|
||||
return buf;
|
||||
}
|
||||
|
||||
static inline char * __deprecated pack_hex_byte(char *buf, u8 byte)
|
||||
{
|
||||
return hex_byte_pack(buf, byte);
|
||||
}
|
||||
|
||||
extern int hex_to_bin(char ch);
|
||||
extern void hex2bin(u8 *dst, const char *src, size_t count);
|
||||
extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
|
||||
|
||||
/*
|
||||
* General tracing related utility functions - trace_printk(),
|
||||
|
|
@ -427,8 +434,8 @@ extern void tracing_start(void);
|
|||
extern void tracing_stop(void);
|
||||
extern void ftrace_off_permanent(void);
|
||||
|
||||
static inline void __attribute__ ((format (printf, 1, 2)))
|
||||
____trace_printk_check_format(const char *fmt, ...)
|
||||
static inline __printf(1, 2)
|
||||
void ____trace_printk_check_format(const char *fmt, ...)
|
||||
{
|
||||
}
|
||||
#define __trace_printk_check_format(fmt, args...) \
|
||||
|
|
@ -467,13 +474,11 @@ do { \
|
|||
__trace_printk(_THIS_IP_, fmt, ##args); \
|
||||
} while (0)
|
||||
|
||||
extern int
|
||||
__trace_bprintk(unsigned long ip, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern __printf(2, 3)
|
||||
int __trace_bprintk(unsigned long ip, const char *fmt, ...);
|
||||
|
||||
extern int
|
||||
__trace_printk(unsigned long ip, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern __printf(2, 3)
|
||||
int __trace_printk(unsigned long ip, const char *fmt, ...);
|
||||
|
||||
extern void trace_dump_stack(void);
|
||||
|
||||
|
|
@ -502,8 +507,8 @@ __ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
|
|||
|
||||
extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
|
||||
#else
|
||||
static inline int
|
||||
trace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
static inline __printf(1, 2)
|
||||
int trace_printk(const char *fmt, ...);
|
||||
|
||||
static inline void tracing_start(void) { }
|
||||
static inline void tracing_stop(void) { }
|
||||
|
|
|
|||
|
|
@ -33,6 +33,14 @@
|
|||
#error KEXEC_ARCH not defined
|
||||
#endif
|
||||
|
||||
#ifndef KEXEC_CRASH_CONTROL_MEMORY_LIMIT
|
||||
#define KEXEC_CRASH_CONTROL_MEMORY_LIMIT KEXEC_CONTROL_MEMORY_LIMIT
|
||||
#endif
|
||||
|
||||
#ifndef KEXEC_CRASH_MEM_ALIGN
|
||||
#define KEXEC_CRASH_MEM_ALIGN PAGE_SIZE
|
||||
#endif
|
||||
|
||||
#define KEXEC_NOTE_HEAD_BYTES ALIGN(sizeof(struct elf_note), 4)
|
||||
#define KEXEC_CORE_NOTE_NAME "CORE"
|
||||
#define KEXEC_CORE_NOTE_NAME_BYTES ALIGN(sizeof(KEXEC_CORE_NOTE_NAME), 4)
|
||||
|
|
@ -129,9 +137,11 @@ extern void crash_kexec(struct pt_regs *);
|
|||
int kexec_should_crash(struct task_struct *);
|
||||
void crash_save_cpu(struct pt_regs *regs, int cpu);
|
||||
void crash_save_vmcoreinfo(void);
|
||||
void crash_map_reserved_pages(void);
|
||||
void crash_unmap_reserved_pages(void);
|
||||
void arch_crash_save_vmcoreinfo(void);
|
||||
void vmcoreinfo_append_str(const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 1, 2)));
|
||||
__printf(1, 2)
|
||||
void vmcoreinfo_append_str(const char *fmt, ...);
|
||||
unsigned long paddr_vmcoreinfo_note(void);
|
||||
|
||||
#define VMCOREINFO_OSRELEASE(value) \
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@
|
|||
extern char modprobe_path[]; /* for sysctl */
|
||||
/* modprobe exit status on success, -ve on error. Return value
|
||||
* usually useless though. */
|
||||
extern int __request_module(bool wait, const char *name, ...) \
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
extern __printf(2, 3)
|
||||
int __request_module(bool wait, const char *name, ...);
|
||||
#define request_module(mod...) __request_module(true, mod)
|
||||
#define request_module_nowait(mod...) __request_module(false, mod)
|
||||
#define try_then_request_module(x, mod...) \
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ struct kobject {
|
|||
unsigned int uevent_suppress:1;
|
||||
};
|
||||
|
||||
extern int kobject_set_name(struct kobject *kobj, const char *name, ...)
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
extern __printf(2, 3)
|
||||
int kobject_set_name(struct kobject *kobj, const char *name, ...);
|
||||
extern int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
|
||||
va_list vargs);
|
||||
|
||||
|
|
@ -83,15 +83,13 @@ static inline const char *kobject_name(const struct kobject *kobj)
|
|||
}
|
||||
|
||||
extern void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
|
||||
extern int __must_check kobject_add(struct kobject *kobj,
|
||||
struct kobject *parent,
|
||||
const char *fmt, ...)
|
||||
__attribute__((format(printf, 3, 4)));
|
||||
extern int __must_check kobject_init_and_add(struct kobject *kobj,
|
||||
struct kobj_type *ktype,
|
||||
struct kobject *parent,
|
||||
const char *fmt, ...)
|
||||
__attribute__((format(printf, 4, 5)));
|
||||
extern __printf(3, 4) __must_check
|
||||
int kobject_add(struct kobject *kobj, struct kobject *parent,
|
||||
const char *fmt, ...);
|
||||
extern __printf(4, 5) __must_check
|
||||
int kobject_init_and_add(struct kobject *kobj,
|
||||
struct kobj_type *ktype, struct kobject *parent,
|
||||
const char *fmt, ...);
|
||||
|
||||
extern void kobject_del(struct kobject *kobj);
|
||||
|
||||
|
|
@ -212,8 +210,8 @@ int kobject_uevent(struct kobject *kobj, enum kobject_action action);
|
|||
int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
|
||||
char *envp[]);
|
||||
|
||||
int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...)
|
||||
__attribute__((format (printf, 2, 3)));
|
||||
__printf(2, 3)
|
||||
int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...);
|
||||
|
||||
int kobject_action_type(const char *buf, size_t count,
|
||||
enum kobject_action *type);
|
||||
|
|
@ -226,7 +224,7 @@ static inline int kobject_uevent_env(struct kobject *kobj,
|
|||
char *envp[])
|
||||
{ return 0; }
|
||||
|
||||
static inline __attribute__((format(printf, 2, 3)))
|
||||
static inline __printf(2, 3)
|
||||
int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...)
|
||||
{ return 0; }
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue