mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
Merge branches 'for-2639/i2c-eg20t', 'for-2639/i2c-shmobile', 'for-2639/i2c-tegra' and 'for-2639/i2c-nomadik2' into for-linus/2640/i2c
This commit is contained in:
commit
5bdfdfeed5
5084 changed files with 334612 additions and 325829 deletions
|
|
@ -372,6 +372,7 @@ header-y += unistd.h
|
|||
header-y += usbdevice_fs.h
|
||||
header-y += utime.h
|
||||
header-y += utsname.h
|
||||
header-y += uvcvideo.h
|
||||
header-y += v4l2-mediabus.h
|
||||
header-y += v4l2-subdev.h
|
||||
header-y += veth.h
|
||||
|
|
|
|||
40
include/linux/alarmtimer.h
Normal file
40
include/linux/alarmtimer.h
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
#ifndef _LINUX_ALARMTIMER_H
|
||||
#define _LINUX_ALARMTIMER_H
|
||||
|
||||
#include <linux/time.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/timerqueue.h>
|
||||
#include <linux/rtc.h>
|
||||
|
||||
enum alarmtimer_type {
|
||||
ALARM_REALTIME,
|
||||
ALARM_BOOTTIME,
|
||||
|
||||
ALARM_NUMTYPE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct alarm - Alarm timer structure
|
||||
* @node: timerqueue node for adding to the event list this value
|
||||
* also includes the expiration time.
|
||||
* @period: Period for recuring alarms
|
||||
* @function: Function pointer to be executed when the timer fires.
|
||||
* @type: Alarm type (BOOTTIME/REALTIME)
|
||||
* @enabled: Flag that represents if the alarm is set to fire or not
|
||||
* @data: Internal data value.
|
||||
*/
|
||||
struct alarm {
|
||||
struct timerqueue_node node;
|
||||
ktime_t period;
|
||||
void (*function)(struct alarm *);
|
||||
enum alarmtimer_type type;
|
||||
bool enabled;
|
||||
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);
|
||||
|
||||
#endif
|
||||
|
|
@ -23,6 +23,13 @@
|
|||
|
||||
struct ath9k_platform_data {
|
||||
u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS];
|
||||
u8 *macaddr;
|
||||
|
||||
int led_pin;
|
||||
u32 gpio_mask;
|
||||
u32 gpio_val;
|
||||
|
||||
bool is_clk_25mhz;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
||||
|
|
|
|||
224
include/linux/bcma/bcma.h
Normal file
224
include/linux/bcma/bcma.h
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
#ifndef LINUX_BCMA_H_
|
||||
#define LINUX_BCMA_H_
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
#include <linux/bcma/bcma_driver_chipcommon.h>
|
||||
#include <linux/bcma/bcma_driver_pci.h>
|
||||
|
||||
#include "bcma_regs.h"
|
||||
|
||||
struct bcma_device;
|
||||
struct bcma_bus;
|
||||
|
||||
enum bcma_hosttype {
|
||||
BCMA_HOSTTYPE_NONE,
|
||||
BCMA_HOSTTYPE_PCI,
|
||||
BCMA_HOSTTYPE_SDIO,
|
||||
};
|
||||
|
||||
struct bcma_chipinfo {
|
||||
u16 id;
|
||||
u8 rev;
|
||||
u8 pkg;
|
||||
};
|
||||
|
||||
struct bcma_host_ops {
|
||||
u8 (*read8)(struct bcma_device *core, u16 offset);
|
||||
u16 (*read16)(struct bcma_device *core, u16 offset);
|
||||
u32 (*read32)(struct bcma_device *core, u16 offset);
|
||||
void (*write8)(struct bcma_device *core, u16 offset, u8 value);
|
||||
void (*write16)(struct bcma_device *core, u16 offset, u16 value);
|
||||
void (*write32)(struct bcma_device *core, u16 offset, u32 value);
|
||||
/* Agent ops */
|
||||
u32 (*aread32)(struct bcma_device *core, u16 offset);
|
||||
void (*awrite32)(struct bcma_device *core, u16 offset, u32 value);
|
||||
};
|
||||
|
||||
/* Core manufacturers */
|
||||
#define BCMA_MANUF_ARM 0x43B
|
||||
#define BCMA_MANUF_MIPS 0x4A7
|
||||
#define BCMA_MANUF_BCM 0x4BF
|
||||
|
||||
/* Core class values. */
|
||||
#define BCMA_CL_SIM 0x0
|
||||
#define BCMA_CL_EROM 0x1
|
||||
#define BCMA_CL_CORESIGHT 0x9
|
||||
#define BCMA_CL_VERIF 0xB
|
||||
#define BCMA_CL_OPTIMO 0xD
|
||||
#define BCMA_CL_GEN 0xE
|
||||
#define BCMA_CL_PRIMECELL 0xF
|
||||
|
||||
/* Core-ID values. */
|
||||
#define BCMA_CORE_OOB_ROUTER 0x367 /* Out of band */
|
||||
#define BCMA_CORE_INVALID 0x700
|
||||
#define BCMA_CORE_CHIPCOMMON 0x800
|
||||
#define BCMA_CORE_ILINE20 0x801
|
||||
#define BCMA_CORE_SRAM 0x802
|
||||
#define BCMA_CORE_SDRAM 0x803
|
||||
#define BCMA_CORE_PCI 0x804
|
||||
#define BCMA_CORE_MIPS 0x805
|
||||
#define BCMA_CORE_ETHERNET 0x806
|
||||
#define BCMA_CORE_V90 0x807
|
||||
#define BCMA_CORE_USB11_HOSTDEV 0x808
|
||||
#define BCMA_CORE_ADSL 0x809
|
||||
#define BCMA_CORE_ILINE100 0x80A
|
||||
#define BCMA_CORE_IPSEC 0x80B
|
||||
#define BCMA_CORE_UTOPIA 0x80C
|
||||
#define BCMA_CORE_PCMCIA 0x80D
|
||||
#define BCMA_CORE_INTERNAL_MEM 0x80E
|
||||
#define BCMA_CORE_MEMC_SDRAM 0x80F
|
||||
#define BCMA_CORE_OFDM 0x810
|
||||
#define BCMA_CORE_EXTIF 0x811
|
||||
#define BCMA_CORE_80211 0x812
|
||||
#define BCMA_CORE_PHY_A 0x813
|
||||
#define BCMA_CORE_PHY_B 0x814
|
||||
#define BCMA_CORE_PHY_G 0x815
|
||||
#define BCMA_CORE_MIPS_3302 0x816
|
||||
#define BCMA_CORE_USB11_HOST 0x817
|
||||
#define BCMA_CORE_USB11_DEV 0x818
|
||||
#define BCMA_CORE_USB20_HOST 0x819
|
||||
#define BCMA_CORE_USB20_DEV 0x81A
|
||||
#define BCMA_CORE_SDIO_HOST 0x81B
|
||||
#define BCMA_CORE_ROBOSWITCH 0x81C
|
||||
#define BCMA_CORE_PARA_ATA 0x81D
|
||||
#define BCMA_CORE_SATA_XORDMA 0x81E
|
||||
#define BCMA_CORE_ETHERNET_GBIT 0x81F
|
||||
#define BCMA_CORE_PCIE 0x820
|
||||
#define BCMA_CORE_PHY_N 0x821
|
||||
#define BCMA_CORE_SRAM_CTL 0x822
|
||||
#define BCMA_CORE_MINI_MACPHY 0x823
|
||||
#define BCMA_CORE_ARM_1176 0x824
|
||||
#define BCMA_CORE_ARM_7TDMI 0x825
|
||||
#define BCMA_CORE_PHY_LP 0x826
|
||||
#define BCMA_CORE_PMU 0x827
|
||||
#define BCMA_CORE_PHY_SSN 0x828
|
||||
#define BCMA_CORE_SDIO_DEV 0x829
|
||||
#define BCMA_CORE_ARM_CM3 0x82A
|
||||
#define BCMA_CORE_PHY_HT 0x82B
|
||||
#define BCMA_CORE_MIPS_74K 0x82C
|
||||
#define BCMA_CORE_MAC_GBIT 0x82D
|
||||
#define BCMA_CORE_DDR12_MEM_CTL 0x82E
|
||||
#define BCMA_CORE_PCIE_RC 0x82F /* PCIe Root Complex */
|
||||
#define BCMA_CORE_OCP_OCP_BRIDGE 0x830
|
||||
#define BCMA_CORE_SHARED_COMMON 0x831
|
||||
#define BCMA_CORE_OCP_AHB_BRIDGE 0x832
|
||||
#define BCMA_CORE_SPI_HOST 0x833
|
||||
#define BCMA_CORE_I2S 0x834
|
||||
#define BCMA_CORE_SDR_DDR1_MEM_CTL 0x835 /* SDR/DDR1 memory controller core */
|
||||
#define BCMA_CORE_SHIM 0x837 /* SHIM component in ubus/6362 */
|
||||
#define BCMA_CORE_DEFAULT 0xFFF
|
||||
|
||||
#define BCMA_MAX_NR_CORES 16
|
||||
|
||||
struct bcma_device {
|
||||
struct bcma_bus *bus;
|
||||
struct bcma_device_id id;
|
||||
|
||||
struct device dev;
|
||||
bool dev_registered;
|
||||
|
||||
u8 core_index;
|
||||
|
||||
u32 addr;
|
||||
u32 wrap;
|
||||
|
||||
void *drvdata;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
static inline void *bcma_get_drvdata(struct bcma_device *core)
|
||||
{
|
||||
return core->drvdata;
|
||||
}
|
||||
static inline void bcma_set_drvdata(struct bcma_device *core, void *drvdata)
|
||||
{
|
||||
core->drvdata = drvdata;
|
||||
}
|
||||
|
||||
struct bcma_driver {
|
||||
const char *name;
|
||||
const struct bcma_device_id *id_table;
|
||||
|
||||
int (*probe)(struct bcma_device *dev);
|
||||
void (*remove)(struct bcma_device *dev);
|
||||
int (*suspend)(struct bcma_device *dev, pm_message_t state);
|
||||
int (*resume)(struct bcma_device *dev);
|
||||
void (*shutdown)(struct bcma_device *dev);
|
||||
|
||||
struct device_driver drv;
|
||||
};
|
||||
extern
|
||||
int __bcma_driver_register(struct bcma_driver *drv, struct module *owner);
|
||||
static inline int bcma_driver_register(struct bcma_driver *drv)
|
||||
{
|
||||
return __bcma_driver_register(drv, THIS_MODULE);
|
||||
}
|
||||
extern void bcma_driver_unregister(struct bcma_driver *drv);
|
||||
|
||||
struct bcma_bus {
|
||||
/* The MMIO area. */
|
||||
void __iomem *mmio;
|
||||
|
||||
const struct bcma_host_ops *ops;
|
||||
|
||||
enum bcma_hosttype hosttype;
|
||||
union {
|
||||
/* Pointer to the PCI bus (only for BCMA_HOSTTYPE_PCI) */
|
||||
struct pci_dev *host_pci;
|
||||
/* Pointer to the SDIO device (only for BCMA_HOSTTYPE_SDIO) */
|
||||
struct sdio_func *host_sdio;
|
||||
};
|
||||
|
||||
struct bcma_chipinfo chipinfo;
|
||||
|
||||
struct bcma_device *mapped_core;
|
||||
struct list_head cores;
|
||||
u8 nr_cores;
|
||||
|
||||
struct bcma_drv_cc drv_cc;
|
||||
struct bcma_drv_pci drv_pci;
|
||||
};
|
||||
|
||||
extern inline u32 bcma_read8(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->read8(core, offset);
|
||||
}
|
||||
extern inline u32 bcma_read16(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->read16(core, offset);
|
||||
}
|
||||
extern inline u32 bcma_read32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->read32(core, offset);
|
||||
}
|
||||
extern inline
|
||||
void bcma_write8(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->write8(core, offset, value);
|
||||
}
|
||||
extern inline
|
||||
void bcma_write16(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->write16(core, offset, value);
|
||||
}
|
||||
extern inline
|
||||
void bcma_write32(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->write32(core, offset, value);
|
||||
}
|
||||
extern inline u32 bcma_aread32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->aread32(core, offset);
|
||||
}
|
||||
extern inline
|
||||
void bcma_awrite32(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->awrite32(core, offset, value);
|
||||
}
|
||||
|
||||
extern bool bcma_core_is_enabled(struct bcma_device *core);
|
||||
extern int bcma_core_enable(struct bcma_device *core, u32 flags);
|
||||
|
||||
#endif /* LINUX_BCMA_H_ */
|
||||
302
include/linux/bcma/bcma_driver_chipcommon.h
Normal file
302
include/linux/bcma/bcma_driver_chipcommon.h
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
#ifndef LINUX_BCMA_DRIVER_CC_H_
|
||||
#define LINUX_BCMA_DRIVER_CC_H_
|
||||
|
||||
/** ChipCommon core registers. **/
|
||||
#define BCMA_CC_ID 0x0000
|
||||
#define BCMA_CC_ID_ID 0x0000FFFF
|
||||
#define BCMA_CC_ID_ID_SHIFT 0
|
||||
#define BCMA_CC_ID_REV 0x000F0000
|
||||
#define BCMA_CC_ID_REV_SHIFT 16
|
||||
#define BCMA_CC_ID_PKG 0x00F00000
|
||||
#define BCMA_CC_ID_PKG_SHIFT 20
|
||||
#define BCMA_CC_ID_NRCORES 0x0F000000
|
||||
#define BCMA_CC_ID_NRCORES_SHIFT 24
|
||||
#define BCMA_CC_ID_TYPE 0xF0000000
|
||||
#define BCMA_CC_ID_TYPE_SHIFT 28
|
||||
#define BCMA_CC_CAP 0x0004 /* Capabilities */
|
||||
#define BCMA_CC_CAP_NRUART 0x00000003 /* # of UARTs */
|
||||
#define BCMA_CC_CAP_MIPSEB 0x00000004 /* MIPS in BigEndian Mode */
|
||||
#define BCMA_CC_CAP_UARTCLK 0x00000018 /* UART clock select */
|
||||
#define BCMA_CC_CAP_UARTCLK_INT 0x00000008 /* UARTs are driven by internal divided clock */
|
||||
#define BCMA_CC_CAP_UARTGPIO 0x00000020 /* UARTs on GPIO 15-12 */
|
||||
#define BCMA_CC_CAP_EXTBUS 0x000000C0 /* External buses present */
|
||||
#define BCMA_CC_CAP_FLASHT 0x00000700 /* Flash Type */
|
||||
#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_PARA 0x00000700 /* Parallel flash */
|
||||
#define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */
|
||||
#define BCMA_PLLTYPE_NONE 0x00000000
|
||||
#define BCMA_PLLTYPE_1 0x00010000 /* 48Mhz base, 3 dividers */
|
||||
#define BCMA_PLLTYPE_2 0x00020000 /* 48Mhz, 4 dividers */
|
||||
#define BCMA_PLLTYPE_3 0x00030000 /* 25Mhz, 2 dividers */
|
||||
#define BCMA_PLLTYPE_4 0x00008000 /* 48Mhz, 4 dividers */
|
||||
#define BCMA_PLLTYPE_5 0x00018000 /* 25Mhz, 4 dividers */
|
||||
#define BCMA_PLLTYPE_6 0x00028000 /* 100/200 or 120/240 only */
|
||||
#define BCMA_PLLTYPE_7 0x00038000 /* 25Mhz, 4 dividers */
|
||||
#define BCMA_CC_CAP_PCTL 0x00040000 /* Power Control */
|
||||
#define BCMA_CC_CAP_OTPS 0x00380000 /* OTP size */
|
||||
#define BCMA_CC_CAP_OTPS_SHIFT 19
|
||||
#define BCMA_CC_CAP_OTPS_BASE 5
|
||||
#define BCMA_CC_CAP_JTAGM 0x00400000 /* JTAG master present */
|
||||
#define BCMA_CC_CAP_BROM 0x00800000 /* Internal boot ROM active */
|
||||
#define BCMA_CC_CAP_64BIT 0x08000000 /* 64-bit Backplane */
|
||||
#define BCMA_CC_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */
|
||||
#define BCMA_CC_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */
|
||||
#define BCMA_CC_CAP_SPROM 0x40000000 /* SPROM present */
|
||||
#define BCMA_CC_CORECTL 0x0008
|
||||
#define BCMA_CC_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */
|
||||
#define BCMA_CC_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */
|
||||
#define BCMA_CC_CORECTL_UARTCLKEN 0x00000008 /* UART clock enable (rev >= 21) */
|
||||
#define BCMA_CC_BIST 0x000C
|
||||
#define BCMA_CC_OTPS 0x0010 /* OTP status */
|
||||
#define BCMA_CC_OTPS_PROGFAIL 0x80000000
|
||||
#define BCMA_CC_OTPS_PROTECT 0x00000007
|
||||
#define BCMA_CC_OTPS_HW_PROTECT 0x00000001
|
||||
#define BCMA_CC_OTPS_SW_PROTECT 0x00000002
|
||||
#define BCMA_CC_OTPS_CID_PROTECT 0x00000004
|
||||
#define BCMA_CC_OTPC 0x0014 /* OTP control */
|
||||
#define BCMA_CC_OTPC_RECWAIT 0xFF000000
|
||||
#define BCMA_CC_OTPC_PROGWAIT 0x00FFFF00
|
||||
#define BCMA_CC_OTPC_PRW_SHIFT 8
|
||||
#define BCMA_CC_OTPC_MAXFAIL 0x00000038
|
||||
#define BCMA_CC_OTPC_VSEL 0x00000006
|
||||
#define BCMA_CC_OTPC_SELVL 0x00000001
|
||||
#define BCMA_CC_OTPP 0x0018 /* OTP prog */
|
||||
#define BCMA_CC_OTPP_COL 0x000000FF
|
||||
#define BCMA_CC_OTPP_ROW 0x0000FF00
|
||||
#define BCMA_CC_OTPP_ROW_SHIFT 8
|
||||
#define BCMA_CC_OTPP_READERR 0x10000000
|
||||
#define BCMA_CC_OTPP_VALUE 0x20000000
|
||||
#define BCMA_CC_OTPP_READ 0x40000000
|
||||
#define BCMA_CC_OTPP_START 0x80000000
|
||||
#define BCMA_CC_OTPP_BUSY 0x80000000
|
||||
#define BCMA_CC_IRQSTAT 0x0020
|
||||
#define BCMA_CC_IRQMASK 0x0024
|
||||
#define BCMA_CC_IRQ_GPIO 0x00000001 /* gpio intr */
|
||||
#define BCMA_CC_IRQ_EXT 0x00000002 /* ro: ext intr pin (corerev >= 3) */
|
||||
#define BCMA_CC_IRQ_WDRESET 0x80000000 /* watchdog reset occurred */
|
||||
#define BCMA_CC_CHIPCTL 0x0028 /* Rev >= 11 only */
|
||||
#define BCMA_CC_CHIPSTAT 0x002C /* Rev >= 11 only */
|
||||
#define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */
|
||||
#define BCMA_CC_JCMD_START 0x80000000
|
||||
#define BCMA_CC_JCMD_BUSY 0x80000000
|
||||
#define BCMA_CC_JCMD_PAUSE 0x40000000
|
||||
#define BCMA_CC_JCMD0_ACC_MASK 0x0000F000
|
||||
#define BCMA_CC_JCMD0_ACC_IRDR 0x00000000
|
||||
#define BCMA_CC_JCMD0_ACC_DR 0x00001000
|
||||
#define BCMA_CC_JCMD0_ACC_IR 0x00002000
|
||||
#define BCMA_CC_JCMD0_ACC_RESET 0x00003000
|
||||
#define BCMA_CC_JCMD0_ACC_IRPDR 0x00004000
|
||||
#define BCMA_CC_JCMD0_ACC_PDR 0x00005000
|
||||
#define BCMA_CC_JCMD0_IRW_MASK 0x00000F00
|
||||
#define BCMA_CC_JCMD_ACC_MASK 0x000F0000 /* Changes for corerev 11 */
|
||||
#define BCMA_CC_JCMD_ACC_IRDR 0x00000000
|
||||
#define BCMA_CC_JCMD_ACC_DR 0x00010000
|
||||
#define BCMA_CC_JCMD_ACC_IR 0x00020000
|
||||
#define BCMA_CC_JCMD_ACC_RESET 0x00030000
|
||||
#define BCMA_CC_JCMD_ACC_IRPDR 0x00040000
|
||||
#define BCMA_CC_JCMD_ACC_PDR 0x00050000
|
||||
#define BCMA_CC_JCMD_IRW_MASK 0x00001F00
|
||||
#define BCMA_CC_JCMD_IRW_SHIFT 8
|
||||
#define BCMA_CC_JCMD_DRW_MASK 0x0000003F
|
||||
#define BCMA_CC_JIR 0x0034 /* Rev >= 10 only */
|
||||
#define BCMA_CC_JDR 0x0038 /* Rev >= 10 only */
|
||||
#define BCMA_CC_JCTL 0x003C /* Rev >= 10 only */
|
||||
#define BCMA_CC_JCTL_FORCE_CLK 4 /* Force clock */
|
||||
#define BCMA_CC_JCTL_EXT_EN 2 /* Enable external targets */
|
||||
#define BCMA_CC_JCTL_EN 1 /* Enable Jtag master */
|
||||
#define BCMA_CC_FLASHCTL 0x0040
|
||||
#define BCMA_CC_FLASHCTL_START 0x80000000
|
||||
#define BCMA_CC_FLASHCTL_BUSY BCMA_CC_FLASHCTL_START
|
||||
#define BCMA_CC_FLASHADDR 0x0044
|
||||
#define BCMA_CC_FLASHDATA 0x0048
|
||||
#define BCMA_CC_BCAST_ADDR 0x0050
|
||||
#define BCMA_CC_BCAST_DATA 0x0054
|
||||
#define BCMA_CC_GPIOPULLUP 0x0058 /* Rev >= 20 only */
|
||||
#define BCMA_CC_GPIOPULLDOWN 0x005C /* Rev >= 20 only */
|
||||
#define BCMA_CC_GPIOIN 0x0060
|
||||
#define BCMA_CC_GPIOOUT 0x0064
|
||||
#define BCMA_CC_GPIOOUTEN 0x0068
|
||||
#define BCMA_CC_GPIOCTL 0x006C
|
||||
#define BCMA_CC_GPIOPOL 0x0070
|
||||
#define BCMA_CC_GPIOIRQ 0x0074
|
||||
#define BCMA_CC_WATCHDOG 0x0080
|
||||
#define BCMA_CC_GPIOTIMER 0x0088 /* LED powersave (corerev >= 16) */
|
||||
#define BCMA_CC_GPIOTIMER_OFFTIME 0x0000FFFF
|
||||
#define BCMA_CC_GPIOTIMER_OFFTIME_SHIFT 0
|
||||
#define BCMA_CC_GPIOTIMER_ONTIME 0xFFFF0000
|
||||
#define BCMA_CC_GPIOTIMER_ONTIME_SHIFT 16
|
||||
#define BCMA_CC_GPIOTOUTM 0x008C /* LED powersave (corerev >= 16) */
|
||||
#define BCMA_CC_CLOCK_N 0x0090
|
||||
#define BCMA_CC_CLOCK_SB 0x0094
|
||||
#define BCMA_CC_CLOCK_PCI 0x0098
|
||||
#define BCMA_CC_CLOCK_M2 0x009C
|
||||
#define BCMA_CC_CLOCK_MIPS 0x00A0
|
||||
#define BCMA_CC_CLKDIV 0x00A4 /* Rev >= 3 only */
|
||||
#define BCMA_CC_CLKDIV_SFLASH 0x0F000000
|
||||
#define BCMA_CC_CLKDIV_SFLASH_SHIFT 24
|
||||
#define BCMA_CC_CLKDIV_OTP 0x000F0000
|
||||
#define BCMA_CC_CLKDIV_OTP_SHIFT 16
|
||||
#define BCMA_CC_CLKDIV_JTAG 0x00000F00
|
||||
#define BCMA_CC_CLKDIV_JTAG_SHIFT 8
|
||||
#define BCMA_CC_CLKDIV_UART 0x000000FF
|
||||
#define BCMA_CC_CAP_EXT 0x00AC /* Capabilities */
|
||||
#define BCMA_CC_PLLONDELAY 0x00B0 /* Rev >= 4 only */
|
||||
#define BCMA_CC_FREFSELDELAY 0x00B4 /* Rev >= 4 only */
|
||||
#define BCMA_CC_SLOWCLKCTL 0x00B8 /* 6 <= Rev <= 9 only */
|
||||
#define BCMA_CC_SLOWCLKCTL_SRC 0x00000007 /* slow clock source mask */
|
||||
#define BCMA_CC_SLOWCLKCTL_SRC_LPO 0x00000000 /* source of slow clock is LPO */
|
||||
#define BCMA_CC_SLOWCLKCTL_SRC_XTAL 0x00000001 /* source of slow clock is crystal */
|
||||
#define BCMA_CC_SLOECLKCTL_SRC_PCI 0x00000002 /* source of slow clock is PCI */
|
||||
#define BCMA_CC_SLOWCLKCTL_LPOFREQ 0x00000200 /* LPOFreqSel, 1: 160Khz, 0: 32KHz */
|
||||
#define BCMA_CC_SLOWCLKCTL_LPOPD 0x00000400 /* LPOPowerDown, 1: LPO is disabled, 0: LPO is enabled */
|
||||
#define BCMA_CC_SLOWCLKCTL_FSLOW 0x00000800 /* ForceSlowClk, 1: sb/cores running on slow clock, 0: power logic control */
|
||||
#define BCMA_CC_SLOWCLKCTL_IPLL 0x00001000 /* IgnorePllOffReq, 1/0: power logic ignores/honors PLL clock disable requests from core */
|
||||
#define BCMA_CC_SLOWCLKCTL_ENXTAL 0x00002000 /* XtalControlEn, 1/0: power logic does/doesn't disable crystal when appropriate */
|
||||
#define BCMA_CC_SLOWCLKCTL_XTALPU 0x00004000 /* XtalPU (RO), 1/0: crystal running/disabled */
|
||||
#define BCMA_CC_SLOWCLKCTL_CLKDIV 0xFFFF0000 /* ClockDivider (SlowClk = 1/(4+divisor)) */
|
||||
#define BCMA_CC_SLOWCLKCTL_CLKDIV_SHIFT 16
|
||||
#define BCMA_CC_SYSCLKCTL 0x00C0 /* Rev >= 3 only */
|
||||
#define BCMA_CC_SYSCLKCTL_IDLPEN 0x00000001 /* ILPen: Enable Idle Low Power */
|
||||
#define BCMA_CC_SYSCLKCTL_ALPEN 0x00000002 /* ALPen: Enable Active Low Power */
|
||||
#define BCMA_CC_SYSCLKCTL_PLLEN 0x00000004 /* ForcePLLOn */
|
||||
#define BCMA_CC_SYSCLKCTL_FORCEALP 0x00000008 /* Force ALP (or HT if ALPen is not set */
|
||||
#define BCMA_CC_SYSCLKCTL_FORCEHT 0x00000010 /* Force HT */
|
||||
#define BCMA_CC_SYSCLKCTL_CLKDIV 0xFFFF0000 /* ClkDiv (ILP = 1/(4+divisor)) */
|
||||
#define BCMA_CC_SYSCLKCTL_CLKDIV_SHIFT 16
|
||||
#define BCMA_CC_CLKSTSTR 0x00C4 /* Rev >= 3 only */
|
||||
#define BCMA_CC_EROM 0x00FC
|
||||
#define BCMA_CC_PCMCIA_CFG 0x0100
|
||||
#define BCMA_CC_PCMCIA_MEMWAIT 0x0104
|
||||
#define BCMA_CC_PCMCIA_ATTRWAIT 0x0108
|
||||
#define BCMA_CC_PCMCIA_IOWAIT 0x010C
|
||||
#define BCMA_CC_IDE_CFG 0x0110
|
||||
#define BCMA_CC_IDE_MEMWAIT 0x0114
|
||||
#define BCMA_CC_IDE_ATTRWAIT 0x0118
|
||||
#define BCMA_CC_IDE_IOWAIT 0x011C
|
||||
#define BCMA_CC_PROG_CFG 0x0120
|
||||
#define BCMA_CC_PROG_WAITCNT 0x0124
|
||||
#define BCMA_CC_FLASH_CFG 0x0128
|
||||
#define BCMA_CC_FLASH_WAITCNT 0x012C
|
||||
#define BCMA_CC_CLKCTLST 0x01E0 /* Clock control and status (rev >= 20) */
|
||||
#define BCMA_CC_CLKCTLST_FORCEALP 0x00000001 /* Force ALP request */
|
||||
#define BCMA_CC_CLKCTLST_FORCEHT 0x00000002 /* Force HT request */
|
||||
#define BCMA_CC_CLKCTLST_FORCEILP 0x00000004 /* Force ILP request */
|
||||
#define BCMA_CC_CLKCTLST_HAVEALPREQ 0x00000008 /* ALP available request */
|
||||
#define BCMA_CC_CLKCTLST_HAVEHTREQ 0x00000010 /* HT available request */
|
||||
#define BCMA_CC_CLKCTLST_HWCROFF 0x00000020 /* Force HW clock request off */
|
||||
#define BCMA_CC_CLKCTLST_HAVEHT 0x00010000 /* HT available */
|
||||
#define BCMA_CC_CLKCTLST_HAVEALP 0x00020000 /* APL available */
|
||||
#define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */
|
||||
#define BCMA_CC_UART0_DATA 0x0300
|
||||
#define BCMA_CC_UART0_IMR 0x0304
|
||||
#define BCMA_CC_UART0_FCR 0x0308
|
||||
#define BCMA_CC_UART0_LCR 0x030C
|
||||
#define BCMA_CC_UART0_MCR 0x0310
|
||||
#define BCMA_CC_UART0_LSR 0x0314
|
||||
#define BCMA_CC_UART0_MSR 0x0318
|
||||
#define BCMA_CC_UART0_SCRATCH 0x031C
|
||||
#define BCMA_CC_UART1_DATA 0x0400
|
||||
#define BCMA_CC_UART1_IMR 0x0404
|
||||
#define BCMA_CC_UART1_FCR 0x0408
|
||||
#define BCMA_CC_UART1_LCR 0x040C
|
||||
#define BCMA_CC_UART1_MCR 0x0410
|
||||
#define BCMA_CC_UART1_LSR 0x0414
|
||||
#define BCMA_CC_UART1_MSR 0x0418
|
||||
#define BCMA_CC_UART1_SCRATCH 0x041C
|
||||
/* PMU registers (rev >= 20) */
|
||||
#define BCMA_CC_PMU_CTL 0x0600 /* PMU control */
|
||||
#define BCMA_CC_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */
|
||||
#define BCMA_CC_PMU_CTL_ILP_DIV_SHIFT 16
|
||||
#define BCMA_CC_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */
|
||||
#define BCMA_CC_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */
|
||||
#define BCMA_CC_PMU_CTL_ALPREQEN 0x00000080 /* ALP req enable */
|
||||
#define BCMA_CC_PMU_CTL_XTALFREQ 0x0000007C /* Crystal freq */
|
||||
#define BCMA_CC_PMU_CTL_XTALFREQ_SHIFT 2
|
||||
#define BCMA_CC_PMU_CTL_ILPDIVEN 0x00000002 /* ILP div enable */
|
||||
#define BCMA_CC_PMU_CTL_LPOSEL 0x00000001 /* LPO sel */
|
||||
#define BCMA_CC_PMU_CAP 0x0604 /* PMU capabilities */
|
||||
#define BCMA_CC_PMU_CAP_REVISION 0x000000FF /* Revision mask */
|
||||
#define BCMA_CC_PMU_STAT 0x0608 /* PMU status */
|
||||
#define BCMA_CC_PMU_STAT_INTPEND 0x00000040 /* Interrupt pending */
|
||||
#define BCMA_CC_PMU_STAT_SBCLKST 0x00000030 /* Backplane clock status? */
|
||||
#define BCMA_CC_PMU_STAT_HAVEALP 0x00000008 /* ALP available */
|
||||
#define BCMA_CC_PMU_STAT_HAVEHT 0x00000004 /* HT available */
|
||||
#define BCMA_CC_PMU_STAT_RESINIT 0x00000003 /* Res init */
|
||||
#define BCMA_CC_PMU_RES_STAT 0x060C /* PMU res status */
|
||||
#define BCMA_CC_PMU_RES_PEND 0x0610 /* PMU res pending */
|
||||
#define BCMA_CC_PMU_TIMER 0x0614 /* PMU timer */
|
||||
#define BCMA_CC_PMU_MINRES_MSK 0x0618 /* PMU min res mask */
|
||||
#define BCMA_CC_PMU_MAXRES_MSK 0x061C /* PMU max res mask */
|
||||
#define BCMA_CC_PMU_RES_TABSEL 0x0620 /* PMU res table sel */
|
||||
#define BCMA_CC_PMU_RES_DEPMSK 0x0624 /* PMU res dep mask */
|
||||
#define BCMA_CC_PMU_RES_UPDNTM 0x0628 /* PMU res updown timer */
|
||||
#define BCMA_CC_PMU_RES_TIMER 0x062C /* PMU res timer */
|
||||
#define BCMA_CC_PMU_CLKSTRETCH 0x0630 /* PMU clockstretch */
|
||||
#define BCMA_CC_PMU_WATCHDOG 0x0634 /* PMU watchdog */
|
||||
#define BCMA_CC_PMU_RES_REQTS 0x0640 /* PMU res req timer sel */
|
||||
#define BCMA_CC_PMU_RES_REQT 0x0644 /* PMU res req timer */
|
||||
#define BCMA_CC_PMU_RES_REQM 0x0648 /* PMU res req mask */
|
||||
#define BCMA_CC_CHIPCTL_ADDR 0x0650
|
||||
#define BCMA_CC_CHIPCTL_DATA 0x0654
|
||||
#define BCMA_CC_REGCTL_ADDR 0x0658
|
||||
#define BCMA_CC_REGCTL_DATA 0x065C
|
||||
#define BCMA_CC_PLLCTL_ADDR 0x0660
|
||||
#define BCMA_CC_PLLCTL_DATA 0x0664
|
||||
|
||||
/* Data for the PMU, if available.
|
||||
* Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
|
||||
*/
|
||||
struct bcma_chipcommon_pmu {
|
||||
u8 rev; /* PMU revision */
|
||||
u32 crystalfreq; /* The active crystal frequency (in kHz) */
|
||||
};
|
||||
|
||||
struct bcma_drv_cc {
|
||||
struct bcma_device *core;
|
||||
u32 status;
|
||||
u32 capabilities;
|
||||
u32 capabilities_ext;
|
||||
/* Fast Powerup Delay constant */
|
||||
u16 fast_pwrup_delay;
|
||||
struct bcma_chipcommon_pmu pmu;
|
||||
};
|
||||
|
||||
/* Register access */
|
||||
#define bcma_cc_read32(cc, offset) \
|
||||
bcma_read32((cc)->core, offset)
|
||||
#define bcma_cc_write32(cc, offset, val) \
|
||||
bcma_write32((cc)->core, offset, val)
|
||||
|
||||
#define bcma_cc_mask32(cc, offset, mask) \
|
||||
bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) & (mask))
|
||||
#define bcma_cc_set32(cc, offset, set) \
|
||||
bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) | (set))
|
||||
#define bcma_cc_maskset32(cc, offset, mask, set) \
|
||||
bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set))
|
||||
|
||||
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);
|
||||
|
||||
extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc,
|
||||
u32 ticks);
|
||||
|
||||
void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
|
||||
u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask);
|
||||
|
||||
/* Chipcommon GPIO pin access. */
|
||||
u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask);
|
||||
u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
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);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_CC_H_ */
|
||||
89
include/linux/bcma/bcma_driver_pci.h
Normal file
89
include/linux/bcma/bcma_driver_pci.h
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
#ifndef LINUX_BCMA_DRIVER_PCI_H_
|
||||
#define LINUX_BCMA_DRIVER_PCI_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct pci_dev;
|
||||
|
||||
/** PCI core registers. **/
|
||||
#define BCMA_CORE_PCI_CTL 0x0000 /* PCI Control */
|
||||
#define BCMA_CORE_PCI_CTL_RST_OE 0x00000001 /* PCI_RESET Output Enable */
|
||||
#define BCMA_CORE_PCI_CTL_RST 0x00000002 /* PCI_RESET driven out to pin */
|
||||
#define BCMA_CORE_PCI_CTL_CLK_OE 0x00000004 /* Clock gate Output Enable */
|
||||
#define BCMA_CORE_PCI_CTL_CLK 0x00000008 /* Gate for clock driven out to pin */
|
||||
#define BCMA_CORE_PCI_ARBCTL 0x0010 /* PCI Arbiter Control */
|
||||
#define BCMA_CORE_PCI_ARBCTL_INTERN 0x00000001 /* Use internal arbiter */
|
||||
#define BCMA_CORE_PCI_ARBCTL_EXTERN 0x00000002 /* Use external arbiter */
|
||||
#define BCMA_CORE_PCI_ARBCTL_PARKID 0x00000006 /* Mask, selects which agent is parked on an idle bus */
|
||||
#define BCMA_CORE_PCI_ARBCTL_PARKID_LAST 0x00000000 /* Last requestor */
|
||||
#define BCMA_CORE_PCI_ARBCTL_PARKID_4710 0x00000002 /* 4710 */
|
||||
#define BCMA_CORE_PCI_ARBCTL_PARKID_EXT0 0x00000004 /* External requestor 0 */
|
||||
#define BCMA_CORE_PCI_ARBCTL_PARKID_EXT1 0x00000006 /* External requestor 1 */
|
||||
#define BCMA_CORE_PCI_ISTAT 0x0020 /* Interrupt status */
|
||||
#define BCMA_CORE_PCI_ISTAT_INTA 0x00000001 /* PCI INTA# */
|
||||
#define BCMA_CORE_PCI_ISTAT_INTB 0x00000002 /* PCI INTB# */
|
||||
#define BCMA_CORE_PCI_ISTAT_SERR 0x00000004 /* PCI SERR# (write to clear) */
|
||||
#define BCMA_CORE_PCI_ISTAT_PERR 0x00000008 /* PCI PERR# (write to clear) */
|
||||
#define BCMA_CORE_PCI_ISTAT_PME 0x00000010 /* PCI PME# */
|
||||
#define BCMA_CORE_PCI_IMASK 0x0024 /* Interrupt mask */
|
||||
#define BCMA_CORE_PCI_IMASK_INTA 0x00000001 /* PCI INTA# */
|
||||
#define BCMA_CORE_PCI_IMASK_INTB 0x00000002 /* PCI INTB# */
|
||||
#define BCMA_CORE_PCI_IMASK_SERR 0x00000004 /* PCI SERR# */
|
||||
#define BCMA_CORE_PCI_IMASK_PERR 0x00000008 /* PCI PERR# */
|
||||
#define BCMA_CORE_PCI_IMASK_PME 0x00000010 /* PCI PME# */
|
||||
#define BCMA_CORE_PCI_MBOX 0x0028 /* Backplane to PCI Mailbox */
|
||||
#define BCMA_CORE_PCI_MBOX_F0_0 0x00000100 /* PCI function 0, INT 0 */
|
||||
#define BCMA_CORE_PCI_MBOX_F0_1 0x00000200 /* PCI function 0, INT 1 */
|
||||
#define BCMA_CORE_PCI_MBOX_F1_0 0x00000400 /* PCI function 1, INT 0 */
|
||||
#define BCMA_CORE_PCI_MBOX_F1_1 0x00000800 /* PCI function 1, INT 1 */
|
||||
#define BCMA_CORE_PCI_MBOX_F2_0 0x00001000 /* PCI function 2, INT 0 */
|
||||
#define BCMA_CORE_PCI_MBOX_F2_1 0x00002000 /* PCI function 2, INT 1 */
|
||||
#define BCMA_CORE_PCI_MBOX_F3_0 0x00004000 /* PCI function 3, INT 0 */
|
||||
#define BCMA_CORE_PCI_MBOX_F3_1 0x00008000 /* PCI function 3, INT 1 */
|
||||
#define BCMA_CORE_PCI_BCAST_ADDR 0x0050 /* Backplane Broadcast Address */
|
||||
#define BCMA_CORE_PCI_BCAST_ADDR_MASK 0x000000FF
|
||||
#define BCMA_CORE_PCI_BCAST_DATA 0x0054 /* Backplane Broadcast Data */
|
||||
#define BCMA_CORE_PCI_GPIO_IN 0x0060 /* rev >= 2 only */
|
||||
#define BCMA_CORE_PCI_GPIO_OUT 0x0064 /* rev >= 2 only */
|
||||
#define BCMA_CORE_PCI_GPIO_ENABLE 0x0068 /* rev >= 2 only */
|
||||
#define BCMA_CORE_PCI_GPIO_CTL 0x006C /* rev >= 2 only */
|
||||
#define BCMA_CORE_PCI_SBTOPCI0 0x0100 /* Backplane to PCI translation 0 (sbtopci0) */
|
||||
#define BCMA_CORE_PCI_SBTOPCI0_MASK 0xFC000000
|
||||
#define BCMA_CORE_PCI_SBTOPCI1 0x0104 /* Backplane to PCI translation 1 (sbtopci1) */
|
||||
#define BCMA_CORE_PCI_SBTOPCI1_MASK 0xFC000000
|
||||
#define BCMA_CORE_PCI_SBTOPCI2 0x0108 /* Backplane to PCI translation 2 (sbtopci2) */
|
||||
#define BCMA_CORE_PCI_SBTOPCI2_MASK 0xC0000000
|
||||
#define BCMA_CORE_PCI_PCICFG0 0x0400 /* PCI config space 0 (rev >= 8) */
|
||||
#define BCMA_CORE_PCI_PCICFG1 0x0500 /* PCI config space 1 (rev >= 8) */
|
||||
#define BCMA_CORE_PCI_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */
|
||||
#define BCMA_CORE_PCI_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */
|
||||
#define BCMA_CORE_PCI_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */
|
||||
|
||||
/* SBtoPCIx */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000
|
||||
#define BCMA_CORE_PCI_SBTOPCI_IO 0x00000001
|
||||
#define BCMA_CORE_PCI_SBTOPCI_CFG0 0x00000002
|
||||
#define BCMA_CORE_PCI_SBTOPCI_CFG1 0x00000003
|
||||
#define BCMA_CORE_PCI_SBTOPCI_PREF 0x00000004 /* Prefetch enable */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_BURST 0x00000008 /* Burst enable */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_MRM 0x00000020 /* Memory Read Multiple */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_RC 0x00000030 /* Read Command mask (rev >= 11) */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_RC_READ 0x00000000 /* Memory read */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_RC_READL 0x00000010 /* Memory read line */
|
||||
#define BCMA_CORE_PCI_SBTOPCI_RC_READM 0x00000020 /* Memory read multiple */
|
||||
|
||||
/* PCIcore specific boardflags */
|
||||
#define BCMA_CORE_PCI_BFL_NOPCI 0x00000400 /* Board leaves PCI floating */
|
||||
|
||||
struct bcma_drv_pci {
|
||||
struct bcma_device *core;
|
||||
u8 setup_done:1;
|
||||
};
|
||||
|
||||
/* Register access */
|
||||
#define pcicore_read32(pc, offset) bcma_read32((pc)->core, offset)
|
||||
#define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val)
|
||||
|
||||
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_PCI_H_ */
|
||||
34
include/linux/bcma/bcma_regs.h
Normal file
34
include/linux/bcma/bcma_regs.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#ifndef LINUX_BCMA_REGS_H_
|
||||
#define LINUX_BCMA_REGS_H_
|
||||
|
||||
/* Agent registers (common for every core) */
|
||||
#define BCMA_IOCTL 0x0408
|
||||
#define BCMA_IOCTL_CLK 0x0001
|
||||
#define BCMA_IOCTL_FGC 0x0002
|
||||
#define BCMA_IOCTL_CORE_BITS 0x3FFC
|
||||
#define BCMA_IOCTL_PME_EN 0x4000
|
||||
#define BCMA_IOCTL_BIST_EN 0x8000
|
||||
#define BCMA_RESET_CTL 0x0800
|
||||
#define BCMA_RESET_CTL_RESET 0x0001
|
||||
|
||||
/* BCMA PCI config space registers. */
|
||||
#define BCMA_PCI_PMCSR 0x44
|
||||
#define BCMA_PCI_PE 0x100
|
||||
#define BCMA_PCI_BAR0_WIN 0x80 /* Backplane address space 0 */
|
||||
#define BCMA_PCI_BAR1_WIN 0x84 /* Backplane address space 1 */
|
||||
#define BCMA_PCI_SPROMCTL 0x88 /* SPROM control */
|
||||
#define BCMA_PCI_SPROMCTL_WE 0x10 /* SPROM write enable */
|
||||
#define BCMA_PCI_BAR1_CONTROL 0x8c /* Address space 1 burst control */
|
||||
#define BCMA_PCI_IRQS 0x90 /* PCI interrupts */
|
||||
#define BCMA_PCI_IRQMASK 0x94 /* PCI IRQ control and mask (pcirev >= 6 only) */
|
||||
#define BCMA_PCI_BACKPLANE_IRQS 0x98 /* Backplane Interrupts */
|
||||
#define BCMA_PCI_BAR0_WIN2 0xAC
|
||||
#define BCMA_PCI_GPIO_IN 0xB0 /* GPIO Input (pcirev >= 3 only) */
|
||||
#define BCMA_PCI_GPIO_OUT 0xB4 /* GPIO Output (pcirev >= 3 only) */
|
||||
#define BCMA_PCI_GPIO_OUT_ENABLE 0xB8 /* GPIO Output Enable/Disable (pcirev >= 3 only) */
|
||||
#define BCMA_PCI_GPIO_SCS 0x10 /* PCI config space bit 4 for 4306c0 slow clock source */
|
||||
#define BCMA_PCI_GPIO_HWRAD 0x20 /* PCI config space GPIO 13 for hw radio disable */
|
||||
#define BCMA_PCI_GPIO_XTAL 0x40 /* PCI config space GPIO 14 for Xtal powerup */
|
||||
#define BCMA_PCI_GPIO_PLL 0x80 /* PCI config space GPIO 15 for PLL powerdown */
|
||||
|
||||
#endif /* LINUX_BCMA_REGS_H_ */
|
||||
|
|
@ -60,10 +60,6 @@ struct linux_binprm {
|
|||
unsigned long loader, exec;
|
||||
};
|
||||
|
||||
extern void acct_arg_size(struct linux_binprm *bprm, unsigned long pages);
|
||||
extern struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
|
||||
int write);
|
||||
|
||||
#define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
|
||||
#define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT)
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ extern void *__alloc_bootmem_low_node(pg_data_t *pgdat,
|
|||
__alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_node(pgdat, x) \
|
||||
__alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_node_nopanic(pgdat, x) \
|
||||
__alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_pages_node(pgdat, x) \
|
||||
__alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_pages_node_nopanic(pgdat, x) \
|
||||
|
|
|
|||
9
include/linux/bsearch.h
Normal file
9
include/linux/bsearch.h
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef _LINUX_BSEARCH_H
|
||||
#define _LINUX_BSEARCH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
void *bsearch(const void *key, const void *base, size_t num, size_t size,
|
||||
int (*cmp)(const void *key, const void *elt));
|
||||
|
||||
#endif /* _LINUX_BSEARCH_H */
|
||||
|
|
@ -44,8 +44,8 @@ struct can_proto {
|
|||
|
||||
/* function prototypes for the CAN networklayer core (af_can.c) */
|
||||
|
||||
extern int can_proto_register(struct can_proto *cp);
|
||||
extern void can_proto_unregister(struct can_proto *cp);
|
||||
extern int can_proto_register(const struct can_proto *cp);
|
||||
extern void can_proto_unregister(const struct can_proto *cp);
|
||||
|
||||
extern int can_rx_register(struct net_device *dev, canid_t can_id,
|
||||
canid_t mask,
|
||||
|
|
|
|||
|
|
@ -355,7 +355,12 @@ struct cpu_vfs_cap_data {
|
|||
|
||||
#define CAP_SYSLOG 34
|
||||
|
||||
#define CAP_LAST_CAP CAP_SYSLOG
|
||||
/* Allow triggering something that will wake the system */
|
||||
|
||||
#define CAP_WAKE_ALARM 35
|
||||
|
||||
|
||||
#define CAP_LAST_CAP CAP_WAKE_ALARM
|
||||
|
||||
#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
|
||||
|
||||
|
|
@ -546,18 +551,7 @@ extern bool has_capability_noaudit(struct task_struct *t, int cap);
|
|||
extern bool capable(int cap);
|
||||
extern bool ns_capable(struct user_namespace *ns, int cap);
|
||||
extern bool task_ns_capable(struct task_struct *t, int cap);
|
||||
|
||||
/**
|
||||
* nsown_capable - Check superior capability to one's own user_ns
|
||||
* @cap: The capability in question
|
||||
*
|
||||
* Return true if the current task has the given superior capability
|
||||
* targeted at its own user namespace.
|
||||
*/
|
||||
static inline bool nsown_capable(int cap)
|
||||
{
|
||||
return ns_capable(current_user_ns(), cap);
|
||||
}
|
||||
extern bool nsown_capable(int cap);
|
||||
|
||||
/* audit system wants to get cap info from files as well */
|
||||
extern int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data *cpu_caps);
|
||||
|
|
|
|||
|
|
@ -56,46 +56,52 @@ enum clock_event_nofitiers {
|
|||
|
||||
/**
|
||||
* struct clock_event_device - clock event device descriptor
|
||||
* @name: ptr to clock event name
|
||||
* @features: features
|
||||
* @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
|
||||
* @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
|
||||
* @mult: nanosecond to cycles multiplier
|
||||
* @shift: nanoseconds to cycles divisor (power of two)
|
||||
* @mode: operating mode assigned by the management code
|
||||
* @features: features
|
||||
* @retries: number of forced programming retries
|
||||
* @set_mode: set mode function
|
||||
* @broadcast: function to broadcast events
|
||||
* @min_delta_ticks: minimum delta value in ticks stored for reconfiguration
|
||||
* @max_delta_ticks: maximum delta value in ticks stored for reconfiguration
|
||||
* @name: ptr to clock event name
|
||||
* @rating: variable to rate clock event devices
|
||||
* @irq: IRQ number (only for non CPU local devices)
|
||||
* @cpumask: cpumask to indicate for which CPUs this device works
|
||||
* @set_next_event: set next event function
|
||||
* @set_mode: set mode function
|
||||
* @event_handler: Assigned by the framework to be called by the low
|
||||
* level handler of the event source
|
||||
* @broadcast: function to broadcast events
|
||||
* @list: list head for the management code
|
||||
* @mode: operating mode assigned by the management code
|
||||
* @next_event: local storage for the next event in oneshot mode
|
||||
* @retries: number of forced programming retries
|
||||
*/
|
||||
struct clock_event_device {
|
||||
const char *name;
|
||||
unsigned int features;
|
||||
void (*event_handler)(struct clock_event_device *);
|
||||
int (*set_next_event)(unsigned long evt,
|
||||
struct clock_event_device *);
|
||||
ktime_t next_event;
|
||||
u64 max_delta_ns;
|
||||
u64 min_delta_ns;
|
||||
u32 mult;
|
||||
u32 shift;
|
||||
enum clock_event_mode mode;
|
||||
unsigned int features;
|
||||
unsigned long retries;
|
||||
|
||||
void (*broadcast)(const struct cpumask *mask);
|
||||
void (*set_mode)(enum clock_event_mode mode,
|
||||
struct clock_event_device *);
|
||||
unsigned long min_delta_ticks;
|
||||
unsigned long max_delta_ticks;
|
||||
|
||||
const char *name;
|
||||
int rating;
|
||||
int irq;
|
||||
const struct cpumask *cpumask;
|
||||
int (*set_next_event)(unsigned long evt,
|
||||
struct clock_event_device *);
|
||||
void (*set_mode)(enum clock_event_mode mode,
|
||||
struct clock_event_device *);
|
||||
void (*event_handler)(struct clock_event_device *);
|
||||
void (*broadcast)(const struct cpumask *mask);
|
||||
struct list_head list;
|
||||
enum clock_event_mode mode;
|
||||
ktime_t next_event;
|
||||
unsigned long retries;
|
||||
};
|
||||
} ____cacheline_aligned;
|
||||
|
||||
/*
|
||||
* Calculate a multiplication factor for scaled math, which is used to convert
|
||||
|
|
@ -122,6 +128,12 @@ extern u64 clockevent_delta2ns(unsigned long latch,
|
|||
struct clock_event_device *evt);
|
||||
extern void clockevents_register_device(struct clock_event_device *dev);
|
||||
|
||||
extern void clockevents_config_and_register(struct clock_event_device *dev,
|
||||
u32 freq, unsigned long min_delta,
|
||||
unsigned long max_delta);
|
||||
|
||||
extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq);
|
||||
|
||||
extern void clockevents_exchange_device(struct clock_event_device *old,
|
||||
struct clock_event_device *new);
|
||||
extern void clockevents_set_mode(struct clock_event_device *dev,
|
||||
|
|
|
|||
|
|
@ -159,42 +159,38 @@ extern u64 timecounter_cyc2time(struct timecounter *tc,
|
|||
*/
|
||||
struct clocksource {
|
||||
/*
|
||||
* First part of structure is read mostly
|
||||
* Hotpath data, fits in a single cache line when the
|
||||
* clocksource itself is cacheline aligned.
|
||||
*/
|
||||
char *name;
|
||||
struct list_head list;
|
||||
int rating;
|
||||
cycle_t (*read)(struct clocksource *cs);
|
||||
int (*enable)(struct clocksource *cs);
|
||||
void (*disable)(struct clocksource *cs);
|
||||
cycle_t cycle_last;
|
||||
cycle_t mask;
|
||||
u32 mult;
|
||||
u32 shift;
|
||||
u64 max_idle_ns;
|
||||
unsigned long flags;
|
||||
cycle_t (*vread)(void);
|
||||
void (*suspend)(struct clocksource *cs);
|
||||
void (*resume)(struct clocksource *cs);
|
||||
|
||||
#ifdef CONFIG_IA64
|
||||
void *fsys_mmio; /* used by fsyscall asm code */
|
||||
#define CLKSRC_FSYS_MMIO_SET(mmio, addr) ((mmio) = (addr))
|
||||
#else
|
||||
#define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Second part is written at each timer interrupt
|
||||
* Keep it in a different cache line to dirty no
|
||||
* more than one cache line.
|
||||
*/
|
||||
cycle_t cycle_last ____cacheline_aligned_in_smp;
|
||||
const char *name;
|
||||
struct list_head list;
|
||||
int rating;
|
||||
cycle_t (*vread)(void);
|
||||
int (*enable)(struct clocksource *cs);
|
||||
void (*disable)(struct clocksource *cs);
|
||||
unsigned long flags;
|
||||
void (*suspend)(struct clocksource *cs);
|
||||
void (*resume)(struct clocksource *cs);
|
||||
|
||||
#ifdef CONFIG_CLOCKSOURCE_WATCHDOG
|
||||
/* Watchdog related data, used by the framework */
|
||||
struct list_head wd_list;
|
||||
cycle_t wd_last;
|
||||
#endif
|
||||
};
|
||||
} ____cacheline_aligned;
|
||||
|
||||
/*
|
||||
* Clock source flags bits::
|
||||
|
|
@ -341,4 +337,14 @@ static inline void update_vsyscall_tz(void)
|
|||
|
||||
extern void timekeeping_notify(struct clocksource *clock);
|
||||
|
||||
extern cycle_t clocksource_mmio_readl_up(struct clocksource *);
|
||||
extern cycle_t clocksource_mmio_readl_down(struct clocksource *);
|
||||
extern cycle_t clocksource_mmio_readw_up(struct clocksource *);
|
||||
extern cycle_t clocksource_mmio_readw_down(struct clocksource *);
|
||||
|
||||
extern int clocksource_mmio_init(void __iomem *, const char *,
|
||||
unsigned long, int, unsigned, cycle_t (*)(struct clocksource *));
|
||||
|
||||
extern int clocksource_i8253_init(void);
|
||||
|
||||
#endif /* _LINUX_CLOCKSOURCE_H */
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2001 Russell King
|
||||
* (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
|
|
@ -56,9 +56,9 @@ static inline int cpufreq_unregister_notifier(struct notifier_block *nb,
|
|||
#define CPUFREQ_POLICY_POWERSAVE (1)
|
||||
#define CPUFREQ_POLICY_PERFORMANCE (2)
|
||||
|
||||
/* Frequency values here are CPU kHz so that hardware which doesn't run
|
||||
* with some frequencies can complain without having to guess what per
|
||||
* cent / per mille means.
|
||||
/* Frequency values here are CPU kHz so that hardware which doesn't run
|
||||
* with some frequencies can complain without having to guess what per
|
||||
* cent / per mille means.
|
||||
* Maximum transition latency is in nanoseconds - if it's unknown,
|
||||
* CPUFREQ_ETERNAL shall be used.
|
||||
*/
|
||||
|
|
@ -72,13 +72,15 @@ extern struct kobject *cpufreq_global_kobject;
|
|||
struct cpufreq_cpuinfo {
|
||||
unsigned int max_freq;
|
||||
unsigned int min_freq;
|
||||
unsigned int transition_latency; /* in 10^(-9) s = nanoseconds */
|
||||
|
||||
/* in 10^(-9) s = nanoseconds */
|
||||
unsigned int transition_latency;
|
||||
};
|
||||
|
||||
struct cpufreq_real_policy {
|
||||
unsigned int min; /* in kHz */
|
||||
unsigned int max; /* in kHz */
|
||||
unsigned int policy; /* see above */
|
||||
unsigned int policy; /* see above */
|
||||
struct cpufreq_governor *governor; /* see below */
|
||||
};
|
||||
|
||||
|
|
@ -94,7 +96,7 @@ struct cpufreq_policy {
|
|||
unsigned int max; /* in kHz */
|
||||
unsigned int cur; /* in kHz, only needed if cpufreq
|
||||
* governors are used */
|
||||
unsigned int policy; /* see above */
|
||||
unsigned int policy; /* see above */
|
||||
struct cpufreq_governor *governor; /* see below */
|
||||
|
||||
struct work_struct update; /* if update_policy() needs to be
|
||||
|
|
@ -167,11 +169,11 @@ static inline unsigned long cpufreq_scale(unsigned long old, u_int div, u_int mu
|
|||
|
||||
struct cpufreq_governor {
|
||||
char name[CPUFREQ_NAME_LEN];
|
||||
int (*governor) (struct cpufreq_policy *policy,
|
||||
int (*governor) (struct cpufreq_policy *policy,
|
||||
unsigned int event);
|
||||
ssize_t (*show_setspeed) (struct cpufreq_policy *policy,
|
||||
char *buf);
|
||||
int (*store_setspeed) (struct cpufreq_policy *policy,
|
||||
int (*store_setspeed) (struct cpufreq_policy *policy,
|
||||
unsigned int freq);
|
||||
unsigned int max_transition_latency; /* HW must be able to switch to
|
||||
next freq faster than this value in nano secs or we
|
||||
|
|
@ -180,7 +182,8 @@ struct cpufreq_governor {
|
|||
struct module *owner;
|
||||
};
|
||||
|
||||
/* pass a target to the cpufreq driver
|
||||
/*
|
||||
* Pass a target to the cpufreq driver.
|
||||
*/
|
||||
extern int cpufreq_driver_target(struct cpufreq_policy *policy,
|
||||
unsigned int target_freq,
|
||||
|
|
@ -237,9 +240,9 @@ struct cpufreq_driver {
|
|||
|
||||
/* flags */
|
||||
|
||||
#define CPUFREQ_STICKY 0x01 /* the driver isn't removed even if
|
||||
#define CPUFREQ_STICKY 0x01 /* the driver isn't removed even if
|
||||
* all ->init() calls failed */
|
||||
#define CPUFREQ_CONST_LOOPS 0x02 /* loops_per_jiffy or other kernel
|
||||
#define CPUFREQ_CONST_LOOPS 0x02 /* loops_per_jiffy or other kernel
|
||||
* "constants" aren't affected by
|
||||
* frequency transitions */
|
||||
#define CPUFREQ_PM_NO_WARN 0x04 /* don't warn on suspend/resume speed
|
||||
|
|
@ -252,7 +255,7 @@ int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
|
|||
void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state);
|
||||
|
||||
|
||||
static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned int min, unsigned int max)
|
||||
static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned int min, unsigned int max)
|
||||
{
|
||||
if (policy->min < min)
|
||||
policy->min = min;
|
||||
|
|
@ -386,34 +389,15 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
|
|||
/* the following 3 funtions are for cpufreq core use only */
|
||||
struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);
|
||||
struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu);
|
||||
void cpufreq_cpu_put (struct cpufreq_policy *data);
|
||||
void cpufreq_cpu_put(struct cpufreq_policy *data);
|
||||
|
||||
/* the following are really really optional */
|
||||
extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
|
||||
|
||||
void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table,
|
||||
void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table,
|
||||
unsigned int cpu);
|
||||
|
||||
void cpufreq_frequency_table_put_attr(unsigned int cpu);
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* UNIFIED DEBUG HELPERS *
|
||||
*********************************************************************/
|
||||
|
||||
#define CPUFREQ_DEBUG_CORE 1
|
||||
#define CPUFREQ_DEBUG_DRIVER 2
|
||||
#define CPUFREQ_DEBUG_GOVERNOR 4
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ_DEBUG
|
||||
|
||||
extern void cpufreq_debug_printk(unsigned int type, const char *prefix,
|
||||
const char *fmt, ...);
|
||||
|
||||
#else
|
||||
|
||||
#define cpufreq_debug_printk(msg...) do { } while(0)
|
||||
|
||||
#endif /* CONFIG_CPU_FREQ_DEBUG */
|
||||
|
||||
#endif /* _LINUX_CPUFREQ_H */
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ struct cred {
|
|||
void *security; /* subjective LSM security */
|
||||
#endif
|
||||
struct user_struct *user; /* real user ID subscription */
|
||||
struct user_namespace *user_ns; /* cached user->user_ns */
|
||||
struct group_info *group_info; /* supplementary groups for euid/fsgid */
|
||||
struct rcu_head rcu; /* RCU deletion hook */
|
||||
};
|
||||
|
|
@ -354,10 +355,15 @@ static inline void put_cred(const struct cred *_cred)
|
|||
#define current_fsgid() (current_cred_xxx(fsgid))
|
||||
#define current_cap() (current_cred_xxx(cap_effective))
|
||||
#define current_user() (current_cred_xxx(user))
|
||||
#define _current_user_ns() (current_cred_xxx(user)->user_ns)
|
||||
#define current_security() (current_cred_xxx(security))
|
||||
|
||||
extern struct user_namespace *current_user_ns(void);
|
||||
#ifdef CONFIG_USER_NS
|
||||
#define current_user_ns() (current_cred_xxx(user_ns))
|
||||
#else
|
||||
extern struct user_namespace init_user_ns;
|
||||
#define current_user_ns() (&init_user_ns)
|
||||
#endif
|
||||
|
||||
|
||||
#define current_uid_gid(_uid, _gid) \
|
||||
do { \
|
||||
|
|
|
|||
|
|
@ -47,6 +47,38 @@ extern int __must_check bus_create_file(struct bus_type *,
|
|||
struct bus_attribute *);
|
||||
extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
|
||||
|
||||
/**
|
||||
* struct bus_type - The bus type of the device
|
||||
*
|
||||
* @name: The name of the bus.
|
||||
* @bus_attrs: Default attributes of the bus.
|
||||
* @dev_attrs: Default attributes of the devices on the bus.
|
||||
* @drv_attrs: Default attributes of the device drivers on the bus.
|
||||
* @match: Called, perhaps multiple times, whenever a new device or driver
|
||||
* is added for this bus. It should return a nonzero value if the
|
||||
* given device can be handled by the given driver.
|
||||
* @uevent: Called when a device is added, removed, or a few other things
|
||||
* that generate uevents to add the environment variables.
|
||||
* @probe: Called when a new device or driver add to this bus, and callback
|
||||
* the specific driver's probe to initial the matched device.
|
||||
* @remove: Called when a device removed from this bus.
|
||||
* @shutdown: Called at shut-down time to quiesce the device.
|
||||
* @suspend: Called when a device on this bus wants to go to sleep mode.
|
||||
* @resume: Called to bring a device on this bus out of sleep mode.
|
||||
* @pm: Power management operations of this bus, callback the specific
|
||||
* device driver's pm-ops.
|
||||
* @p: The private data of the driver core, only the driver core can
|
||||
* touch this.
|
||||
*
|
||||
* A bus is a channel between the processor and one or more devices. For the
|
||||
* purposes of the device model, all devices are connected via a bus, even if
|
||||
* it is an internal, virtual, "platform" bus. Buses can plug into each other.
|
||||
* A USB controller is usually a PCI device, for example. The device model
|
||||
* represents the actual connections between buses and the devices they control.
|
||||
* A bus is represented by the bus_type structure. It contains the name, the
|
||||
* default attributes, the bus' methods, PM operations, and the driver core's
|
||||
* private data.
|
||||
*/
|
||||
struct bus_type {
|
||||
const char *name;
|
||||
struct bus_attribute *bus_attrs;
|
||||
|
|
@ -119,6 +151,37 @@ extern int bus_unregister_notifier(struct bus_type *bus,
|
|||
extern struct kset *bus_get_kset(struct bus_type *bus);
|
||||
extern struct klist *bus_get_device_klist(struct bus_type *bus);
|
||||
|
||||
/**
|
||||
* struct device_driver - The basic device driver structure
|
||||
* @name: Name of the device driver.
|
||||
* @bus: The bus which the device of this driver belongs to.
|
||||
* @owner: The module owner.
|
||||
* @mod_name: Used for built-in modules.
|
||||
* @suppress_bind_attrs: Disables bind/unbind via sysfs.
|
||||
* @of_match_table: The open firmware table.
|
||||
* @probe: Called to query the existence of a specific device,
|
||||
* whether this driver can work with it, and bind the driver
|
||||
* to a specific device.
|
||||
* @remove: Called when the device is removed from the system to
|
||||
* unbind a device from this driver.
|
||||
* @shutdown: Called at shut-down time to quiesce the device.
|
||||
* @suspend: Called to put the device to sleep mode. Usually to a
|
||||
* low power state.
|
||||
* @resume: Called to bring a device from sleep mode.
|
||||
* @groups: Default attributes that get created by the driver core
|
||||
* automatically.
|
||||
* @pm: Power management operations of the device which matched
|
||||
* this driver.
|
||||
* @p: Driver core's private data, no one other than the driver
|
||||
* core can touch this.
|
||||
*
|
||||
* The device driver-model tracks all of the drivers known to the system.
|
||||
* The main reason for this tracking is to enable the driver core to match
|
||||
* up drivers with new devices. Once drivers are known objects within the
|
||||
* system, however, a number of other things become possible. Device drivers
|
||||
* can export information and configuration variables that are independent
|
||||
* of any specific device.
|
||||
*/
|
||||
struct device_driver {
|
||||
const char *name;
|
||||
struct bus_type *bus;
|
||||
|
|
@ -185,8 +248,34 @@ struct device *driver_find_device(struct device_driver *drv,
|
|||
struct device *start, void *data,
|
||||
int (*match)(struct device *dev, void *data));
|
||||
|
||||
/*
|
||||
* device classes
|
||||
/**
|
||||
* struct class - device classes
|
||||
* @name: Name of the class.
|
||||
* @owner: The module owner.
|
||||
* @class_attrs: Default attributes of this class.
|
||||
* @dev_attrs: Default attributes of the devices belong to the class.
|
||||
* @dev_bin_attrs: Default binary attributes of the devices belong to the class.
|
||||
* @dev_kobj: The kobject that represents this class and links it into the hierarchy.
|
||||
* @dev_uevent: Called when a device is added, removed from this class, or a
|
||||
* few other things that generate uevents to add the environment
|
||||
* variables.
|
||||
* @devnode: Callback to provide the devtmpfs.
|
||||
* @class_release: Called to release this class.
|
||||
* @dev_release: Called to release the device.
|
||||
* @suspend: Used to put the device to sleep mode, usually to a low power
|
||||
* state.
|
||||
* @resume: Used to bring the device from the sleep mode.
|
||||
* @ns_type: Callbacks so sysfs can detemine namespaces.
|
||||
* @namespace: Namespace of the device belongs to this class.
|
||||
* @pm: The default device power management operations of this class.
|
||||
* @p: The private data of the driver core, no one other than the
|
||||
* driver core can touch this.
|
||||
*
|
||||
* A class is a higher-level view of a device that abstracts out low-level
|
||||
* implementation details. Drivers may see a SCSI disk or an ATA disk, but,
|
||||
* at the class level, they are all simply disks. Classes allow user space
|
||||
* to work with devices based on what they do, rather than how they are
|
||||
* connected or how they work.
|
||||
*/
|
||||
struct class {
|
||||
const char *name;
|
||||
|
|
@ -401,6 +490,65 @@ struct device_dma_parameters {
|
|||
unsigned long segment_boundary_mask;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct device - The basic device structure
|
||||
* @parent: The device's "parent" device, the device to which it is attached.
|
||||
* In most cases, a parent device is some sort of bus or host
|
||||
* controller. If parent is NULL, the device, is a top-level device,
|
||||
* which is not usually what you want.
|
||||
* @p: Holds the private data of the driver core portions of the device.
|
||||
* See the comment of the struct device_private for detail.
|
||||
* @kobj: A top-level, abstract class from which other classes are derived.
|
||||
* @init_name: Initial name of the device.
|
||||
* @type: The type of device.
|
||||
* This identifies the device type and carries type-specific
|
||||
* information.
|
||||
* @mutex: Mutex to synchronize calls to its driver.
|
||||
* @bus: Type of bus device is on.
|
||||
* @driver: Which driver has allocated this
|
||||
* @platform_data: Platform data specific to the device.
|
||||
* Example: For devices on custom boards, as typical of embedded
|
||||
* and SOC based hardware, Linux often uses platform_data to point
|
||||
* to board-specific structures describing devices and how they
|
||||
* are wired. That can include what ports are available, chip
|
||||
* variants, which GPIO pins act in what additional roles, and so
|
||||
* on. This shrinks the "Board Support Packages" (BSPs) and
|
||||
* minimizes board-specific #ifdefs in drivers.
|
||||
* @power: For device power management.
|
||||
* See Documentation/power/devices.txt for details.
|
||||
* @pwr_domain: Provide callbacks that are executed during system suspend,
|
||||
* hibernation, system resume and during runtime PM transitions
|
||||
* along with subsystem-level and driver-level callbacks.
|
||||
* @numa_node: NUMA node this device is close to.
|
||||
* @dma_mask: Dma mask (if dma'ble device).
|
||||
* @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all
|
||||
* hardware supports 64-bit addresses for consistent allocations
|
||||
* such descriptors.
|
||||
* @dma_parms: A low level driver may set these to teach IOMMU code about
|
||||
* segment limitations.
|
||||
* @dma_pools: Dma pools (if dma'ble device).
|
||||
* @dma_mem: Internal for coherent mem override.
|
||||
* @archdata: For arch-specific additions.
|
||||
* @of_node: Associated device tree node.
|
||||
* @of_match: Matching of_device_id from driver.
|
||||
* @devt: For creating the sysfs "dev".
|
||||
* @devres_lock: Spinlock to protect the resource of the device.
|
||||
* @devres_head: The resources list of the device.
|
||||
* @knode_class: The node used to add the device to the class list.
|
||||
* @class: The class of the device.
|
||||
* @groups: Optional attribute groups.
|
||||
* @release: Callback to free the device after all references have
|
||||
* gone away. This should be set by the allocator of the
|
||||
* device (i.e. the bus driver that discovered the device).
|
||||
*
|
||||
* At the lowest level, every device in a Linux system is represented by an
|
||||
* instance of struct device. The device structure contains the information
|
||||
* that the device model core needs to model the system. Most subsystems,
|
||||
* however, track additional information about the devices they host. As a
|
||||
* result, it is rare for devices to be represented by bare device structures;
|
||||
* instead, that structure, like kobject structures, is usually embedded within
|
||||
* a higher-level representation of the device.
|
||||
*/
|
||||
struct device {
|
||||
struct device *parent;
|
||||
|
||||
|
|
@ -408,7 +556,7 @@ struct device {
|
|||
|
||||
struct kobject kobj;
|
||||
const char *init_name; /* initial name of the device */
|
||||
struct device_type *type;
|
||||
const struct device_type *type;
|
||||
|
||||
struct mutex mutex; /* mutex to synchronize calls to
|
||||
* its driver.
|
||||
|
|
@ -442,7 +590,6 @@ struct device {
|
|||
struct dev_archdata archdata;
|
||||
|
||||
struct device_node *of_node; /* associated device tree node */
|
||||
const struct of_device_id *of_match; /* matching of_device_id from driver */
|
||||
|
||||
dev_t devt; /* dev_t, creates the sysfs "dev" */
|
||||
|
||||
|
|
@ -557,7 +704,7 @@ extern int device_move(struct device *dev, struct device *new_parent,
|
|||
extern const char *device_get_devnode(struct device *dev,
|
||||
mode_t *mode, const char **tmp);
|
||||
extern void *dev_get_drvdata(const struct device *dev);
|
||||
extern void dev_set_drvdata(struct device *dev, void *data);
|
||||
extern int dev_set_drvdata(struct device *dev, void *data);
|
||||
|
||||
/*
|
||||
* Root device objects for grouping under /sys/devices
|
||||
|
|
@ -611,7 +758,7 @@ extern int (*platform_notify)(struct device *dev);
|
|||
extern int (*platform_notify_remove)(struct device *dev);
|
||||
|
||||
|
||||
/**
|
||||
/*
|
||||
* get_device - atomically increment the reference count for the device.
|
||||
*
|
||||
*/
|
||||
|
|
@ -633,13 +780,6 @@ static inline int devtmpfs_mount(const char *mountpoint) { return 0; }
|
|||
/* drivers/base/power/shutdown.c */
|
||||
extern void device_shutdown(void);
|
||||
|
||||
#ifndef CONFIG_ARCH_NO_SYSDEV_OPS
|
||||
/* drivers/base/sys.c */
|
||||
extern void sysdev_shutdown(void);
|
||||
#else
|
||||
static inline void sysdev_shutdown(void) { }
|
||||
#endif
|
||||
|
||||
/* debugging and troubleshooting/diagnostic helpers. */
|
||||
extern const char *dev_driver_string(const struct device *dev);
|
||||
|
||||
|
|
@ -742,13 +882,17 @@ do { \
|
|||
#endif
|
||||
|
||||
/*
|
||||
* dev_WARN() acts like dev_printk(), but with the key difference
|
||||
* dev_WARN*() acts like dev_printk(), but with the key difference
|
||||
* of using a WARN/WARN_ON to get the message out, including the
|
||||
* file/line information and a backtrace.
|
||||
*/
|
||||
#define dev_WARN(dev, format, arg...) \
|
||||
WARN(1, "Device: %s\n" format, dev_driver_string(dev), ## arg);
|
||||
|
||||
#define dev_WARN_ONCE(dev, condition, format, arg...) \
|
||||
WARN_ONCE(condition, "Device %s\n" format, \
|
||||
dev_driver_string(dev), ## arg)
|
||||
|
||||
/* Create alias, so I can be autoloaded. */
|
||||
#define MODULE_ALIAS_CHARDEV(major,minor) \
|
||||
MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
|
||||
|
|
|
|||
|
|
@ -175,14 +175,20 @@ typedef enum fe_transmit_mode {
|
|||
TRANSMISSION_MODE_2K,
|
||||
TRANSMISSION_MODE_8K,
|
||||
TRANSMISSION_MODE_AUTO,
|
||||
TRANSMISSION_MODE_4K
|
||||
TRANSMISSION_MODE_4K,
|
||||
TRANSMISSION_MODE_1K,
|
||||
TRANSMISSION_MODE_16K,
|
||||
TRANSMISSION_MODE_32K,
|
||||
} fe_transmit_mode_t;
|
||||
|
||||
typedef enum fe_bandwidth {
|
||||
BANDWIDTH_8_MHZ,
|
||||
BANDWIDTH_7_MHZ,
|
||||
BANDWIDTH_6_MHZ,
|
||||
BANDWIDTH_AUTO
|
||||
BANDWIDTH_AUTO,
|
||||
BANDWIDTH_5_MHZ,
|
||||
BANDWIDTH_10_MHZ,
|
||||
BANDWIDTH_1_712_MHZ,
|
||||
} fe_bandwidth_t;
|
||||
|
||||
|
||||
|
|
@ -191,7 +197,10 @@ typedef enum fe_guard_interval {
|
|||
GUARD_INTERVAL_1_16,
|
||||
GUARD_INTERVAL_1_8,
|
||||
GUARD_INTERVAL_1_4,
|
||||
GUARD_INTERVAL_AUTO
|
||||
GUARD_INTERVAL_AUTO,
|
||||
GUARD_INTERVAL_1_128,
|
||||
GUARD_INTERVAL_19_128,
|
||||
GUARD_INTERVAL_19_256,
|
||||
} fe_guard_interval_t;
|
||||
|
||||
|
||||
|
|
@ -305,7 +314,9 @@ struct dvb_frontend_event {
|
|||
|
||||
#define DTV_ISDBS_TS_ID 42
|
||||
|
||||
#define DTV_MAX_COMMAND DTV_ISDBS_TS_ID
|
||||
#define DTV_DVBT2_PLP_ID 43
|
||||
|
||||
#define DTV_MAX_COMMAND DTV_DVBT2_PLP_ID
|
||||
|
||||
typedef enum fe_pilot {
|
||||
PILOT_ON,
|
||||
|
|
@ -337,6 +348,7 @@ typedef enum fe_delivery_system {
|
|||
SYS_DMBTH,
|
||||
SYS_CMMB,
|
||||
SYS_DAB,
|
||||
SYS_DVBT2,
|
||||
} 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 2
|
||||
#define DVB_API_VERSION_MINOR 3
|
||||
|
||||
#endif /*_DVBVERSION_H_*/
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef _DYNAMIC_DEBUG_H
|
||||
#define _DYNAMIC_DEBUG_H
|
||||
|
||||
#include <linux/jump_label.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.
|
||||
|
|
|
|||
|
|
@ -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_ARM_VFP 0x400 /* ARM VFP/NEON registers */
|
||||
|
||||
|
||||
/* Note header in a PT_NOTE section */
|
||||
|
|
|
|||
|
|
@ -24,7 +24,10 @@ struct ethtool_cmd {
|
|||
__u32 cmd;
|
||||
__u32 supported; /* Features this interface supports */
|
||||
__u32 advertising; /* Features this interface advertises */
|
||||
__u16 speed; /* The forced speed, 10Mb, 100Mb, gigabit */
|
||||
__u16 speed; /* The forced speed (lower bits) in
|
||||
* Mbps. Please use
|
||||
* ethtool_cmd_speed()/_set() to
|
||||
* access it */
|
||||
__u8 duplex; /* Duplex, half or full */
|
||||
__u8 port; /* Which connector port */
|
||||
__u8 phy_address;
|
||||
|
|
@ -33,7 +36,10 @@ struct ethtool_cmd {
|
|||
__u8 mdio_support;
|
||||
__u32 maxtxpkt; /* Tx pkts before generating tx int */
|
||||
__u32 maxrxpkt; /* Rx pkts before generating rx int */
|
||||
__u16 speed_hi;
|
||||
__u16 speed_hi; /* The forced speed (upper
|
||||
* bits) in Mbps. Please use
|
||||
* ethtool_cmd_speed()/_set() to
|
||||
* access it */
|
||||
__u8 eth_tp_mdix;
|
||||
__u8 reserved2;
|
||||
__u32 lp_advertising; /* Features the link partner advertises */
|
||||
|
|
@ -41,14 +47,14 @@ struct ethtool_cmd {
|
|||
};
|
||||
|
||||
static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
|
||||
__u32 speed)
|
||||
__u32 speed)
|
||||
{
|
||||
|
||||
ep->speed = (__u16)speed;
|
||||
ep->speed_hi = (__u16)(speed >> 16);
|
||||
}
|
||||
|
||||
static inline __u32 ethtool_cmd_speed(struct ethtool_cmd *ep)
|
||||
static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
|
||||
{
|
||||
return (ep->speed_hi << 16) | ep->speed;
|
||||
}
|
||||
|
|
@ -229,6 +235,34 @@ struct ethtool_ringparam {
|
|||
__u32 tx_pending;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_channels - configuring number of network channel
|
||||
* @cmd: ETHTOOL_{G,S}CHANNELS
|
||||
* @max_rx: Read only. Maximum number of receive channel the driver support.
|
||||
* @max_tx: Read only. Maximum number of transmit channel the driver support.
|
||||
* @max_other: Read only. Maximum number of other channel the driver support.
|
||||
* @max_combined: Read only. Maximum number of combined channel the driver
|
||||
* support. Set of queues RX, TX or other.
|
||||
* @rx_count: Valid values are in the range 1 to the max_rx.
|
||||
* @tx_count: Valid values are in the range 1 to the max_tx.
|
||||
* @other_count: Valid values are in the range 1 to the max_other.
|
||||
* @combined_count: Valid values are in the range 1 to the max_combined.
|
||||
*
|
||||
* This can be used to configure RX, TX and other channels.
|
||||
*/
|
||||
|
||||
struct ethtool_channels {
|
||||
__u32 cmd;
|
||||
__u32 max_rx;
|
||||
__u32 max_tx;
|
||||
__u32 max_other;
|
||||
__u32 max_combined;
|
||||
__u32 rx_count;
|
||||
__u32 tx_count;
|
||||
__u32 other_count;
|
||||
__u32 combined_count;
|
||||
};
|
||||
|
||||
/* for configuring link flow control parameters */
|
||||
struct ethtool_pauseparam {
|
||||
__u32 cmd; /* ETHTOOL_{G,S}PAUSEPARAM */
|
||||
|
|
@ -380,27 +414,42 @@ struct ethtool_usrip4_spec {
|
|||
__u8 proto;
|
||||
};
|
||||
|
||||
union ethtool_flow_union {
|
||||
struct ethtool_tcpip4_spec tcp_ip4_spec;
|
||||
struct ethtool_tcpip4_spec udp_ip4_spec;
|
||||
struct ethtool_tcpip4_spec sctp_ip4_spec;
|
||||
struct ethtool_ah_espip4_spec ah_ip4_spec;
|
||||
struct ethtool_ah_espip4_spec esp_ip4_spec;
|
||||
struct ethtool_usrip4_spec usr_ip4_spec;
|
||||
struct ethhdr ether_spec;
|
||||
__u8 hdata[60];
|
||||
};
|
||||
|
||||
struct ethtool_flow_ext {
|
||||
__be16 vlan_etype;
|
||||
__be16 vlan_tci;
|
||||
__be32 data[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_rx_flow_spec - specification for RX flow filter
|
||||
* @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
|
||||
* @h_u: Flow fields to match (dependent on @flow_type)
|
||||
* @m_u: Masks for flow field bits to be ignored
|
||||
* @h_ext: Additional fields to match
|
||||
* @m_u: Masks for flow field bits to be matched
|
||||
* @m_ext: Masks for additional field bits to be matched
|
||||
* Note, all additional fields must be ignored unless @flow_type
|
||||
* 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
|
||||
*/
|
||||
struct ethtool_rx_flow_spec {
|
||||
__u32 flow_type;
|
||||
union {
|
||||
struct ethtool_tcpip4_spec tcp_ip4_spec;
|
||||
struct ethtool_tcpip4_spec udp_ip4_spec;
|
||||
struct ethtool_tcpip4_spec sctp_ip4_spec;
|
||||
struct ethtool_ah_espip4_spec ah_ip4_spec;
|
||||
struct ethtool_ah_espip4_spec esp_ip4_spec;
|
||||
struct ethtool_usrip4_spec usr_ip4_spec;
|
||||
struct ethhdr ether_spec;
|
||||
__u8 hdata[72];
|
||||
} h_u, m_u;
|
||||
union ethtool_flow_union h_u;
|
||||
struct ethtool_flow_ext h_ext;
|
||||
union ethtool_flow_union m_u;
|
||||
struct ethtool_flow_ext m_ext;
|
||||
__u64 ring_cookie;
|
||||
__u32 location;
|
||||
};
|
||||
|
|
@ -458,16 +507,10 @@ struct ethtool_rxnfc {
|
|||
|
||||
struct compat_ethtool_rx_flow_spec {
|
||||
u32 flow_type;
|
||||
union {
|
||||
struct ethtool_tcpip4_spec tcp_ip4_spec;
|
||||
struct ethtool_tcpip4_spec udp_ip4_spec;
|
||||
struct ethtool_tcpip4_spec sctp_ip4_spec;
|
||||
struct ethtool_ah_espip4_spec ah_ip4_spec;
|
||||
struct ethtool_ah_espip4_spec esp_ip4_spec;
|
||||
struct ethtool_usrip4_spec usr_ip4_spec;
|
||||
struct ethhdr ether_spec;
|
||||
u8 hdata[72];
|
||||
} h_u, m_u;
|
||||
union ethtool_flow_union h_u;
|
||||
struct ethtool_flow_ext h_ext;
|
||||
union ethtool_flow_union m_u;
|
||||
struct ethtool_flow_ext m_ext;
|
||||
compat_u64 ring_cookie;
|
||||
u32 location;
|
||||
};
|
||||
|
|
@ -558,6 +601,26 @@ struct ethtool_flash {
|
|||
char data[ETHTOOL_FLASH_MAX_FILENAME];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_dump - used for retrieving, setting device dump
|
||||
* @cmd: Command number - %ETHTOOL_GET_DUMP_FLAG, %ETHTOOL_GET_DUMP_DATA, or
|
||||
* %ETHTOOL_SET_DUMP
|
||||
* @version: FW version of the dump, filled in by driver
|
||||
* @flag: driver dependent flag for dump setting, filled in by driver during
|
||||
* get and filled in by ethtool for set operation
|
||||
* @len: length of dump data, used as the length of the user buffer on entry to
|
||||
* %ETHTOOL_GET_DUMP_DATA and this is returned as dump length by driver
|
||||
* for %ETHTOOL_GET_DUMP_FLAG command
|
||||
* @data: data collected for get dump data operation
|
||||
*/
|
||||
struct ethtool_dump {
|
||||
__u32 cmd;
|
||||
__u32 version;
|
||||
__u32 flag;
|
||||
__u32 len;
|
||||
__u8 data[0];
|
||||
};
|
||||
|
||||
/* for returning and changing feature sets */
|
||||
|
||||
/**
|
||||
|
|
@ -663,6 +726,22 @@ struct ethtool_rx_ntuple_list {
|
|||
unsigned int count;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ethtool_phys_id_state - indicator state for physical identification
|
||||
* @ETHTOOL_ID_INACTIVE: Physical ID indicator should be deactivated
|
||||
* @ETHTOOL_ID_ACTIVE: Physical ID indicator should be activated
|
||||
* @ETHTOOL_ID_ON: LED should be turned on (used iff %ETHTOOL_ID_ACTIVE
|
||||
* is not supported)
|
||||
* @ETHTOOL_ID_OFF: LED should be turned off (used iff %ETHTOOL_ID_ACTIVE
|
||||
* is not supported)
|
||||
*/
|
||||
enum ethtool_phys_id_state {
|
||||
ETHTOOL_ID_INACTIVE,
|
||||
ETHTOOL_ID_ACTIVE,
|
||||
ETHTOOL_ID_ON,
|
||||
ETHTOOL_ID_OFF
|
||||
};
|
||||
|
||||
struct net_device;
|
||||
|
||||
/* Some generic methods drivers may use in their ethtool_ops */
|
||||
|
|
@ -683,63 +762,131 @@ void ethtool_ntuple_flush(struct net_device *dev);
|
|||
bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
||||
|
||||
/**
|
||||
* ðtool_ops - Alter and report network device settings
|
||||
* get_settings: Get device-specific settings
|
||||
* set_settings: Set device-specific settings
|
||||
* get_drvinfo: Report driver information
|
||||
* get_regs: Get device registers
|
||||
* get_wol: Report whether Wake-on-Lan is enabled
|
||||
* set_wol: Turn Wake-on-Lan on or off
|
||||
* get_msglevel: Report driver message level
|
||||
* set_msglevel: Set driver message level
|
||||
* nway_reset: Restart autonegotiation
|
||||
* get_link: Get link status
|
||||
* get_eeprom: Read data from the device EEPROM
|
||||
* set_eeprom: Write data to the device EEPROM
|
||||
* get_coalesce: Get interrupt coalescing parameters
|
||||
* set_coalesce: Set interrupt coalescing parameters
|
||||
* get_ringparam: Report ring sizes
|
||||
* set_ringparam: Set ring sizes
|
||||
* get_pauseparam: Report pause parameters
|
||||
* set_pauseparam: Set pause parameters
|
||||
* get_rx_csum: Report whether receive checksums are turned on or off
|
||||
* set_rx_csum: Turn receive checksum on or off
|
||||
* get_tx_csum: Report whether transmit checksums are turned on or off
|
||||
* set_tx_csum: Turn transmit checksums on or off
|
||||
* get_sg: Report whether scatter-gather is enabled
|
||||
* set_sg: Turn scatter-gather on or off
|
||||
* get_tso: Report whether TCP segmentation offload is enabled
|
||||
* set_tso: Turn TCP segmentation offload on or off
|
||||
* get_ufo: Report whether UDP fragmentation offload is enabled
|
||||
* set_ufo: Turn UDP fragmentation offload on or off
|
||||
* self_test: Run specified self-tests
|
||||
* get_strings: Return a set of strings that describe the requested objects
|
||||
* phys_id: Identify the device
|
||||
* get_stats: Return statistics about the device
|
||||
* get_flags: get 32-bit flags bitmap
|
||||
* set_flags: set 32-bit flags bitmap
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
* get_settings:
|
||||
* @get_settings is passed an ðtool_cmd to fill in. It returns
|
||||
* an negative errno or zero.
|
||||
*
|
||||
* set_settings:
|
||||
* @set_settings is passed an ðtool_cmd and should attempt to set
|
||||
* all the settings this device supports. It may return an error value
|
||||
* if something goes wrong (otherwise 0).
|
||||
*
|
||||
* get_eeprom:
|
||||
* struct ethtool_ops - optional netdev operations
|
||||
* @get_settings: Get various device settings including Ethernet link
|
||||
* settings. The @cmd parameter is expected to have been cleared
|
||||
* before get_settings is called. Returns a negative error code or
|
||||
* zero.
|
||||
* @set_settings: Set various device settings including Ethernet link
|
||||
* settings. Returns a negative error code or zero.
|
||||
* @get_drvinfo: Report driver/device information. Should only set the
|
||||
* @driver, @version, @fw_version and @bus_info fields. If not
|
||||
* implemented, the @driver and @bus_info fields will be filled in
|
||||
* according to the netdev's parent device.
|
||||
* @get_regs_len: Get buffer length required for @get_regs
|
||||
* @get_regs: Get device registers
|
||||
* @get_wol: Report whether Wake-on-Lan is enabled
|
||||
* @set_wol: Turn Wake-on-Lan on or off. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_msglevel: Report driver message level. This should be the value
|
||||
* of the @msg_enable field used by netif logging functions.
|
||||
* @set_msglevel: Set driver message level
|
||||
* @nway_reset: Restart autonegotiation. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_link: Report whether physical link is up. Will only be called if
|
||||
* the netdev is up. Should usually be set to ethtool_op_get_link(),
|
||||
* which uses netif_carrier_ok().
|
||||
* @get_eeprom: Read data from the device EEPROM.
|
||||
* Should fill in the magic field. Don't need to check len for zero
|
||||
* or wraparound. Fill in the data argument with the eeprom values
|
||||
* from offset to offset + len. Update len to the amount read.
|
||||
* Returns an error or zero.
|
||||
*
|
||||
* set_eeprom:
|
||||
* @set_eeprom: Write data to the device EEPROM.
|
||||
* Should validate the magic field. Don't need to check len for zero
|
||||
* or wraparound. Update len to the amount written. Returns an error
|
||||
* or zero.
|
||||
* @get_coalesce: Get interrupt coalescing parameters. Returns a negative
|
||||
* error code or zero.
|
||||
* @set_coalesce: Set interrupt coalescing parameters. Returns a negative
|
||||
* error code or zero.
|
||||
* @get_ringparam: Report ring sizes
|
||||
* @set_ringparam: Set ring sizes. Returns a negative error code or zero.
|
||||
* @get_pauseparam: Report pause parameters
|
||||
* @set_pauseparam: Set pause parameters. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_rx_csum: Deprecated in favour of the netdev feature %NETIF_F_RXCSUM.
|
||||
* Report whether receive checksums are turned on or off.
|
||||
* @set_rx_csum: Deprecated in favour of generic netdev features. Turn
|
||||
* receive checksum on or off. Returns a negative error code or zero.
|
||||
* @get_tx_csum: Deprecated as redundant. Report whether transmit checksums
|
||||
* are turned on or off.
|
||||
* @set_tx_csum: Deprecated in favour of generic netdev features. Turn
|
||||
* transmit checksums on or off. Returns a egative error code or zero.
|
||||
* @get_sg: Deprecated as redundant. Report whether scatter-gather is
|
||||
* enabled.
|
||||
* @set_sg: Deprecated in favour of generic netdev features. Turn
|
||||
* scatter-gather on or off. Returns a negative error code or zero.
|
||||
* @get_tso: Deprecated as redundant. Report whether TCP segmentation
|
||||
* offload is enabled.
|
||||
* @set_tso: Deprecated in favour of generic netdev features. Turn TCP
|
||||
* segmentation offload on or off. Returns a negative error code or zero.
|
||||
* @self_test: Run specified self-tests
|
||||
* @get_strings: Return a set of strings that describe the requested objects
|
||||
* @set_phys_id: Identify the physical devices, e.g. by flashing an LED
|
||||
* attached to it. The implementation may update the indicator
|
||||
* asynchronously or synchronously, but in either case it must return
|
||||
* quickly. It is initially called with the argument %ETHTOOL_ID_ACTIVE,
|
||||
* and must either activate asynchronous updates and return zero, return
|
||||
* a negative error or return a positive frequency for synchronous
|
||||
* indication (e.g. 1 for one on/off cycle per second). If it returns
|
||||
* a frequency then it will be called again at intervals with the
|
||||
* argument %ETHTOOL_ID_ON or %ETHTOOL_ID_OFF and should set the state of
|
||||
* the indicator accordingly. Finally, it is called with the argument
|
||||
* %ETHTOOL_ID_INACTIVE and must deactivate the indicator. Returns a
|
||||
* negative error code or zero.
|
||||
* @get_ethtool_stats: Return extended statistics about the device.
|
||||
* This is only useful if the device maintains statistics not
|
||||
* included in &struct rtnl_link_stats64.
|
||||
* @begin: Function to be called before any other operation. Returns a
|
||||
* negative error code or zero.
|
||||
* @complete: Function to be called after any other operation except
|
||||
* @begin. Will be called even if the other operation failed.
|
||||
* @get_ufo: Deprecated as redundant. Report whether UDP fragmentation
|
||||
* offload is enabled.
|
||||
* @set_ufo: Deprecated in favour of generic netdev features. Turn UDP
|
||||
* fragmentation offload on or off. Returns a negative error code or zero.
|
||||
* @get_flags: Deprecated as redundant. Report features included in
|
||||
* &enum ethtool_flags that are enabled.
|
||||
* @set_flags: Deprecated in favour of generic netdev features. Turn
|
||||
* features included in &enum ethtool_flags on or off. Returns a
|
||||
* negative error code or zero.
|
||||
* @get_priv_flags: Report driver-specific feature flags.
|
||||
* @set_priv_flags: Set driver-specific feature flags. Returns a negative
|
||||
* error code or zero.
|
||||
* @get_sset_count: Get number of strings that @get_strings will write.
|
||||
* @get_rxnfc: Get RX flow classification rules. Returns a negative
|
||||
* error code or zero.
|
||||
* @set_rxnfc: Set RX flow classification rules. Returns a negative
|
||||
* error code or zero.
|
||||
* @flash_device: Write a firmware image to device's flash memory.
|
||||
* Returns a negative error code or zero.
|
||||
* @reset: Reset (part of) the device, as specified by a bitmask of
|
||||
* flags from &enum ethtool_reset_flags. Returns a negative
|
||||
* error code or zero.
|
||||
* @set_rx_ntuple: Set an RX n-tuple rule. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_rx_ntuple: Deprecated.
|
||||
* @get_rxfh_indir: Get the contents of the RX flow hash indirection table.
|
||||
* Returns a negative error code or zero.
|
||||
* @set_rxfh_indir: Set the contents of the RX flow hash indirection table.
|
||||
* Returns a negative error code or zero.
|
||||
* @get_channels: Get number of channels.
|
||||
* @set_channels: Set number of channels. Returns a negative error code or
|
||||
* zero.
|
||||
* @get_dump_flag: Get dump flag indicating current dump length, version,
|
||||
* and flag of the device.
|
||||
* @get_dump_data: Get dump data.
|
||||
* @set_dump: Set dump specific flags to the device.
|
||||
*
|
||||
* All operations are optional (i.e. the function pointer may be set
|
||||
* to %NULL) and callers must take this into account. Callers must
|
||||
* hold the RTNL, except that for @get_drvinfo the caller may or may
|
||||
* not hold the RTNL.
|
||||
*
|
||||
* See the structures used by these operations for further documentation.
|
||||
*
|
||||
* See &struct net_device and &struct net_device_ops for documentation
|
||||
* of the generic netdev features interface.
|
||||
*/
|
||||
struct ethtool_ops {
|
||||
int (*get_settings)(struct net_device *, struct ethtool_cmd *);
|
||||
|
|
@ -778,7 +925,7 @@ struct ethtool_ops {
|
|||
int (*set_tso)(struct net_device *, u32);
|
||||
void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
|
||||
void (*get_strings)(struct net_device *, u32 stringset, u8 *);
|
||||
int (*phys_id)(struct net_device *, u32);
|
||||
int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
|
||||
void (*get_ethtool_stats)(struct net_device *,
|
||||
struct ethtool_stats *, u64 *);
|
||||
int (*begin)(struct net_device *);
|
||||
|
|
@ -802,6 +949,13 @@ struct ethtool_ops {
|
|||
struct ethtool_rxfh_indir *);
|
||||
int (*set_rxfh_indir)(struct net_device *,
|
||||
const struct ethtool_rxfh_indir *);
|
||||
void (*get_channels)(struct net_device *, struct ethtool_channels *);
|
||||
int (*set_channels)(struct net_device *, struct ethtool_channels *);
|
||||
int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
|
||||
int (*get_dump_data)(struct net_device *,
|
||||
struct ethtool_dump *, void *);
|
||||
int (*set_dump)(struct net_device *, struct ethtool_dump *);
|
||||
|
||||
};
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
@ -870,6 +1024,11 @@ struct ethtool_ops {
|
|||
|
||||
#define ETHTOOL_GFEATURES 0x0000003a /* Get device offload settings */
|
||||
#define ETHTOOL_SFEATURES 0x0000003b /* Change device offload settings */
|
||||
#define ETHTOOL_GCHANNELS 0x0000003c /* Get no of channels */
|
||||
#define ETHTOOL_SCHANNELS 0x0000003d /* Set no of channels */
|
||||
#define ETHTOOL_SET_DUMP 0x0000003e /* Set dump settings */
|
||||
#define ETHTOOL_GET_DUMP_FLAG 0x0000003f /* Get dump settings */
|
||||
#define ETHTOOL_GET_DUMP_DATA 0x00000040 /* Get dump data */
|
||||
|
||||
/* compatibility with older code */
|
||||
#define SPARC_ETH_GSET ETHTOOL_GSET
|
||||
|
|
@ -897,6 +1056,8 @@ struct ethtool_ops {
|
|||
#define SUPPORTED_10000baseKX4_Full (1 << 18)
|
||||
#define SUPPORTED_10000baseKR_Full (1 << 19)
|
||||
#define SUPPORTED_10000baseR_FEC (1 << 20)
|
||||
#define SUPPORTED_20000baseMLD2_Full (1 << 21)
|
||||
#define SUPPORTED_20000baseKR2_Full (1 << 22)
|
||||
|
||||
/* Indicates what features are advertised by the interface. */
|
||||
#define ADVERTISED_10baseT_Half (1 << 0)
|
||||
|
|
@ -920,6 +1081,8 @@ struct ethtool_ops {
|
|||
#define ADVERTISED_10000baseKX4_Full (1 << 18)
|
||||
#define ADVERTISED_10000baseKR_Full (1 << 19)
|
||||
#define ADVERTISED_10000baseR_FEC (1 << 20)
|
||||
#define ADVERTISED_20000baseMLD2_Full (1 << 21)
|
||||
#define ADVERTISED_20000baseKR2_Full (1 << 22)
|
||||
|
||||
/* The following are all involved in forcing a particular link
|
||||
* mode for the device for setting things. When getting the
|
||||
|
|
@ -992,6 +1155,8 @@ struct ethtool_ops {
|
|||
#define IPV4_FLOW 0x10 /* hash only */
|
||||
#define IPV6_FLOW 0x11 /* hash only */
|
||||
#define ETHER_FLOW 0x12 /* spec only (ether_spec) */
|
||||
/* Flag to enable additional fields in struct ethtool_rx_flow_spec */
|
||||
#define FLOW_EXT 0x80000000
|
||||
|
||||
/* L3-L4 network traffic flow hash options */
|
||||
#define RXH_L2DA (1 << 1)
|
||||
|
|
|
|||
|
|
@ -832,6 +832,7 @@ struct fb_tile_ops {
|
|||
#define FBINFO_CAN_FORCE_OUTPUT 0x200000
|
||||
|
||||
struct fb_info {
|
||||
atomic_t count;
|
||||
int node;
|
||||
int flags;
|
||||
struct mutex lock; /* Lock for open/release/ioctl funcs */
|
||||
|
|
|
|||
|
|
@ -131,10 +131,16 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
|
|||
#define SKF_LL_OFF (-0x200000)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct sk_buff;
|
||||
struct sock;
|
||||
|
||||
struct sk_filter
|
||||
{
|
||||
atomic_t refcnt;
|
||||
unsigned int len; /* Number of filter blocks */
|
||||
unsigned int (*bpf_func)(const struct sk_buff *skb,
|
||||
const struct sock_filter *filter);
|
||||
struct rcu_head rcu;
|
||||
struct sock_filter insns[0];
|
||||
};
|
||||
|
|
@ -144,15 +150,86 @@ static inline unsigned int sk_filter_len(const struct sk_filter *fp)
|
|||
return fp->len * sizeof(struct sock_filter) + sizeof(*fp);
|
||||
}
|
||||
|
||||
struct sk_buff;
|
||||
struct sock;
|
||||
|
||||
extern int sk_filter(struct sock *sk, struct sk_buff *skb);
|
||||
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);
|
||||
|
||||
#ifdef CONFIG_BPF_JIT
|
||||
extern void bpf_jit_compile(struct sk_filter *fp);
|
||||
extern void bpf_jit_free(struct sk_filter *fp);
|
||||
#define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns)
|
||||
#else
|
||||
static inline void bpf_jit_compile(struct sk_filter *fp)
|
||||
{
|
||||
}
|
||||
static inline void bpf_jit_free(struct sk_filter *fp)
|
||||
{
|
||||
}
|
||||
#define SK_RUN_FILTER(FILTER, SKB) sk_run_filter(SKB, FILTER->insns)
|
||||
#endif
|
||||
|
||||
enum {
|
||||
BPF_S_RET_K = 1,
|
||||
BPF_S_RET_A,
|
||||
BPF_S_ALU_ADD_K,
|
||||
BPF_S_ALU_ADD_X,
|
||||
BPF_S_ALU_SUB_K,
|
||||
BPF_S_ALU_SUB_X,
|
||||
BPF_S_ALU_MUL_K,
|
||||
BPF_S_ALU_MUL_X,
|
||||
BPF_S_ALU_DIV_X,
|
||||
BPF_S_ALU_AND_K,
|
||||
BPF_S_ALU_AND_X,
|
||||
BPF_S_ALU_OR_K,
|
||||
BPF_S_ALU_OR_X,
|
||||
BPF_S_ALU_LSH_K,
|
||||
BPF_S_ALU_LSH_X,
|
||||
BPF_S_ALU_RSH_K,
|
||||
BPF_S_ALU_RSH_X,
|
||||
BPF_S_ALU_NEG,
|
||||
BPF_S_LD_W_ABS,
|
||||
BPF_S_LD_H_ABS,
|
||||
BPF_S_LD_B_ABS,
|
||||
BPF_S_LD_W_LEN,
|
||||
BPF_S_LD_W_IND,
|
||||
BPF_S_LD_H_IND,
|
||||
BPF_S_LD_B_IND,
|
||||
BPF_S_LD_IMM,
|
||||
BPF_S_LDX_W_LEN,
|
||||
BPF_S_LDX_B_MSH,
|
||||
BPF_S_LDX_IMM,
|
||||
BPF_S_MISC_TAX,
|
||||
BPF_S_MISC_TXA,
|
||||
BPF_S_ALU_DIV_K,
|
||||
BPF_S_LD_MEM,
|
||||
BPF_S_LDX_MEM,
|
||||
BPF_S_ST,
|
||||
BPF_S_STX,
|
||||
BPF_S_JMP_JA,
|
||||
BPF_S_JMP_JEQ_K,
|
||||
BPF_S_JMP_JEQ_X,
|
||||
BPF_S_JMP_JGE_K,
|
||||
BPF_S_JMP_JGE_X,
|
||||
BPF_S_JMP_JGT_K,
|
||||
BPF_S_JMP_JGT_X,
|
||||
BPF_S_JMP_JSET_K,
|
||||
BPF_S_JMP_JSET_X,
|
||||
/* Ancillary data */
|
||||
BPF_S_ANC_PROTOCOL,
|
||||
BPF_S_ANC_PKTTYPE,
|
||||
BPF_S_ANC_IFINDEX,
|
||||
BPF_S_ANC_NLATTR,
|
||||
BPF_S_ANC_NLATTR_NEST,
|
||||
BPF_S_ANC_MARK,
|
||||
BPF_S_ANC_QUEUE,
|
||||
BPF_S_ANC_HATYPE,
|
||||
BPF_S_ANC_RXHASH,
|
||||
BPF_S_ANC_CPU,
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __LINUX_FILTER_H__ */
|
||||
|
|
|
|||
|
|
@ -125,7 +125,6 @@ struct fw_card {
|
|||
struct delayed_work bm_work; /* bus manager job */
|
||||
int bm_retries;
|
||||
int bm_generation;
|
||||
__be32 bm_transaction_data[2];
|
||||
int bm_node_id;
|
||||
bool bm_abdicate;
|
||||
|
||||
|
|
@ -441,12 +440,15 @@ int fw_iso_context_queue(struct fw_iso_context *ctx,
|
|||
struct fw_iso_packet *packet,
|
||||
struct fw_iso_buffer *buffer,
|
||||
unsigned long payload);
|
||||
void fw_iso_context_queue_flush(struct fw_iso_context *ctx);
|
||||
int fw_iso_context_start(struct fw_iso_context *ctx,
|
||||
int cycle, int sync, int tags);
|
||||
int fw_iso_context_stop(struct fw_iso_context *ctx);
|
||||
void fw_iso_context_destroy(struct fw_iso_context *ctx);
|
||||
void fw_iso_resource_manage(struct fw_card *card, int generation,
|
||||
u64 channels_mask, int *channel, int *bandwidth,
|
||||
bool allocate, __be32 buffer[2]);
|
||||
bool allocate);
|
||||
|
||||
extern struct workqueue_struct *fw_workqueue;
|
||||
|
||||
#endif /* _LINUX_FIREWIRE_H */
|
||||
|
|
|
|||
|
|
@ -358,7 +358,6 @@ struct inodes_stat_t {
|
|||
#define FS_EXTENT_FL 0x00080000 /* Extents */
|
||||
#define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
|
||||
#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
|
||||
#define FS_COW_FL 0x02000000 /* Cow file */
|
||||
#define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
|
||||
|
||||
#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ struct fsl_usb2_platform_data {
|
|||
void (*exit)(struct platform_device *);
|
||||
void __iomem *regs; /* ioremap'd register base */
|
||||
struct clk *clk;
|
||||
unsigned power_budget; /* hcd->power_budget */
|
||||
unsigned big_endian_mmio:1;
|
||||
unsigned big_endian_desc:1;
|
||||
unsigned es:1; /* need USBMODE:ES */
|
||||
|
|
@ -79,6 +80,21 @@ struct fsl_usb2_platform_data {
|
|||
unsigned have_sysif_regs:1;
|
||||
unsigned invert_drvvbus:1;
|
||||
unsigned invert_pwr_fault:1;
|
||||
|
||||
unsigned suspended:1;
|
||||
unsigned already_suspended:1;
|
||||
|
||||
/* register save area for suspend/resume */
|
||||
u32 pm_command;
|
||||
u32 pm_status;
|
||||
u32 pm_intr_enable;
|
||||
u32 pm_frame_index;
|
||||
u32 pm_segment;
|
||||
u32 pm_frame_list;
|
||||
u32 pm_async_next;
|
||||
u32 pm_configured_flag;
|
||||
u32 pm_portsc;
|
||||
u32 pm_usbgenctrl;
|
||||
};
|
||||
|
||||
/* Flags in fsl_usb2_mph_platform_data */
|
||||
|
|
|
|||
|
|
@ -29,9 +29,22 @@ ftrace_enable_sysctl(struct ctl_table *table, int write,
|
|||
|
||||
typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
|
||||
|
||||
struct ftrace_hash;
|
||||
|
||||
enum {
|
||||
FTRACE_OPS_FL_ENABLED = 1 << 0,
|
||||
FTRACE_OPS_FL_GLOBAL = 1 << 1,
|
||||
FTRACE_OPS_FL_DYNAMIC = 1 << 2,
|
||||
};
|
||||
|
||||
struct ftrace_ops {
|
||||
ftrace_func_t func;
|
||||
struct ftrace_ops *next;
|
||||
ftrace_func_t func;
|
||||
struct ftrace_ops *next;
|
||||
unsigned long flags;
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
struct ftrace_hash *notrace_hash;
|
||||
struct ftrace_hash *filter_hash;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern int function_trace_stop;
|
||||
|
|
@ -146,14 +159,13 @@ extern void unregister_ftrace_function_probe_all(char *glob);
|
|||
extern int ftrace_text_reserved(void *start, void *end);
|
||||
|
||||
enum {
|
||||
FTRACE_FL_FREE = (1 << 0),
|
||||
FTRACE_FL_FAILED = (1 << 1),
|
||||
FTRACE_FL_FILTER = (1 << 2),
|
||||
FTRACE_FL_ENABLED = (1 << 3),
|
||||
FTRACE_FL_NOTRACE = (1 << 4),
|
||||
FTRACE_FL_CONVERTED = (1 << 5),
|
||||
FTRACE_FL_ENABLED = (1 << 30),
|
||||
FTRACE_FL_FREE = (1 << 31),
|
||||
};
|
||||
|
||||
#define FTRACE_FL_MASK (0x3UL << 30)
|
||||
#define FTRACE_REF_MAX ((1 << 30) - 1)
|
||||
|
||||
struct dyn_ftrace {
|
||||
union {
|
||||
unsigned long ip; /* address of mcount call-site */
|
||||
|
|
@ -167,7 +179,12 @@ struct dyn_ftrace {
|
|||
};
|
||||
|
||||
int ftrace_force_update(void);
|
||||
void ftrace_set_filter(unsigned char *buf, int len, int reset);
|
||||
void ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
|
||||
int len, int reset);
|
||||
void ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
|
||||
int len, int reset);
|
||||
void ftrace_set_global_filter(unsigned char *buf, int len, int reset);
|
||||
void ftrace_set_global_notrace(unsigned char *buf, int len, int reset);
|
||||
|
||||
int register_ftrace_command(struct ftrace_func_command *cmd);
|
||||
int unregister_ftrace_command(struct ftrace_func_command *cmd);
|
||||
|
|
|
|||
|
|
@ -353,6 +353,8 @@ extern unsigned long get_zeroed_page(gfp_t gfp_mask);
|
|||
|
||||
void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
|
||||
void free_pages_exact(void *virt, size_t size);
|
||||
/* This is different from alloc_pages_exact_node !!! */
|
||||
void *alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
|
||||
|
||||
#define __get_free_page(gfp_mask) \
|
||||
__get_free_pages((gfp_mask), 0)
|
||||
|
|
|
|||
|
|
@ -143,19 +143,18 @@ struct hrtimer_sleeper {
|
|||
*/
|
||||
struct hrtimer_clock_base {
|
||||
struct hrtimer_cpu_base *cpu_base;
|
||||
clockid_t index;
|
||||
int index;
|
||||
clockid_t clockid;
|
||||
struct timerqueue_head active;
|
||||
ktime_t resolution;
|
||||
ktime_t (*get_time)(void);
|
||||
ktime_t softirq_time;
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
ktime_t offset;
|
||||
#endif
|
||||
};
|
||||
|
||||
enum hrtimer_base_type {
|
||||
HRTIMER_BASE_REALTIME,
|
||||
HRTIMER_BASE_MONOTONIC,
|
||||
HRTIMER_BASE_REALTIME,
|
||||
HRTIMER_BASE_BOOTTIME,
|
||||
HRTIMER_MAX_CLOCK_BASES,
|
||||
};
|
||||
|
|
@ -164,7 +163,7 @@ enum hrtimer_base_type {
|
|||
* struct hrtimer_cpu_base - the per cpu clock bases
|
||||
* @lock: lock protecting the base and associated clock bases
|
||||
* and timers
|
||||
* @clock_base: array of clock bases for this cpu
|
||||
* @active_bases: Bitfield to mark bases with active timers
|
||||
* @expires_next: absolute time of the next event which was scheduled
|
||||
* via clock_set_next_event()
|
||||
* @hres_active: State of high resolution mode
|
||||
|
|
@ -173,10 +172,11 @@ enum hrtimer_base_type {
|
|||
* @nr_retries: Total number of hrtimer interrupt retries
|
||||
* @nr_hangs: Total number of hrtimer interrupt hangs
|
||||
* @max_hang_time: Maximum time spent in hrtimer_interrupt
|
||||
* @clock_base: array of clock bases for this cpu
|
||||
*/
|
||||
struct hrtimer_cpu_base {
|
||||
raw_spinlock_t lock;
|
||||
struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES];
|
||||
unsigned long active_bases;
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
ktime_t expires_next;
|
||||
int hres_active;
|
||||
|
|
@ -186,6 +186,7 @@ struct hrtimer_cpu_base {
|
|||
unsigned long nr_hangs;
|
||||
ktime_t max_hang_time;
|
||||
#endif
|
||||
struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES];
|
||||
};
|
||||
|
||||
static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time)
|
||||
|
|
@ -256,8 +257,6 @@ static inline ktime_t hrtimer_expires_remaining(const struct hrtimer *timer)
|
|||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
struct clock_event_device;
|
||||
|
||||
extern void clock_was_set(void);
|
||||
extern void hres_timers_resume(void);
|
||||
extern void hrtimer_interrupt(struct clock_event_device *dev);
|
||||
|
||||
/*
|
||||
|
|
@ -291,16 +290,8 @@ extern void hrtimer_peek_ahead_timers(void);
|
|||
# define MONOTONIC_RES_NSEC LOW_RES_NSEC
|
||||
# define KTIME_MONOTONIC_RES KTIME_LOW_RES
|
||||
|
||||
/*
|
||||
* clock_was_set() is a NOP for non- high-resolution systems. The
|
||||
* time-sorted order guarantees that a timer does not expire early and
|
||||
* is expired in the next softirq when the clock was advanced.
|
||||
*/
|
||||
static inline void clock_was_set(void) { }
|
||||
static inline void hrtimer_peek_ahead_timers(void) { }
|
||||
|
||||
static inline void hres_timers_resume(void) { }
|
||||
|
||||
/*
|
||||
* In non high resolution mode the time reference is taken from
|
||||
* the base softirq time variable.
|
||||
|
|
@ -316,10 +307,18 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer)
|
|||
}
|
||||
#endif
|
||||
|
||||
extern void clock_was_set(void);
|
||||
#ifdef CONFIG_TIMERFD
|
||||
extern void timerfd_clock_was_set(void);
|
||||
#else
|
||||
static inline void timerfd_clock_was_set(void) { }
|
||||
#endif
|
||||
extern void hrtimers_resume(void);
|
||||
|
||||
extern ktime_t ktime_get(void);
|
||||
extern ktime_t ktime_get_real(void);
|
||||
extern ktime_t ktime_get_boottime(void);
|
||||
|
||||
extern ktime_t ktime_get_monotonic_offset(void);
|
||||
|
||||
DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
|
||||
|
||||
|
|
|
|||
10
include/linux/i2c/i2c-sh_mobile.h
Normal file
10
include/linux/i2c/i2c-sh_mobile.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef __I2C_SH_MOBILE_H__
|
||||
#define __I2C_SH_MOBILE_H__
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
struct i2c_sh_mobile_platform_data {
|
||||
unsigned long bus_speed;
|
||||
};
|
||||
|
||||
#endif /* __I2C_SH_MOBILE_H__ */
|
||||
|
|
@ -18,13 +18,13 @@
|
|||
#include <linux/pci.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/mutex.h>
|
||||
#ifdef CONFIG_BLK_DEV_IDEACPI
|
||||
#include <acpi/acpi.h>
|
||||
#endif
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/mutex.h>
|
||||
|
||||
/* for request_sense */
|
||||
#include <linux/cdrom.h>
|
||||
|
|
|
|||
|
|
@ -884,6 +884,15 @@ struct ieee80211_ht_cap {
|
|||
#define IEEE80211_HT_CAP_40MHZ_INTOLERANT 0x4000
|
||||
#define IEEE80211_HT_CAP_LSIG_TXOP_PROT 0x8000
|
||||
|
||||
/* 802.11n HT extended capabilities masks (for extended_ht_cap_info) */
|
||||
#define IEEE80211_HT_EXT_CAP_PCO 0x0001
|
||||
#define IEEE80211_HT_EXT_CAP_PCO_TIME 0x0006
|
||||
#define IEEE80211_HT_EXT_CAP_PCO_TIME_SHIFT 1
|
||||
#define IEEE80211_HT_EXT_CAP_MCS_FB 0x0300
|
||||
#define IEEE80211_HT_EXT_CAP_MCS_FB_SHIFT 8
|
||||
#define IEEE80211_HT_EXT_CAP_HTC_SUP 0x0400
|
||||
#define IEEE80211_HT_EXT_CAP_RD_RESPONDER 0x0800
|
||||
|
||||
/* 802.11n HT capability AMPDU settings (for ampdu_params_info) */
|
||||
#define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03
|
||||
#define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C
|
||||
|
|
@ -993,6 +1002,11 @@ struct ieee80211_ht_info {
|
|||
|
||||
#define WLAN_CAPABILITY_ESS (1<<0)
|
||||
#define WLAN_CAPABILITY_IBSS (1<<1)
|
||||
|
||||
/* A mesh STA sets the ESS and IBSS capability bits to zero */
|
||||
#define WLAN_CAPABILITY_IS_MBSS(cap) \
|
||||
(!((cap) & (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)))
|
||||
|
||||
#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
|
||||
#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
|
||||
#define WLAN_CAPABILITY_PRIVACY (1<<4)
|
||||
|
|
@ -1252,9 +1266,8 @@ enum ieee80211_category {
|
|||
WLAN_CATEGORY_MULTIHOP_ACTION = 14,
|
||||
WLAN_CATEGORY_SELF_PROTECTED = 15,
|
||||
WLAN_CATEGORY_WMM = 17,
|
||||
/* TODO: remove MESH_PLINK and MESH_PATH_SEL after */
|
||||
/* mesh is updated to current 802.11s draft */
|
||||
WLAN_CATEGORY_MESH_PLINK = 30,
|
||||
/* 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,
|
||||
|
|
@ -1507,6 +1520,7 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
|
|||
category = ((u8 *) hdr) + 24;
|
||||
return *category != WLAN_CATEGORY_PUBLIC &&
|
||||
*category != WLAN_CATEGORY_HT &&
|
||||
*category != WLAN_CATEGORY_SELF_PROTECTED &&
|
||||
*category != WLAN_CATEGORY_VENDOR_SPECIFIC;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr);
|
|||
extern struct ctl_table ether_table[];
|
||||
#endif
|
||||
|
||||
int mac_pton(const char *s, u8 *mac);
|
||||
extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -86,7 +86,6 @@ struct vlan_group {
|
|||
* the vlan is attached to.
|
||||
*/
|
||||
unsigned int nr_vlans;
|
||||
int killall;
|
||||
struct hlist_node hlist; /* linked list */
|
||||
struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS];
|
||||
struct rcu_head rcu;
|
||||
|
|
@ -132,7 +131,8 @@ extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
|||
|
||||
extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
|
||||
u16 vlan_tci, int polling);
|
||||
extern bool vlan_hwaccel_do_receive(struct sk_buff **skb);
|
||||
extern bool vlan_do_receive(struct sk_buff **skb);
|
||||
extern struct sk_buff *vlan_untag(struct sk_buff *skb);
|
||||
extern gro_result_t
|
||||
vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci, struct sk_buff *skb);
|
||||
|
|
@ -166,13 +166,18 @@ static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
|
|||
return NET_XMIT_SUCCESS;
|
||||
}
|
||||
|
||||
static inline bool vlan_hwaccel_do_receive(struct sk_buff **skb)
|
||||
static inline bool vlan_do_receive(struct sk_buff **skb)
|
||||
{
|
||||
if ((*skb)->vlan_tci & VLAN_VID_MASK)
|
||||
(*skb)->pkt_type = PACKET_OTHERHOST;
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline struct sk_buff *vlan_untag(struct sk_buff *skb)
|
||||
{
|
||||
return skb;
|
||||
}
|
||||
|
||||
static inline gro_result_t
|
||||
vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci, struct sk_buff *skb)
|
||||
|
|
|
|||
|
|
@ -79,29 +79,29 @@
|
|||
#define __exitused __used
|
||||
#endif
|
||||
|
||||
#define __exit __section(.exit.text) __exitused __cold
|
||||
#define __exit __section(.exit.text) __exitused __cold notrace
|
||||
|
||||
/* Used for HOTPLUG */
|
||||
#define __devinit __section(.devinit.text) __cold
|
||||
#define __devinit __section(.devinit.text) __cold notrace
|
||||
#define __devinitdata __section(.devinit.data)
|
||||
#define __devinitconst __section(.devinit.rodata)
|
||||
#define __devexit __section(.devexit.text) __exitused __cold
|
||||
#define __devexit __section(.devexit.text) __exitused __cold notrace
|
||||
#define __devexitdata __section(.devexit.data)
|
||||
#define __devexitconst __section(.devexit.rodata)
|
||||
|
||||
/* Used for HOTPLUG_CPU */
|
||||
#define __cpuinit __section(.cpuinit.text) __cold
|
||||
#define __cpuinit __section(.cpuinit.text) __cold notrace
|
||||
#define __cpuinitdata __section(.cpuinit.data)
|
||||
#define __cpuinitconst __section(.cpuinit.rodata)
|
||||
#define __cpuexit __section(.cpuexit.text) __exitused __cold
|
||||
#define __cpuexit __section(.cpuexit.text) __exitused __cold notrace
|
||||
#define __cpuexitdata __section(.cpuexit.data)
|
||||
#define __cpuexitconst __section(.cpuexit.rodata)
|
||||
|
||||
/* Used for MEMORY_HOTPLUG */
|
||||
#define __meminit __section(.meminit.text) __cold
|
||||
#define __meminit __section(.meminit.text) __cold notrace
|
||||
#define __meminitdata __section(.meminit.data)
|
||||
#define __meminitconst __section(.meminit.rodata)
|
||||
#define __memexit __section(.memexit.text) __exitused __cold
|
||||
#define __memexit __section(.memexit.text) __exitused __cold notrace
|
||||
#define __memexitdata __section(.memexit.data)
|
||||
#define __memexitconst __section(.memexit.rodata)
|
||||
|
||||
|
|
|
|||
|
|
@ -134,7 +134,6 @@ extern struct cred init_cred;
|
|||
.stack = &init_thread_info, \
|
||||
.usage = ATOMIC_INIT(2), \
|
||||
.flags = PF_KTHREAD, \
|
||||
.lock_depth = -1, \
|
||||
.prio = MAX_PRIO-20, \
|
||||
.static_prio = MAX_PRIO-20, \
|
||||
.normal_prio = MAX_PRIO-20, \
|
||||
|
|
|
|||
|
|
@ -414,7 +414,6 @@ enum
|
|||
TASKLET_SOFTIRQ,
|
||||
SCHED_SOFTIRQ,
|
||||
HRTIMER_SOFTIRQ,
|
||||
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
|
||||
|
||||
NR_SOFTIRQS
|
||||
};
|
||||
|
|
|
|||
|
|
@ -53,12 +53,13 @@ typedef void (*irq_preflow_handler_t)(struct irq_data *data);
|
|||
* Bits which can be modified via irq_set/clear/modify_status_flags()
|
||||
* IRQ_LEVEL - Interrupt is level type. Will be also
|
||||
* updated in the code when the above trigger
|
||||
* bits are modified via set_irq_type()
|
||||
* bits are modified via irq_set_irq_type()
|
||||
* IRQ_PER_CPU - Mark an interrupt PER_CPU. Will protect
|
||||
* it from affinity setting
|
||||
* IRQ_NOPROBE - Interrupt cannot be probed by autoprobing
|
||||
* IRQ_NOREQUEST - Interrupt cannot be requested via
|
||||
* request_irq()
|
||||
* IRQ_NOTHREAD - Interrupt cannot be threaded
|
||||
* IRQ_NOAUTOEN - Interrupt is not automatically enabled in
|
||||
* request/setup_irq()
|
||||
* IRQ_NO_BALANCING - Interrupt cannot be balanced (affinity set)
|
||||
|
|
@ -85,6 +86,7 @@ enum {
|
|||
IRQ_NO_BALANCING = (1 << 13),
|
||||
IRQ_MOVE_PCNTXT = (1 << 14),
|
||||
IRQ_NESTED_THREAD = (1 << 15),
|
||||
IRQ_NOTHREAD = (1 << 16),
|
||||
};
|
||||
|
||||
#define IRQF_MODIFY_MASK \
|
||||
|
|
@ -261,23 +263,6 @@ static inline void irqd_clr_chained_irq_inprogress(struct irq_data *d)
|
|||
* struct irq_chip - hardware interrupt chip descriptor
|
||||
*
|
||||
* @name: name for /proc/interrupts
|
||||
* @startup: deprecated, replaced by irq_startup
|
||||
* @shutdown: deprecated, replaced by irq_shutdown
|
||||
* @enable: deprecated, replaced by irq_enable
|
||||
* @disable: deprecated, replaced by irq_disable
|
||||
* @ack: deprecated, replaced by irq_ack
|
||||
* @mask: deprecated, replaced by irq_mask
|
||||
* @mask_ack: deprecated, replaced by irq_mask_ack
|
||||
* @unmask: deprecated, replaced by irq_unmask
|
||||
* @eoi: deprecated, replaced by irq_eoi
|
||||
* @end: deprecated, will go away with __do_IRQ()
|
||||
* @set_affinity: deprecated, replaced by irq_set_affinity
|
||||
* @retrigger: deprecated, replaced by irq_retrigger
|
||||
* @set_type: deprecated, replaced by irq_set_type
|
||||
* @set_wake: deprecated, replaced by irq_wake
|
||||
* @bus_lock: deprecated, replaced by irq_bus_lock
|
||||
* @bus_sync_unlock: deprecated, replaced by irq_bus_sync_unlock
|
||||
*
|
||||
* @irq_startup: start up the interrupt (defaults to ->enable if NULL)
|
||||
* @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
|
||||
* @irq_enable: enable the interrupt (defaults to chip->unmask if NULL)
|
||||
|
|
@ -295,6 +280,9 @@ static inline void irqd_clr_chained_irq_inprogress(struct irq_data *d)
|
|||
* @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips
|
||||
* @irq_cpu_online: configure an interrupt source for a secondary CPU
|
||||
* @irq_cpu_offline: un-configure an interrupt source for a secondary CPU
|
||||
* @irq_suspend: function called from core code on suspend once per chip
|
||||
* @irq_resume: function called from core code on resume once per chip
|
||||
* @irq_pm_shutdown: function called from core code on shutdown once per chip
|
||||
* @irq_print_chip: optional to print special chip info in show_interrupts
|
||||
* @flags: chip specific flags
|
||||
*
|
||||
|
|
@ -324,6 +312,10 @@ struct irq_chip {
|
|||
void (*irq_cpu_online)(struct irq_data *data);
|
||||
void (*irq_cpu_offline)(struct irq_data *data);
|
||||
|
||||
void (*irq_suspend)(struct irq_data *data);
|
||||
void (*irq_resume)(struct irq_data *data);
|
||||
void (*irq_pm_shutdown)(struct irq_data *data);
|
||||
|
||||
void (*irq_print_chip)(struct irq_data *data, struct seq_file *p);
|
||||
|
||||
unsigned long flags;
|
||||
|
|
@ -439,7 +431,7 @@ irq_set_handler(unsigned int irq, irq_flow_handler_t handle)
|
|||
/*
|
||||
* Set a highlevel chained flow handler for a given IRQ.
|
||||
* (a chained handler is automatically enabled and set to
|
||||
* IRQ_NOREQUEST and IRQ_NOPROBE)
|
||||
* IRQ_NOREQUEST, IRQ_NOPROBE, and IRQ_NOTHREAD)
|
||||
*/
|
||||
static inline void
|
||||
irq_set_chained_handler(unsigned int irq, irq_flow_handler_t handle)
|
||||
|
|
@ -469,6 +461,16 @@ static inline void irq_set_probe(unsigned int irq)
|
|||
irq_modify_status(irq, IRQ_NOPROBE, 0);
|
||||
}
|
||||
|
||||
static inline void irq_set_nothread(unsigned int irq)
|
||||
{
|
||||
irq_modify_status(irq, 0, IRQ_NOTHREAD);
|
||||
}
|
||||
|
||||
static inline void irq_set_thread(unsigned int irq)
|
||||
{
|
||||
irq_modify_status(irq, IRQ_NOTHREAD, 0);
|
||||
}
|
||||
|
||||
static inline void irq_set_nested_thread(unsigned int irq, bool nest)
|
||||
{
|
||||
if (nest)
|
||||
|
|
@ -573,6 +575,145 @@ static inline int irq_reserve_irq(unsigned int irq)
|
|||
return irq_reserve_irqs(irq, 1);
|
||||
}
|
||||
|
||||
#ifndef irq_reg_writel
|
||||
# define irq_reg_writel(val, addr) writel(val, addr)
|
||||
#endif
|
||||
#ifndef irq_reg_readl
|
||||
# define irq_reg_readl(addr) readl(addr)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct irq_chip_regs - register offsets for struct irq_gci
|
||||
* @enable: Enable register offset to reg_base
|
||||
* @disable: Disable register offset to reg_base
|
||||
* @mask: Mask register offset to reg_base
|
||||
* @ack: Ack register offset to reg_base
|
||||
* @eoi: Eoi register offset to reg_base
|
||||
* @type: Type configuration register offset to reg_base
|
||||
* @polarity: Polarity configuration register offset to reg_base
|
||||
*/
|
||||
struct irq_chip_regs {
|
||||
unsigned long enable;
|
||||
unsigned long disable;
|
||||
unsigned long mask;
|
||||
unsigned long ack;
|
||||
unsigned long eoi;
|
||||
unsigned long type;
|
||||
unsigned long polarity;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct irq_chip_type - Generic interrupt chip instance for a flow type
|
||||
* @chip: The real interrupt chip which provides the callbacks
|
||||
* @regs: Register offsets for this chip
|
||||
* @handler: Flow handler associated with this chip
|
||||
* @type: Chip can handle these flow types
|
||||
*
|
||||
* A irq_generic_chip can have several instances of irq_chip_type when
|
||||
* it requires different functions and register offsets for different
|
||||
* flow types.
|
||||
*/
|
||||
struct irq_chip_type {
|
||||
struct irq_chip chip;
|
||||
struct irq_chip_regs regs;
|
||||
irq_flow_handler_t handler;
|
||||
u32 type;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct irq_chip_generic - Generic irq chip data structure
|
||||
* @lock: Lock to protect register and cache data access
|
||||
* @reg_base: Register base address (virtual)
|
||||
* @irq_base: Interrupt base nr for this chip
|
||||
* @irq_cnt: Number of interrupts handled by this chip
|
||||
* @mask_cache: Cached mask register
|
||||
* @type_cache: Cached type register
|
||||
* @polarity_cache: Cached polarity register
|
||||
* @wake_enabled: Interrupt can wakeup from suspend
|
||||
* @wake_active: Interrupt is marked as an wakeup from suspend source
|
||||
* @num_ct: Number of available irq_chip_type instances (usually 1)
|
||||
* @private: Private data for non generic chip callbacks
|
||||
* @list: List head for keeping track of instances
|
||||
* @chip_types: Array of interrupt irq_chip_types
|
||||
*
|
||||
* Note, that irq_chip_generic can have multiple irq_chip_type
|
||||
* implementations which can be associated to a particular irq line of
|
||||
* an irq_chip_generic instance. That allows to share and protect
|
||||
* state in an irq_chip_generic instance when we need to implement
|
||||
* different flow mechanisms (level/edge) for it.
|
||||
*/
|
||||
struct irq_chip_generic {
|
||||
raw_spinlock_t lock;
|
||||
void __iomem *reg_base;
|
||||
unsigned int irq_base;
|
||||
unsigned int irq_cnt;
|
||||
u32 mask_cache;
|
||||
u32 type_cache;
|
||||
u32 polarity_cache;
|
||||
u32 wake_enabled;
|
||||
u32 wake_active;
|
||||
unsigned int num_ct;
|
||||
void *private;
|
||||
struct list_head list;
|
||||
struct irq_chip_type chip_types[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* enum irq_gc_flags - Initialization flags for generic irq chips
|
||||
* @IRQ_GC_INIT_MASK_CACHE: Initialize the mask_cache by reading mask reg
|
||||
* @IRQ_GC_INIT_NESTED_LOCK: Set the lock class of the irqs to nested for
|
||||
* irq chips which need to call irq_set_wake() on
|
||||
* the parent irq. Usually GPIO implementations
|
||||
*/
|
||||
enum irq_gc_flags {
|
||||
IRQ_GC_INIT_MASK_CACHE = 1 << 0,
|
||||
IRQ_GC_INIT_NESTED_LOCK = 1 << 1,
|
||||
};
|
||||
|
||||
/* Generic chip callback functions */
|
||||
void irq_gc_noop(struct irq_data *d);
|
||||
void irq_gc_mask_disable_reg(struct irq_data *d);
|
||||
void irq_gc_mask_set_bit(struct irq_data *d);
|
||||
void irq_gc_mask_clr_bit(struct irq_data *d);
|
||||
void irq_gc_unmask_enable_reg(struct irq_data *d);
|
||||
void irq_gc_ack(struct irq_data *d);
|
||||
void irq_gc_mask_disable_reg_and_ack(struct irq_data *d);
|
||||
void irq_gc_eoi(struct irq_data *d);
|
||||
int irq_gc_set_wake(struct irq_data *d, unsigned int on);
|
||||
|
||||
/* Setup functions for irq_chip_generic */
|
||||
struct irq_chip_generic *
|
||||
irq_alloc_generic_chip(const char *name, int nr_ct, unsigned int irq_base,
|
||||
void __iomem *reg_base, irq_flow_handler_t handler);
|
||||
void irq_setup_generic_chip(struct irq_chip_generic *gc, u32 msk,
|
||||
enum irq_gc_flags flags, unsigned int clr,
|
||||
unsigned int set);
|
||||
int irq_setup_alt_chip(struct irq_data *d, unsigned int type);
|
||||
void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk,
|
||||
unsigned int clr, unsigned int set);
|
||||
|
||||
static inline struct irq_chip_type *irq_data_get_chip_type(struct irq_data *d)
|
||||
{
|
||||
return container_of(d->chip, struct irq_chip_type, chip);
|
||||
}
|
||||
|
||||
#define IRQ_MSK(n) (u32)((n) < 32 ? ((1 << (n)) - 1) : UINT_MAX)
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void irq_gc_lock(struct irq_chip_generic *gc)
|
||||
{
|
||||
raw_spin_lock(&gc->lock);
|
||||
}
|
||||
|
||||
static inline void irq_gc_unlock(struct irq_chip_generic *gc)
|
||||
{
|
||||
raw_spin_unlock(&gc->lock);
|
||||
}
|
||||
#else
|
||||
static inline void irq_gc_lock(struct irq_chip_generic *gc) { }
|
||||
static inline void irq_gc_unlock(struct irq_chip_generic *gc) { }
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_GENERIC_HARDIRQS */
|
||||
|
||||
#endif /* !CONFIG_S390 */
|
||||
|
|
|
|||
|
|
@ -16,16 +16,18 @@ struct timer_rand_state;
|
|||
* @irq_data: per irq and chip data passed down to chip functions
|
||||
* @timer_rand_state: pointer to timer rand state struct
|
||||
* @kstat_irqs: irq stats per cpu
|
||||
* @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()]
|
||||
* @handle_irq: highlevel irq-events handler
|
||||
* @preflow_handler: handler called before the flow handler (currently used by sparc)
|
||||
* @action: the irq action chain
|
||||
* @status: status information
|
||||
* @core_internal_state__do_not_mess_with_it: core internal status information
|
||||
* @depth: disable-depth, for nested irq_disable() calls
|
||||
* @wake_depth: enable depth, for multiple set_irq_wake() callers
|
||||
* @wake_depth: enable depth, for multiple irq_set_irq_wake() callers
|
||||
* @irq_count: stats field to detect stalled irqs
|
||||
* @last_unhandled: aging timer for unhandled count
|
||||
* @irqs_unhandled: stats field for spurious unhandled interrupts
|
||||
* @lock: locking for SMP
|
||||
* @affinity_hint: hint to user space for preferred irq affinity
|
||||
* @affinity_notify: context for notification of affinity changes
|
||||
* @pending_mask: pending rebalanced interrupts
|
||||
* @threads_oneshot: bitfield to handle shared oneshot threads
|
||||
|
|
@ -109,10 +111,7 @@ static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *de
|
|||
desc->handle_irq(irq, desc);
|
||||
}
|
||||
|
||||
static inline void generic_handle_irq(unsigned int irq)
|
||||
{
|
||||
generic_handle_irq_desc(irq, irq_to_desc(irq));
|
||||
}
|
||||
int generic_handle_irq(unsigned int irq);
|
||||
|
||||
/* Test to see if a driver has successfully requested an irq */
|
||||
static inline int irq_has_action(unsigned int irq)
|
||||
|
|
|
|||
|
|
@ -1,20 +1,43 @@
|
|||
#ifndef _LINUX_JUMP_LABEL_H
|
||||
#define _LINUX_JUMP_LABEL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
|
||||
|
||||
struct jump_label_key {
|
||||
atomic_t enabled;
|
||||
struct jump_entry *entries;
|
||||
#ifdef CONFIG_MODULES
|
||||
struct jump_label_mod *next;
|
||||
#endif
|
||||
};
|
||||
|
||||
# include <asm/jump_label.h>
|
||||
# define HAVE_JUMP_LABEL
|
||||
#endif
|
||||
|
||||
enum jump_label_type {
|
||||
JUMP_LABEL_DISABLE = 0,
|
||||
JUMP_LABEL_ENABLE,
|
||||
JUMP_LABEL_DISABLE
|
||||
};
|
||||
|
||||
struct module;
|
||||
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
#define JUMP_LABEL_INIT {{ 0 }, NULL, NULL}
|
||||
#else
|
||||
#define JUMP_LABEL_INIT {{ 0 }, NULL}
|
||||
#endif
|
||||
|
||||
static __always_inline bool static_branch(struct jump_label_key *key)
|
||||
{
|
||||
return arch_static_branch(key);
|
||||
}
|
||||
|
||||
extern struct jump_entry __start___jump_table[];
|
||||
extern struct jump_entry __stop___jump_table[];
|
||||
|
||||
|
|
@ -23,37 +46,37 @@ extern void jump_label_unlock(void);
|
|||
extern void arch_jump_label_transform(struct jump_entry *entry,
|
||||
enum jump_label_type type);
|
||||
extern void arch_jump_label_text_poke_early(jump_label_t addr);
|
||||
extern void jump_label_update(unsigned long key, enum jump_label_type type);
|
||||
extern void jump_label_apply_nops(struct module *mod);
|
||||
extern int jump_label_text_reserved(void *start, void *end);
|
||||
|
||||
#define jump_label_enable(key) \
|
||||
jump_label_update((unsigned long)key, JUMP_LABEL_ENABLE);
|
||||
|
||||
#define jump_label_disable(key) \
|
||||
jump_label_update((unsigned long)key, JUMP_LABEL_DISABLE);
|
||||
extern void jump_label_inc(struct jump_label_key *key);
|
||||
extern void jump_label_dec(struct jump_label_key *key);
|
||||
extern bool jump_label_enabled(struct jump_label_key *key);
|
||||
extern void jump_label_apply_nops(struct module *mod);
|
||||
|
||||
#else
|
||||
|
||||
#define JUMP_LABEL(key, label) \
|
||||
do { \
|
||||
if (unlikely(*key)) \
|
||||
goto label; \
|
||||
} while (0)
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#define jump_label_enable(cond_var) \
|
||||
do { \
|
||||
*(cond_var) = 1; \
|
||||
} while (0)
|
||||
#define JUMP_LABEL_INIT {ATOMIC_INIT(0)}
|
||||
|
||||
#define jump_label_disable(cond_var) \
|
||||
do { \
|
||||
*(cond_var) = 0; \
|
||||
} while (0)
|
||||
struct jump_label_key {
|
||||
atomic_t enabled;
|
||||
};
|
||||
|
||||
static inline int jump_label_apply_nops(struct module *mod)
|
||||
static __always_inline bool static_branch(struct jump_label_key *key)
|
||||
{
|
||||
return 0;
|
||||
if (unlikely(atomic_read(&key->enabled)))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void jump_label_inc(struct jump_label_key *key)
|
||||
{
|
||||
atomic_inc(&key->enabled);
|
||||
}
|
||||
|
||||
static inline void jump_label_dec(struct jump_label_key *key)
|
||||
{
|
||||
atomic_dec(&key->enabled);
|
||||
}
|
||||
|
||||
static inline int jump_label_text_reserved(void *start, void *end)
|
||||
|
|
@ -64,16 +87,16 @@ static inline int jump_label_text_reserved(void *start, void *end)
|
|||
static inline void jump_label_lock(void) {}
|
||||
static inline void jump_label_unlock(void) {}
|
||||
|
||||
#endif
|
||||
static inline bool jump_label_enabled(struct jump_label_key *key)
|
||||
{
|
||||
return !!atomic_read(&key->enabled);
|
||||
}
|
||||
|
||||
#define COND_STMT(key, stmt) \
|
||||
do { \
|
||||
__label__ jl_enabled; \
|
||||
JUMP_LABEL(key, jl_enabled); \
|
||||
if (0) { \
|
||||
jl_enabled: \
|
||||
stmt; \
|
||||
} \
|
||||
} while (0)
|
||||
static inline int jump_label_apply_nops(struct module *mod)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,44 +0,0 @@
|
|||
#ifndef _LINUX_JUMP_LABEL_REF_H
|
||||
#define _LINUX_JUMP_LABEL_REF_H
|
||||
|
||||
#include <linux/jump_label.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
|
||||
static inline void jump_label_inc(atomic_t *key)
|
||||
{
|
||||
if (atomic_add_return(1, key) == 1)
|
||||
jump_label_enable(key);
|
||||
}
|
||||
|
||||
static inline void jump_label_dec(atomic_t *key)
|
||||
{
|
||||
if (atomic_dec_and_test(key))
|
||||
jump_label_disable(key);
|
||||
}
|
||||
|
||||
#else /* !HAVE_JUMP_LABEL */
|
||||
|
||||
static inline void jump_label_inc(atomic_t *key)
|
||||
{
|
||||
atomic_inc(key);
|
||||
}
|
||||
|
||||
static inline void jump_label_dec(atomic_t *key)
|
||||
{
|
||||
atomic_dec(key);
|
||||
}
|
||||
|
||||
#undef JUMP_LABEL
|
||||
#define JUMP_LABEL(key, label) \
|
||||
do { \
|
||||
if (unlikely(__builtin_choose_expr( \
|
||||
__builtin_types_compatible_p(typeof(key), atomic_t *), \
|
||||
atomic_read((atomic_t *)(key)), *(key)))) \
|
||||
goto label; \
|
||||
} while (0)
|
||||
|
||||
#endif /* HAVE_JUMP_LABEL */
|
||||
|
||||
#endif /* _LINUX_JUMP_LABEL_REF_H */
|
||||
|
|
@ -283,6 +283,7 @@ extern char *get_options(const char *str, int nints, int *ints);
|
|||
extern unsigned long long memparse(const char *ptr, char **retptr);
|
||||
|
||||
extern int core_kernel_text(unsigned long addr);
|
||||
extern int core_kernel_data(unsigned long addr);
|
||||
extern int __kernel_text_address(unsigned long addr);
|
||||
extern int kernel_text_address(unsigned long addr);
|
||||
extern int func_ptr_is_kernel_text(void *ptr);
|
||||
|
|
|
|||
|
|
@ -113,5 +113,6 @@ extern void usermodehelper_init(void);
|
|||
|
||||
extern int usermodehelper_disable(void);
|
||||
extern void usermodehelper_enable(void);
|
||||
extern bool usermodehelper_is_disabled(void);
|
||||
|
||||
#endif /* __LINUX_KMOD_H__ */
|
||||
|
|
|
|||
|
|
@ -541,6 +541,9 @@ struct kvm_ppc_pvinfo {
|
|||
#define KVM_CAP_PPC_GET_PVINFO 57
|
||||
#define KVM_CAP_PPC_IRQ_LEVEL 58
|
||||
#define KVM_CAP_ASYNC_PF 59
|
||||
#define KVM_CAP_TSC_CONTROL 60
|
||||
#define KVM_CAP_GET_TSC_KHZ 61
|
||||
#define KVM_CAP_PPC_BOOKE_SREGS 62
|
||||
|
||||
#ifdef KVM_CAP_IRQ_ROUTING
|
||||
|
||||
|
|
@ -677,6 +680,9 @@ struct kvm_clock_data {
|
|||
#define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2)
|
||||
/* Available with KVM_CAP_PPC_GET_PVINFO */
|
||||
#define KVM_PPC_GET_PVINFO _IOW(KVMIO, 0xa1, struct kvm_ppc_pvinfo)
|
||||
/* Available with KVM_CAP_TSC_CONTROL */
|
||||
#define KVM_SET_TSC_KHZ _IO(KVMIO, 0xa2)
|
||||
#define KVM_GET_TSC_KHZ _IO(KVMIO, 0xa3)
|
||||
|
||||
/*
|
||||
* ioctls for vcpu fds
|
||||
|
|
|
|||
|
|
@ -27,6 +27,10 @@
|
|||
|
||||
#include <asm/kvm_host.h>
|
||||
|
||||
#ifndef KVM_MMIO_SIZE
|
||||
#define KVM_MMIO_SIZE 8
|
||||
#endif
|
||||
|
||||
/*
|
||||
* vcpu->requests bit members
|
||||
*/
|
||||
|
|
@ -43,7 +47,6 @@
|
|||
#define KVM_REQ_DEACTIVATE_FPU 10
|
||||
#define KVM_REQ_EVENT 11
|
||||
#define KVM_REQ_APF_HALT 12
|
||||
#define KVM_REQ_NMI 13
|
||||
|
||||
#define KVM_USERSPACE_IRQ_SOURCE_ID 0
|
||||
|
||||
|
|
@ -133,7 +136,8 @@ struct kvm_vcpu {
|
|||
int mmio_read_completed;
|
||||
int mmio_is_write;
|
||||
int mmio_size;
|
||||
unsigned char mmio_data[8];
|
||||
int mmio_index;
|
||||
unsigned char mmio_data[KVM_MMIO_SIZE];
|
||||
gpa_t mmio_phys_addr;
|
||||
#endif
|
||||
|
||||
|
|
@ -292,9 +296,10 @@ static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i)
|
|||
}
|
||||
|
||||
#define kvm_for_each_vcpu(idx, vcpup, kvm) \
|
||||
for (idx = 0, vcpup = kvm_get_vcpu(kvm, idx); \
|
||||
idx < atomic_read(&kvm->online_vcpus) && vcpup; \
|
||||
vcpup = kvm_get_vcpu(kvm, ++idx))
|
||||
for (idx = 0; \
|
||||
idx < atomic_read(&kvm->online_vcpus) && \
|
||||
(vcpup = kvm_get_vcpu(kvm, idx)) != NULL; \
|
||||
idx++)
|
||||
|
||||
int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id);
|
||||
void kvm_vcpu_uninit(struct kvm_vcpu *vcpu);
|
||||
|
|
@ -365,7 +370,6 @@ pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault,
|
|||
bool *writable);
|
||||
pfn_t gfn_to_pfn_memslot(struct kvm *kvm,
|
||||
struct kvm_memory_slot *slot, gfn_t gfn);
|
||||
int memslot_id(struct kvm *kvm, gfn_t gfn);
|
||||
void kvm_release_pfn_dirty(pfn_t);
|
||||
void kvm_release_pfn_clean(pfn_t pfn);
|
||||
void kvm_set_pfn_dirty(pfn_t pfn);
|
||||
|
|
@ -513,6 +517,7 @@ struct kvm_assigned_dev_kernel {
|
|||
struct kvm *kvm;
|
||||
spinlock_t intx_lock;
|
||||
char irq_name[32];
|
||||
struct pci_saved_state *pci_saved_state;
|
||||
};
|
||||
|
||||
struct kvm_irq_mask_notifier {
|
||||
|
|
@ -587,8 +592,17 @@ static inline int kvm_deassign_device(struct kvm *kvm,
|
|||
|
||||
static inline void kvm_guest_enter(void)
|
||||
{
|
||||
BUG_ON(preemptible());
|
||||
account_system_vtime(current);
|
||||
current->flags |= PF_VCPU;
|
||||
/* KVM does not hold any references to rcu protected data when it
|
||||
* switches CPU into a guest mode. In fact switching to a guest mode
|
||||
* is very similar to exiting to userspase from rcu point of view. In
|
||||
* addition CPU may stay in a guest mode for quite a long time (up to
|
||||
* one time slice). Lets treat guest mode as quiescent state, just like
|
||||
* we do with user-mode execution.
|
||||
*/
|
||||
rcu_virt_note_context_switch(smp_processor_id());
|
||||
}
|
||||
|
||||
static inline void kvm_guest_exit(void)
|
||||
|
|
@ -597,6 +611,11 @@ static inline void kvm_guest_exit(void)
|
|||
current->flags &= ~PF_VCPU;
|
||||
}
|
||||
|
||||
static inline int memslot_id(struct kvm *kvm, gfn_t gfn)
|
||||
{
|
||||
return gfn_to_memslot(kvm, gfn)->id;
|
||||
}
|
||||
|
||||
static inline unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot,
|
||||
gfn_t gfn)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
* Use "vled" as supply id when declaring the regulator consumer:
|
||||
*
|
||||
* static struct regulator_consumer_supply pcap_regulator_VVIB_consumers [] = {
|
||||
* { .dev_name = "leds-regulator.0", supply = "vled" },
|
||||
* { .dev_name = "leds-regulator.0", .supply = "vled" },
|
||||
* };
|
||||
*
|
||||
* If you have several regulator driven LEDs, you can append a numerical id to
|
||||
|
|
|
|||
|
|
@ -1151,6 +1151,7 @@ extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
|
|||
ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
|
||||
ata_postreset_fn_t postreset);
|
||||
extern void ata_std_error_handler(struct ata_port *ap);
|
||||
extern int ata_link_nr_enabled(struct ata_link *link);
|
||||
|
||||
/*
|
||||
* Base operations to inherit from and initializers for sht
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/poison.h>
|
||||
#include <linux/prefetch.h>
|
||||
#include <linux/const.h>
|
||||
|
||||
/*
|
||||
* Simple doubly linked list implementation.
|
||||
|
|
@ -367,18 +367,15 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each(pos, head) \
|
||||
for (pos = (head)->next; prefetch(pos->next), pos != (head); \
|
||||
pos = pos->next)
|
||||
for (pos = (head)->next; pos != (head); pos = pos->next)
|
||||
|
||||
/**
|
||||
* __list_for_each - iterate over a list
|
||||
* @pos: the &struct list_head to use as a loop cursor.
|
||||
* @head: the head for your list.
|
||||
*
|
||||
* This variant differs from list_for_each() in that it's the
|
||||
* simplest possible list iteration code, no prefetching is done.
|
||||
* Use this for code that knows the list to be very short (empty
|
||||
* or 1 entry) most of the time.
|
||||
* This variant doesn't differ from list_for_each() any more.
|
||||
* We don't do prefetching in either case.
|
||||
*/
|
||||
#define __list_for_each(pos, head) \
|
||||
for (pos = (head)->next; pos != (head); pos = pos->next)
|
||||
|
|
@ -389,8 +386,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each_prev(pos, head) \
|
||||
for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
|
||||
pos = pos->prev)
|
||||
for (pos = (head)->prev; pos != (head); pos = pos->prev)
|
||||
|
||||
/**
|
||||
* list_for_each_safe - iterate over a list safe against removal of list entry
|
||||
|
|
@ -410,7 +406,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_prev_safe(pos, n, head) \
|
||||
for (pos = (head)->prev, n = pos->prev; \
|
||||
prefetch(pos->prev), pos != (head); \
|
||||
pos != (head); \
|
||||
pos = n, n = pos->prev)
|
||||
|
||||
/**
|
||||
|
|
@ -421,7 +417,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_entry(pos, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member); \
|
||||
prefetch(pos->member.next), &pos->member != (head); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
|
||||
/**
|
||||
|
|
@ -432,7 +428,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_entry_reverse(pos, head, member) \
|
||||
for (pos = list_entry((head)->prev, typeof(*pos), member); \
|
||||
prefetch(pos->member.prev), &pos->member != (head); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.prev, typeof(*pos), member))
|
||||
|
||||
/**
|
||||
|
|
@ -457,7 +453,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_entry_continue(pos, head, member) \
|
||||
for (pos = list_entry(pos->member.next, typeof(*pos), member); \
|
||||
prefetch(pos->member.next), &pos->member != (head); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
|
||||
/**
|
||||
|
|
@ -471,7 +467,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_entry_continue_reverse(pos, head, member) \
|
||||
for (pos = list_entry(pos->member.prev, typeof(*pos), member); \
|
||||
prefetch(pos->member.prev), &pos->member != (head); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.prev, typeof(*pos), member))
|
||||
|
||||
/**
|
||||
|
|
@ -483,7 +479,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
|||
* Iterate over list of given type, continuing from current position.
|
||||
*/
|
||||
#define list_for_each_entry_from(pos, head, member) \
|
||||
for (; prefetch(pos->member.next), &pos->member != (head); \
|
||||
for (; &pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
|
||||
/**
|
||||
|
|
@ -664,8 +660,7 @@ static inline void hlist_move_list(struct hlist_head *old,
|
|||
#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
|
||||
|
||||
#define hlist_for_each(pos, head) \
|
||||
for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
|
||||
pos = pos->next)
|
||||
for (pos = (head)->first; pos ; pos = pos->next)
|
||||
|
||||
#define hlist_for_each_safe(pos, n, head) \
|
||||
for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
|
||||
|
|
@ -680,7 +675,7 @@ static inline void hlist_move_list(struct hlist_head *old,
|
|||
*/
|
||||
#define hlist_for_each_entry(tpos, pos, head, member) \
|
||||
for (pos = (head)->first; \
|
||||
pos && ({ prefetch(pos->next); 1;}) && \
|
||||
pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
|
||||
pos = pos->next)
|
||||
|
||||
|
|
@ -692,7 +687,7 @@ static inline void hlist_move_list(struct hlist_head *old,
|
|||
*/
|
||||
#define hlist_for_each_entry_continue(tpos, pos, member) \
|
||||
for (pos = (pos)->next; \
|
||||
pos && ({ prefetch(pos->next); 1;}) && \
|
||||
pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
|
||||
pos = pos->next)
|
||||
|
||||
|
|
@ -703,7 +698,7 @@ static inline void hlist_move_list(struct hlist_head *old,
|
|||
* @member: the name of the hlist_node within the struct.
|
||||
*/
|
||||
#define hlist_for_each_entry_from(tpos, pos, member) \
|
||||
for (; pos && ({ prefetch(pos->next); 1;}) && \
|
||||
for (; pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
|
||||
pos = pos->next)
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@ struct wm8994_ldo_pdata {
|
|||
#define WM8994_EQ_REGS 20
|
||||
#define WM8958_MBC_CUTOFF_REGS 20
|
||||
#define WM8958_MBC_COEFF_REGS 48
|
||||
#define WM8958_MBC_COMBINED_REGS 56
|
||||
#define WM8958_VSS_HPF_REGS 2
|
||||
#define WM8958_VSS_REGS 148
|
||||
#define WM8958_ENH_EQ_REGS 32
|
||||
|
||||
/**
|
||||
* DRC configurations are specified with a label and a set of register
|
||||
|
|
@ -71,6 +75,42 @@ struct wm8958_mbc_cfg {
|
|||
const char *name;
|
||||
u16 cutoff_regs[WM8958_MBC_CUTOFF_REGS];
|
||||
u16 coeff_regs[WM8958_MBC_COEFF_REGS];
|
||||
|
||||
/* Coefficient layout when using MBC+VSS firmware */
|
||||
u16 combined_regs[WM8958_MBC_COMBINED_REGS];
|
||||
};
|
||||
|
||||
/**
|
||||
* VSS HPF configurations are specified with a label and two values to
|
||||
* write. Configurations are expected to be generated using the
|
||||
* multiband compressor configuration panel in WISCE - see
|
||||
* http://www.wolfsonmicro.com/wisce/
|
||||
*/
|
||||
struct wm8958_vss_hpf_cfg {
|
||||
const char *name;
|
||||
u16 regs[WM8958_VSS_HPF_REGS];
|
||||
};
|
||||
|
||||
/**
|
||||
* VSS configurations are specified with a label and array of values
|
||||
* to write. Configurations are expected to be generated using the
|
||||
* multiband compressor configuration panel in WISCE - see
|
||||
* http://www.wolfsonmicro.com/wisce/
|
||||
*/
|
||||
struct wm8958_vss_cfg {
|
||||
const char *name;
|
||||
u16 regs[WM8958_VSS_REGS];
|
||||
};
|
||||
|
||||
/**
|
||||
* Enhanced EQ configurations are specified with a label and array of
|
||||
* values to write. Configurations are expected to be generated using
|
||||
* the multiband compressor configuration panel in WISCE - see
|
||||
* http://www.wolfsonmicro.com/wisce/
|
||||
*/
|
||||
struct wm8958_enh_eq_cfg {
|
||||
const char *name;
|
||||
u16 regs[WM8958_ENH_EQ_REGS];
|
||||
};
|
||||
|
||||
struct wm8994_pdata {
|
||||
|
|
@ -95,6 +135,15 @@ struct wm8994_pdata {
|
|||
int num_mbc_cfgs;
|
||||
struct wm8958_mbc_cfg *mbc_cfgs;
|
||||
|
||||
int num_vss_cfgs;
|
||||
struct wm8958_vss_cfg *vss_cfgs;
|
||||
|
||||
int num_vss_hpf_cfgs;
|
||||
struct wm8958_vss_hpf_cfg *vss_hpf_cfgs;
|
||||
|
||||
int num_enh_eq_cfgs;
|
||||
struct wm8958_enh_eq_cfg *enh_eq_cfgs;
|
||||
|
||||
/* LINEOUT can be differential or single ended */
|
||||
unsigned int lineout1_diff:1;
|
||||
unsigned int lineout2_diff:1;
|
||||
|
|
|
|||
|
|
@ -183,6 +183,7 @@ struct mmc_host {
|
|||
struct work_struct clk_gate_work; /* delayed clock gate */
|
||||
unsigned int clk_old; /* old clock value cache */
|
||||
spinlock_t clk_lock; /* lock for clk fields */
|
||||
struct mutex clk_gate_mutex; /* mutex for clock gating */
|
||||
#endif
|
||||
|
||||
/* host specific block data */
|
||||
|
|
|
|||
|
|
@ -382,6 +382,23 @@ struct ssb_device_id {
|
|||
#define SSB_ANY_ID 0xFFFF
|
||||
#define SSB_ANY_REV 0xFF
|
||||
|
||||
/* Broadcom's specific AMBA core, see drivers/bcma/ */
|
||||
struct bcma_device_id {
|
||||
__u16 manuf;
|
||||
__u16 id;
|
||||
__u8 rev;
|
||||
__u8 class;
|
||||
};
|
||||
#define BCMA_CORE(_manuf, _id, _rev, _class) \
|
||||
{ .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, }
|
||||
#define BCMA_CORETABLE_END \
|
||||
{ 0, },
|
||||
|
||||
#define BCMA_ANY_MANUF 0xFFFF
|
||||
#define BCMA_ANY_ID 0xFFFF
|
||||
#define BCMA_ANY_REV 0xFF
|
||||
#define BCMA_ANY_CLASS 0xFF
|
||||
|
||||
struct virtio_device_id {
|
||||
__u32 device;
|
||||
__u32 vendor;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,9 @@ struct module_version_attribute {
|
|||
const char *version;
|
||||
} __attribute__ ((__aligned__(sizeof(void *))));
|
||||
|
||||
extern ssize_t __modver_version_show(struct module_attribute *,
|
||||
struct module *, char *);
|
||||
|
||||
struct module_kobject
|
||||
{
|
||||
struct kobject kobj;
|
||||
|
|
@ -172,12 +175,7 @@ extern struct module __this_module;
|
|||
#define MODULE_VERSION(_version) MODULE_INFO(version, _version)
|
||||
#else
|
||||
#define MODULE_VERSION(_version) \
|
||||
extern ssize_t __modver_version_show(struct module_attribute *, \
|
||||
struct module *, char *); \
|
||||
static struct module_version_attribute __modver_version_attr \
|
||||
__used \
|
||||
__attribute__ ((__section__ ("__modver"),aligned(sizeof(void *)))) \
|
||||
= { \
|
||||
static struct module_version_attribute ___modver_attr = { \
|
||||
.mattr = { \
|
||||
.attr = { \
|
||||
.name = "version", \
|
||||
|
|
@ -187,7 +185,10 @@ extern struct module __this_module;
|
|||
}, \
|
||||
.module_name = KBUILD_MODNAME, \
|
||||
.version = _version, \
|
||||
}
|
||||
}; \
|
||||
static const struct module_version_attribute \
|
||||
__used __attribute__ ((__section__ ("__modver"))) \
|
||||
* __moduleparam_const __modver_attr = &___modver_attr
|
||||
#endif
|
||||
|
||||
/* Optional firmware file (or files) needed by the module
|
||||
|
|
@ -223,7 +224,7 @@ struct module_use {
|
|||
extern void *__crc_##sym __attribute__((weak)); \
|
||||
static const unsigned long __kcrctab_##sym \
|
||||
__used \
|
||||
__attribute__((section("__kcrctab" sec), unused)) \
|
||||
__attribute__((section("___kcrctab" sec "+" #sym), unused)) \
|
||||
= (unsigned long) &__crc_##sym;
|
||||
#else
|
||||
#define __CRC_SYMBOL(sym, sec)
|
||||
|
|
@ -238,7 +239,7 @@ struct module_use {
|
|||
= MODULE_SYMBOL_PREFIX #sym; \
|
||||
static const struct kernel_symbol __ksymtab_##sym \
|
||||
__used \
|
||||
__attribute__((section("__ksymtab" sec), unused)) \
|
||||
__attribute__((section("___ksymtab" sec "+" #sym), unused)) \
|
||||
= { (unsigned long)&sym, __kstrtab_##sym }
|
||||
|
||||
#define EXPORT_SYMBOL(sym) \
|
||||
|
|
@ -367,34 +368,35 @@ struct module
|
|||
struct module_notes_attrs *notes_attrs;
|
||||
#endif
|
||||
|
||||
/* The command line arguments (may be mangled). People like
|
||||
keeping pointers to this stuff */
|
||||
char *args;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/* Per-cpu data. */
|
||||
void __percpu *percpu;
|
||||
unsigned int percpu_size;
|
||||
#endif
|
||||
|
||||
/* The command line arguments (may be mangled). People like
|
||||
keeping pointers to this stuff */
|
||||
char *args;
|
||||
#ifdef CONFIG_TRACEPOINTS
|
||||
struct tracepoint * const *tracepoints_ptrs;
|
||||
unsigned int num_tracepoints;
|
||||
struct tracepoint * const *tracepoints_ptrs;
|
||||
#endif
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
struct jump_entry *jump_entries;
|
||||
unsigned int num_jump_entries;
|
||||
#endif
|
||||
#ifdef CONFIG_TRACING
|
||||
const char **trace_bprintk_fmt_start;
|
||||
unsigned int num_trace_bprintk_fmt;
|
||||
const char **trace_bprintk_fmt_start;
|
||||
#endif
|
||||
#ifdef CONFIG_EVENT_TRACING
|
||||
struct ftrace_event_call **trace_events;
|
||||
unsigned int num_trace_events;
|
||||
#endif
|
||||
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
||||
unsigned long *ftrace_callsites;
|
||||
unsigned int num_ftrace_callsites;
|
||||
unsigned long *ftrace_callsites;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MODULE_UNLOAD
|
||||
|
|
@ -475,8 +477,9 @@ const struct kernel_symbol *find_symbol(const char *name,
|
|||
bool warn);
|
||||
|
||||
/* Walk the exported symbol table */
|
||||
bool each_symbol(bool (*fn)(const struct symsearch *arr, struct module *owner,
|
||||
unsigned int symnum, void *data), void *data);
|
||||
bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
|
||||
struct module *owner,
|
||||
void *data), void *data);
|
||||
|
||||
/* Returns 0 and fills in value, defined and namebuf, or -ERANGE if
|
||||
symnum out of range. */
|
||||
|
|
|
|||
|
|
@ -67,9 +67,9 @@ struct kparam_string {
|
|||
struct kparam_array
|
||||
{
|
||||
unsigned int max;
|
||||
unsigned int elemsize;
|
||||
unsigned int *num;
|
||||
const struct kernel_param_ops *ops;
|
||||
unsigned int elemsize;
|
||||
void *elem;
|
||||
};
|
||||
|
||||
|
|
@ -371,8 +371,9 @@ extern int param_get_invbool(char *buffer, const struct kernel_param *kp);
|
|||
*/
|
||||
#define module_param_array_named(name, array, type, nump, perm) \
|
||||
static const struct kparam_array __param_arr_##name \
|
||||
= { ARRAY_SIZE(array), nump, ¶m_ops_##type, \
|
||||
sizeof(array[0]), array }; \
|
||||
= { .max = ARRAY_SIZE(array), .num = nump, \
|
||||
.ops = ¶m_ops_##type, \
|
||||
.elemsize = sizeof(array[0]), .elem = array }; \
|
||||
__module_param_call(MODULE_PARAM_PREFIX, name, \
|
||||
¶m_array_ops, \
|
||||
.arr = &__param_arr_##name, \
|
||||
|
|
|
|||
|
|
@ -244,6 +244,7 @@ struct mfc_cache {
|
|||
#ifdef __KERNEL__
|
||||
struct rtmsg;
|
||||
extern int ipmr_get_route(struct net *net, struct sk_buff *skb,
|
||||
__be32 saddr, __be32 daddr,
|
||||
struct rtmsg *rtm, int nowait);
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,9 @@ struct map_info;
|
|||
|
||||
struct physmap_flash_data {
|
||||
unsigned int width;
|
||||
void (*set_vpp)(struct map_info *, int);
|
||||
int (*init)(struct platform_device *);
|
||||
void (*exit)(struct platform_device *);
|
||||
void (*set_vpp)(struct platform_device *, int);
|
||||
unsigned int nr_parts;
|
||||
unsigned int pfow_base;
|
||||
char *probe_type;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ struct mutex {
|
|||
spinlock_t wait_lock;
|
||||
struct list_head wait_list;
|
||||
#if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_SMP)
|
||||
struct thread_info *owner;
|
||||
struct task_struct *owner;
|
||||
#endif
|
||||
#ifdef CONFIG_DEBUG_MUTEXES
|
||||
const char *name;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#define SYS_RECVMSG 17 /* sys_recvmsg(2) */
|
||||
#define SYS_ACCEPT4 18 /* sys_accept4(2) */
|
||||
#define SYS_RECVMMSG 19 /* sys_recvmmsg(2) */
|
||||
#define SYS_SENDMMSG 20 /* sys_sendmmsg(2) */
|
||||
|
||||
typedef enum {
|
||||
SS_FREE = 0, /* not allocated */
|
||||
|
|
|
|||
|
|
@ -1020,9 +1020,6 @@ struct net_device {
|
|||
* part of the usual set specified in Space.c.
|
||||
*/
|
||||
|
||||
unsigned char if_port; /* Selectable AUI, TP,..*/
|
||||
unsigned char dma; /* DMA channel */
|
||||
|
||||
unsigned long state;
|
||||
|
||||
struct list_head dev_list;
|
||||
|
|
@ -1035,7 +1032,7 @@ struct net_device {
|
|||
u32 hw_features;
|
||||
/* user-requested features */
|
||||
u32 wanted_features;
|
||||
/* VLAN feature mask */
|
||||
/* mask of features inheritable by VLAN devices */
|
||||
u32 vlan_features;
|
||||
|
||||
/* Net device feature bits; if you change something,
|
||||
|
|
@ -1066,6 +1063,8 @@ struct net_device {
|
|||
#define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */
|
||||
#define NETIF_F_RXHASH (1 << 28) /* Receive hashing offload */
|
||||
#define NETIF_F_RXCSUM (1 << 29) /* Receive checksumming offload */
|
||||
#define NETIF_F_NOCACHE_COPY (1 << 30) /* Use no-cache copyfromuser */
|
||||
#define NETIF_F_LOOPBACK (1 << 31) /* Enable loopback */
|
||||
|
||||
/* Segmentation offload features */
|
||||
#define NETIF_F_GSO_SHIFT 16
|
||||
|
|
@ -1079,9 +1078,9 @@ struct net_device {
|
|||
|
||||
/* Features valid for ethtool to change */
|
||||
/* = all defined minus driver/device-class-related */
|
||||
#define NETIF_F_NEVER_CHANGE (NETIF_F_HIGHDMA | NETIF_F_VLAN_CHALLENGED | \
|
||||
#define NETIF_F_NEVER_CHANGE (NETIF_F_VLAN_CHALLENGED | \
|
||||
NETIF_F_LLTX | NETIF_F_NETNS_LOCAL)
|
||||
#define NETIF_F_ETHTOOL_BITS (0x3f3fffff & ~NETIF_F_NEVER_CHANGE)
|
||||
#define NETIF_F_ETHTOOL_BITS (0xff3fffff & ~NETIF_F_NEVER_CHANGE)
|
||||
|
||||
/* List of features with software fallbacks. */
|
||||
#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | \
|
||||
|
|
@ -1095,9 +1094,14 @@ struct net_device {
|
|||
|
||||
#define NETIF_F_ALL_TSO (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
|
||||
|
||||
#define NETIF_F_ALL_FCOE (NETIF_F_FCOE_CRC | NETIF_F_FCOE_MTU | \
|
||||
NETIF_F_FSO)
|
||||
|
||||
#define NETIF_F_ALL_TX_OFFLOADS (NETIF_F_ALL_CSUM | NETIF_F_SG | \
|
||||
NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
|
||||
NETIF_F_SCTP_CSUM | NETIF_F_FCOE_CRC)
|
||||
NETIF_F_HIGHDMA | \
|
||||
NETIF_F_SCTP_CSUM | \
|
||||
NETIF_F_ALL_FCOE)
|
||||
|
||||
/*
|
||||
* If one device supports one of these features, then enable them
|
||||
|
|
@ -1105,7 +1109,12 @@ struct net_device {
|
|||
*/
|
||||
#define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \
|
||||
NETIF_F_SG | NETIF_F_HIGHDMA | \
|
||||
NETIF_F_FRAGLIST)
|
||||
NETIF_F_FRAGLIST | NETIF_F_VLAN_CHALLENGED)
|
||||
/*
|
||||
* If one device doesn't support one of these features, then disable it
|
||||
* for all in netdev_increment_features.
|
||||
*/
|
||||
#define NETIF_F_ALL_FOR_ALL (NETIF_F_NOCACHE_COPY | NETIF_F_FSO)
|
||||
|
||||
/* changeable features with no special hardware requirements */
|
||||
#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO)
|
||||
|
|
@ -1134,13 +1143,16 @@ struct net_device {
|
|||
const struct header_ops *header_ops;
|
||||
|
||||
unsigned int flags; /* interface flags (a la BSD) */
|
||||
unsigned int priv_flags; /* Like 'flags' but invisible to userspace. */
|
||||
unsigned short gflags;
|
||||
unsigned int priv_flags; /* Like 'flags' but invisible to userspace. */
|
||||
unsigned short padded; /* How much padding added by alloc_netdev() */
|
||||
|
||||
unsigned char operstate; /* RFC2863 operstate */
|
||||
unsigned char link_mode; /* mapping policy to operstate */
|
||||
|
||||
unsigned char if_port; /* Selectable AUI, TP,..*/
|
||||
unsigned char dma; /* DMA channel */
|
||||
|
||||
unsigned int mtu; /* interface MTU value */
|
||||
unsigned short type; /* interface hardware type */
|
||||
unsigned short hard_header_len; /* hardware hdr length */
|
||||
|
|
@ -1281,7 +1293,9 @@ struct net_device {
|
|||
NETREG_UNREGISTERED, /* completed unregister todo */
|
||||
NETREG_RELEASED, /* called free_netdev */
|
||||
NETREG_DUMMY, /* dummy device for NAPI poll */
|
||||
} reg_state:16;
|
||||
} reg_state:8;
|
||||
|
||||
bool dismantle; /* device is going do be freed */
|
||||
|
||||
enum {
|
||||
RTNL_LINK_INITIALIZED,
|
||||
|
|
@ -2513,6 +2527,7 @@ extern struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
|
|||
extern int netdev_max_backlog;
|
||||
extern int netdev_tstamp_prequeue;
|
||||
extern int weight_p;
|
||||
extern int bpf_jit_enable;
|
||||
extern int netdev_set_master(struct net_device *dev, struct net_device *master);
|
||||
extern int netdev_set_bond_master(struct net_device *dev,
|
||||
struct net_device *master);
|
||||
|
|
@ -2550,7 +2565,9 @@ static inline u32 netdev_get_wanted_features(struct net_device *dev)
|
|||
}
|
||||
u32 netdev_increment_features(u32 all, u32 one, u32 mask);
|
||||
u32 netdev_fix_features(struct net_device *dev, u32 features);
|
||||
int __netdev_update_features(struct net_device *dev);
|
||||
void netdev_update_features(struct net_device *dev);
|
||||
void netdev_change_features(struct net_device *dev);
|
||||
|
||||
void netif_stacked_transfer_operstate(const struct net_device *rootdev,
|
||||
struct net_device *dev);
|
||||
|
|
@ -2588,13 +2605,8 @@ static inline int netif_is_bond_slave(struct net_device *dev)
|
|||
|
||||
extern struct pernet_operations __net_initdata loopback_net_ops;
|
||||
|
||||
static inline int dev_ethtool_get_settings(struct net_device *dev,
|
||||
struct ethtool_cmd *cmd)
|
||||
{
|
||||
if (!dev->ethtool_ops || !dev->ethtool_ops->get_settings)
|
||||
return -EOPNOTSUPP;
|
||||
return dev->ethtool_ops->get_settings(dev, cmd);
|
||||
}
|
||||
int dev_ethtool_get_settings(struct net_device *dev,
|
||||
struct ethtool_cmd *cmd);
|
||||
|
||||
static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,7 +22,9 @@ static inline bool ip_set_proto_with_ports(u8 proto)
|
|||
{
|
||||
switch (proto) {
|
||||
case IPPROTO_TCP:
|
||||
case IPPROTO_SCTP:
|
||||
case IPPROTO_UDP:
|
||||
case IPPROTO_UDPLITE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -456,72 +456,60 @@ extern void xt_proto_fini(struct net *net, u_int8_t af);
|
|||
extern struct xt_table_info *xt_alloc_table_info(unsigned int size);
|
||||
extern void xt_free_table_info(struct xt_table_info *info);
|
||||
|
||||
/*
|
||||
* Per-CPU spinlock associated with per-cpu table entries, and
|
||||
* with a counter for the "reading" side that allows a recursive
|
||||
* reader to avoid taking the lock and deadlocking.
|
||||
*
|
||||
* "reading" is used by ip/arp/ip6 tables rule processing which runs per-cpu.
|
||||
* It needs to ensure that the rules are not being changed while the packet
|
||||
* is being processed. In some cases, the read lock will be acquired
|
||||
* twice on the same CPU; this is okay because of the count.
|
||||
*
|
||||
* "writing" is used when reading counters.
|
||||
* During replace any readers that are using the old tables have to complete
|
||||
* before freeing the old table. This is handled by the write locking
|
||||
* necessary for reading the counters.
|
||||
/**
|
||||
* xt_recseq - recursive seqcount for netfilter use
|
||||
*
|
||||
* Packet processing changes the seqcount only if no recursion happened
|
||||
* get_counters() can use read_seqcount_begin()/read_seqcount_retry(),
|
||||
* because we use the normal seqcount convention :
|
||||
* Low order bit set to 1 if a writer is active.
|
||||
*/
|
||||
struct xt_info_lock {
|
||||
seqlock_t lock;
|
||||
unsigned char readers;
|
||||
};
|
||||
DECLARE_PER_CPU(struct xt_info_lock, xt_info_locks);
|
||||
DECLARE_PER_CPU(seqcount_t, xt_recseq);
|
||||
|
||||
/*
|
||||
* Note: we need to ensure that preemption is disabled before acquiring
|
||||
* the per-cpu-variable, so we do it as a two step process rather than
|
||||
* using "spin_lock_bh()".
|
||||
/**
|
||||
* xt_write_recseq_begin - start of a write section
|
||||
*
|
||||
* We _also_ need to disable bottom half processing before updating our
|
||||
* nesting count, to make sure that the only kind of re-entrancy is this
|
||||
* code being called by itself: since the count+lock is not an atomic
|
||||
* operation, we can allow no races.
|
||||
*
|
||||
* _Only_ that special combination of being per-cpu and never getting
|
||||
* re-entered asynchronously means that the count is safe.
|
||||
* Begin packet processing : all readers must wait the end
|
||||
* 1) Must be called with preemption disabled
|
||||
* 2) softirqs must be disabled too (or we should use irqsafe_cpu_add())
|
||||
* Returns :
|
||||
* 1 if no recursion on this cpu
|
||||
* 0 if recursion detected
|
||||
*/
|
||||
static inline void xt_info_rdlock_bh(void)
|
||||
static inline unsigned int xt_write_recseq_begin(void)
|
||||
{
|
||||
struct xt_info_lock *lock;
|
||||
unsigned int addend;
|
||||
|
||||
local_bh_disable();
|
||||
lock = &__get_cpu_var(xt_info_locks);
|
||||
if (likely(!lock->readers++))
|
||||
write_seqlock(&lock->lock);
|
||||
/*
|
||||
* Low order bit of sequence is set if we already
|
||||
* called xt_write_recseq_begin().
|
||||
*/
|
||||
addend = (__this_cpu_read(xt_recseq.sequence) + 1) & 1;
|
||||
|
||||
/*
|
||||
* This is kind of a write_seqcount_begin(), but addend is 0 or 1
|
||||
* We dont check addend value to avoid a test and conditional jump,
|
||||
* since addend is most likely 1
|
||||
*/
|
||||
__this_cpu_add(xt_recseq.sequence, addend);
|
||||
smp_wmb();
|
||||
|
||||
return addend;
|
||||
}
|
||||
|
||||
static inline void xt_info_rdunlock_bh(void)
|
||||
{
|
||||
struct xt_info_lock *lock = &__get_cpu_var(xt_info_locks);
|
||||
|
||||
if (likely(!--lock->readers))
|
||||
write_sequnlock(&lock->lock);
|
||||
local_bh_enable();
|
||||
}
|
||||
|
||||
/*
|
||||
* The "writer" side needs to get exclusive access to the lock,
|
||||
* regardless of readers. This must be called with bottom half
|
||||
* processing (and thus also preemption) disabled.
|
||||
/**
|
||||
* xt_write_recseq_end - end of a write section
|
||||
* @addend: return value from previous xt_write_recseq_begin()
|
||||
*
|
||||
* End packet processing : all readers can proceed
|
||||
* 1) Must be called with preemption disabled
|
||||
* 2) softirqs must be disabled too (or we should use irqsafe_cpu_add())
|
||||
*/
|
||||
static inline void xt_info_wrlock(unsigned int cpu)
|
||||
static inline void xt_write_recseq_end(unsigned int addend)
|
||||
{
|
||||
write_seqlock(&per_cpu(xt_info_locks, cpu).lock);
|
||||
}
|
||||
|
||||
static inline void xt_info_wrunlock(unsigned int cpu)
|
||||
{
|
||||
write_sequnlock(&per_cpu(xt_info_locks, cpu).lock);
|
||||
/* this is kind of a write_seqcount_end(), but addend is 0 or 1 */
|
||||
smp_wmb();
|
||||
__this_cpu_add(xt_recseq.sequence, addend);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@ struct nfs4_layoutget {
|
|||
struct nfs4_layoutget_args args;
|
||||
struct nfs4_layoutget_res res;
|
||||
struct pnfs_layout_segment **lsegpp;
|
||||
gfp_t gfp_flags;
|
||||
};
|
||||
|
||||
struct nfs4_getdeviceinfo_args {
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ struct nilfs_super_root {
|
|||
#define NILFS_SR_DAT_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 0)
|
||||
#define NILFS_SR_CPFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 1)
|
||||
#define NILFS_SR_SUFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 2)
|
||||
#define NILFS_SR_BYTES (sizeof(struct nilfs_super_root))
|
||||
#define NILFS_SR_BYTES(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 3)
|
||||
|
||||
/*
|
||||
* Maximal mount counts
|
||||
|
|
@ -845,5 +845,7 @@ struct nilfs_bdesc {
|
|||
_IOR(NILFS_IOCTL_IDENT, 0x8A, __u64)
|
||||
#define NILFS_IOCTL_RESIZE \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x8B, __u64)
|
||||
#define NILFS_IOCTL_SET_ALLOC_RANGE \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x8C, __u64[2])
|
||||
|
||||
#endif /* _LINUX_NILFS_FS_H */
|
||||
|
|
|
|||
|
|
@ -76,6 +76,39 @@
|
|||
* below.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Virtual interface / concurrency capabilities
|
||||
*
|
||||
* Some devices are able to operate with virtual MACs, they can have
|
||||
* more than one virtual interface. The capability handling for this
|
||||
* is a bit complex though, as there may be a number of restrictions
|
||||
* on the types of concurrency that are supported.
|
||||
*
|
||||
* To start with, each device supports the interface types listed in
|
||||
* the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the
|
||||
* types there no concurrency is implied.
|
||||
*
|
||||
* Once concurrency is desired, more attributes must be observed:
|
||||
* To start with, since some interface types are purely managed in
|
||||
* software, like the AP-VLAN type in mac80211 for example, there's
|
||||
* an additional list of these, they can be added at any time and
|
||||
* are only restricted by some semantic restrictions (e.g. AP-VLAN
|
||||
* cannot be added without a corresponding AP interface). This list
|
||||
* is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute.
|
||||
*
|
||||
* Further, the list of supported combinations is exported. This is
|
||||
* in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically,
|
||||
* it exports a list of "groups", and at any point in time the
|
||||
* interfaces that are currently active must fall into any one of
|
||||
* the advertised groups. Within each group, there are restrictions
|
||||
* on the number of interfaces of different types that are supported
|
||||
* and also the number of different channels, along with potentially
|
||||
* some other restrictions. See &enum nl80211_if_combination_attrs.
|
||||
*
|
||||
* All together, these attributes define the concurrency of virtual
|
||||
* interfaces that a given device supports.
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum nl80211_commands - supported nl80211 commands
|
||||
*
|
||||
|
|
@ -203,6 +236,28 @@
|
|||
* @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,
|
||||
* partial scan results may be available
|
||||
*
|
||||
* @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain
|
||||
* intervals, as specified by %NL80211_ATTR_SCHED_SCAN_INTERVAL.
|
||||
* Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS)
|
||||
* are passed, they are used in the probe requests. For
|
||||
* broadcast, a broadcast SSID must be passed (ie. an empty
|
||||
* string). If no SSID is passed, no probe requests are sent and
|
||||
* a passive scan is performed. %NL80211_ATTR_SCAN_FREQUENCIES,
|
||||
* if passed, define which channels should be scanned; if not
|
||||
* passed, all channels allowed for the current regulatory domain
|
||||
* are used. Extra IEs can also be passed from the userspace by
|
||||
* using the %NL80211_ATTR_IE attribute.
|
||||
* @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan
|
||||
* @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan
|
||||
* results available.
|
||||
* @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has
|
||||
* stopped. The driver may issue this event at any time during a
|
||||
* scheduled scan. One reason for stopping the scan is if the hardware
|
||||
* does not support starting an association or a normal scan while running
|
||||
* a scheduled scan. This event is also sent when the
|
||||
* %NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface
|
||||
* is brought down while a scheduled scan was running.
|
||||
*
|
||||
* @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation
|
||||
* or noise level
|
||||
* @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to
|
||||
|
|
@ -410,6 +465,24 @@
|
|||
* notification. This event is used to indicate that an unprotected
|
||||
* disassociation frame was dropped when MFP is in use.
|
||||
*
|
||||
* @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a
|
||||
* beacon or probe response from a compatible mesh peer. This is only
|
||||
* sent while no station information (sta_info) exists for the new peer
|
||||
* candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH is set. On
|
||||
* reception of this notification, userspace may decide to create a new
|
||||
* station (@NL80211_CMD_NEW_STATION). To stop this notification from
|
||||
* reoccurring, the userspace authentication daemon may want to create the
|
||||
* new station with the AUTHENTICATED flag unset and maybe change it later
|
||||
* depending on the authentication result.
|
||||
*
|
||||
* @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings.
|
||||
* @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings.
|
||||
* Since wireless is more complex than wired ethernet, it supports
|
||||
* various triggers. These triggers can be configured through this
|
||||
* command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For
|
||||
* more background information, see
|
||||
* http://wireless.kernel.org/en/users/Documentation/WoWLAN.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -522,6 +595,16 @@ enum nl80211_commands {
|
|||
NL80211_CMD_UNPROT_DEAUTHENTICATE,
|
||||
NL80211_CMD_UNPROT_DISASSOCIATE,
|
||||
|
||||
NL80211_CMD_NEW_PEER_CANDIDATE,
|
||||
|
||||
NL80211_CMD_GET_WOWLAN,
|
||||
NL80211_CMD_SET_WOWLAN,
|
||||
|
||||
NL80211_CMD_START_SCHED_SCAN,
|
||||
NL80211_CMD_STOP_SCHED_SCAN,
|
||||
NL80211_CMD_SCHED_SCAN_RESULTS,
|
||||
NL80211_CMD_SCHED_SCAN_STOPPED,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
|
|
@ -545,6 +628,7 @@ enum nl80211_commands {
|
|||
/* source-level API compatibility */
|
||||
#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
|
||||
#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
|
||||
#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE
|
||||
|
||||
/**
|
||||
* enum nl80211_attrs - nl80211 netlink attributes
|
||||
|
|
@ -886,6 +970,31 @@ enum nl80211_commands {
|
|||
* changed once the mesh is active.
|
||||
* @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute
|
||||
* containing attributes from &enum nl80211_meshconf_params.
|
||||
* @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver
|
||||
* allows auth frames in a mesh to be passed to userspace for processing via
|
||||
* the @NL80211_MESH_SETUP_USERSPACE_AUTH flag.
|
||||
* @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as
|
||||
* defined in &enum nl80211_plink_state. Used when userspace is
|
||||
* driving the peer link management state machine.
|
||||
* @NL80211_MESH_SETUP_USERSPACE_AMPE must be enabled.
|
||||
*
|
||||
* @NL80211_ATTR_WOWLAN_SUPPORTED: indicates, as part of the wiphy capabilities,
|
||||
* the supported WoWLAN triggers
|
||||
* @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to
|
||||
* indicate which WoW triggers should be enabled. This is also
|
||||
* used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN
|
||||
* triggers.
|
||||
|
||||
* @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan
|
||||
* cycles, in msecs.
|
||||
*
|
||||
* @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported
|
||||
* interface combinations. In each nested item, it contains attributes
|
||||
* defined in &enum nl80211_if_combination_attrs.
|
||||
* @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like
|
||||
* %NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that
|
||||
* are managed in software: interfaces of these types aren't subject to
|
||||
* any restrictions in their number or combinations.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
|
|
@ -1074,6 +1183,17 @@ enum nl80211_attrs {
|
|||
NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX,
|
||||
NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX,
|
||||
|
||||
NL80211_ATTR_SUPPORT_MESH_AUTH,
|
||||
NL80211_ATTR_STA_PLINK_STATE,
|
||||
|
||||
NL80211_ATTR_WOWLAN_TRIGGERS,
|
||||
NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED,
|
||||
|
||||
NL80211_ATTR_SCHED_SCAN_INTERVAL,
|
||||
|
||||
NL80211_ATTR_INTERFACE_COMBINATIONS,
|
||||
NL80211_ATTR_SOFTWARE_IFTYPES,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
|
|
@ -1126,7 +1246,9 @@ enum nl80211_attrs {
|
|||
* @NL80211_IFTYPE_ADHOC: independent BSS member
|
||||
* @NL80211_IFTYPE_STATION: managed BSS member
|
||||
* @NL80211_IFTYPE_AP: access point
|
||||
* @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points
|
||||
* @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces
|
||||
* are a bit special in that they must always be tied to a pre-existing
|
||||
* AP type interface.
|
||||
* @NL80211_IFTYPE_WDS: wireless distribution interface
|
||||
* @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
|
||||
* @NL80211_IFTYPE_MESH_POINT: mesh point
|
||||
|
|
@ -1168,6 +1290,7 @@ enum nl80211_iftype {
|
|||
* with short barker preamble
|
||||
* @NL80211_STA_FLAG_WME: station is WME/QoS capable
|
||||
* @NL80211_STA_FLAG_MFP: station uses management frame protection
|
||||
* @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated
|
||||
* @NL80211_STA_FLAG_MAX: highest station flag number currently defined
|
||||
* @__NL80211_STA_FLAG_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -1177,6 +1300,7 @@ enum nl80211_sta_flags {
|
|||
NL80211_STA_FLAG_SHORT_PREAMBLE,
|
||||
NL80211_STA_FLAG_WME,
|
||||
NL80211_STA_FLAG_MFP,
|
||||
NL80211_STA_FLAG_AUTHENTICATED,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_FLAG_AFTER_LAST,
|
||||
|
|
@ -1221,6 +1345,36 @@ enum nl80211_rate_info {
|
|||
NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_sta_bss_param - BSS information collected by STA
|
||||
*
|
||||
* These attribute types are used with %NL80211_STA_INFO_BSS_PARAM
|
||||
* when getting information about the bitrate of a station.
|
||||
*
|
||||
* @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved
|
||||
* @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag)
|
||||
* @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE: whether short preamble is enabled
|
||||
* (flag)
|
||||
* @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME: whether short slot time is enabled
|
||||
* (flag)
|
||||
* @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8)
|
||||
* @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16)
|
||||
* @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined
|
||||
* @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use
|
||||
*/
|
||||
enum nl80211_sta_bss_param {
|
||||
__NL80211_STA_BSS_PARAM_INVALID,
|
||||
NL80211_STA_BSS_PARAM_CTS_PROT,
|
||||
NL80211_STA_BSS_PARAM_SHORT_PREAMBLE,
|
||||
NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME,
|
||||
NL80211_STA_BSS_PARAM_DTIM_PERIOD,
|
||||
NL80211_STA_BSS_PARAM_BEACON_INTERVAL,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_BSS_PARAM_AFTER_LAST,
|
||||
NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_sta_info - station information
|
||||
*
|
||||
|
|
@ -1233,7 +1387,7 @@ enum nl80211_rate_info {
|
|||
* @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station)
|
||||
* @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm)
|
||||
* @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute
|
||||
* containing info as possible, see &enum nl80211_sta_info_txrate.
|
||||
* containing info as possible, see &enum nl80211_rate_info
|
||||
* @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station)
|
||||
* @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this
|
||||
* station)
|
||||
|
|
@ -1243,8 +1397,12 @@ enum nl80211_rate_info {
|
|||
* @NL80211_STA_INFO_LLID: the station's mesh LLID
|
||||
* @NL80211_STA_INFO_PLID: the station's mesh PLID
|
||||
* @NL80211_STA_INFO_PLINK_STATE: peer link state for the station
|
||||
* (see %enum nl80211_plink_state)
|
||||
* @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested
|
||||
* attribute, like NL80211_STA_INFO_TX_BITRATE.
|
||||
* @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute
|
||||
* containing info as possible, see &enum nl80211_sta_bss_param
|
||||
* @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected
|
||||
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
||||
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
||||
*/
|
||||
|
|
@ -1264,6 +1422,8 @@ enum nl80211_sta_info {
|
|||
NL80211_STA_INFO_TX_FAILED,
|
||||
NL80211_STA_INFO_SIGNAL_AVG,
|
||||
NL80211_STA_INFO_RX_BITRATE,
|
||||
NL80211_STA_INFO_BSS_PARAM,
|
||||
NL80211_STA_INFO_CONNECTED_TIME,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_INFO_AFTER_LAST,
|
||||
|
|
@ -1686,9 +1846,21 @@ enum nl80211_meshconf_params {
|
|||
* vendor specific path metric or disable it to use the default Airtime
|
||||
* metric.
|
||||
*
|
||||
* @NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE: A vendor specific information
|
||||
* element that vendors will use to identify the path selection methods and
|
||||
* metrics in use.
|
||||
* @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a
|
||||
* robust security network ie, or a vendor specific information element that
|
||||
* vendors will use to identify the path selection methods and metrics in use.
|
||||
*
|
||||
* @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication
|
||||
* daemon will be authenticating mesh candidates.
|
||||
*
|
||||
* @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication
|
||||
* daemon will be securing peer link frames. AMPE is a secured version of Mesh
|
||||
* Peering Management (MPM) and is implemented with the assistance of a
|
||||
* userspace daemon. When this flag is set, the kernel will send peer
|
||||
* management frames to a userspace daemon that will implement AMPE
|
||||
* functionality (security capabilities selection, key confirmation, and key
|
||||
* management). When the flag is unset (default), the kernel can autonomously
|
||||
* complete (unsecured) mesh peering without the need of a userspace daemon.
|
||||
*
|
||||
* @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
|
||||
* @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
|
||||
|
|
@ -1697,7 +1869,9 @@ enum nl80211_mesh_setup_params {
|
|||
__NL80211_MESH_SETUP_INVALID,
|
||||
NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL,
|
||||
NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC,
|
||||
NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE,
|
||||
NL80211_MESH_SETUP_IE,
|
||||
NL80211_MESH_SETUP_USERSPACE_AUTH,
|
||||
NL80211_MESH_SETUP_USERSPACE_AMPE,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MESH_SETUP_ATTR_AFTER_LAST,
|
||||
|
|
@ -2002,4 +2176,189 @@ enum nl80211_tx_power_setting {
|
|||
NL80211_TX_POWER_FIXED,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_wowlan_packet_pattern_attr - WoWLAN packet pattern attribute
|
||||
* @__NL80211_WOWLAN_PKTPAT_INVALID: invalid number for nested attribute
|
||||
* @NL80211_WOWLAN_PKTPAT_PATTERN: the pattern, values where the mask has
|
||||
* a zero bit are ignored
|
||||
* @NL80211_WOWLAN_PKTPAT_MASK: pattern mask, must be long enough to have
|
||||
* a bit for each byte in the pattern. The lowest-order bit corresponds
|
||||
* to the first byte of the pattern, but the bytes of the pattern are
|
||||
* in a little-endian-like format, i.e. the 9th byte of the pattern
|
||||
* corresponds to the lowest-order bit in the second byte of the mask.
|
||||
* For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where
|
||||
* xx indicates "don't care") would be represented by a pattern of
|
||||
* twelve zero bytes, and a mask of "0xed,0x07".
|
||||
* Note that the pattern matching is done as though frames were not
|
||||
* 802.11 frames but 802.3 frames, i.e. the frame is fully unpacked
|
||||
* first (including SNAP header unpacking) and then matched.
|
||||
* @NUM_NL80211_WOWLAN_PKTPAT: number of attributes
|
||||
* @MAX_NL80211_WOWLAN_PKTPAT: max attribute number
|
||||
*/
|
||||
enum nl80211_wowlan_packet_pattern_attr {
|
||||
__NL80211_WOWLAN_PKTPAT_INVALID,
|
||||
NL80211_WOWLAN_PKTPAT_MASK,
|
||||
NL80211_WOWLAN_PKTPAT_PATTERN,
|
||||
|
||||
NUM_NL80211_WOWLAN_PKTPAT,
|
||||
MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nl80211_wowlan_pattern_support - pattern support information
|
||||
* @max_patterns: maximum number of patterns supported
|
||||
* @min_pattern_len: minimum length of each pattern
|
||||
* @max_pattern_len: maximum length of each pattern
|
||||
*
|
||||
* This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when
|
||||
* that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED in the
|
||||
* capability information given by the kernel to userspace.
|
||||
*/
|
||||
struct nl80211_wowlan_pattern_support {
|
||||
__u32 max_patterns;
|
||||
__u32 min_pattern_len;
|
||||
__u32 max_pattern_len;
|
||||
} __attribute__((packed));
|
||||
|
||||
/**
|
||||
* enum nl80211_wowlan_triggers - WoWLAN trigger definitions
|
||||
* @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes
|
||||
* @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put
|
||||
* the chip into a special state -- works best with chips that have
|
||||
* support for low-power operation already (flag)
|
||||
* @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect
|
||||
* is detected is implementation-specific (flag)
|
||||
* @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed
|
||||
* by 16 repetitions of MAC addr, anywhere in payload) (flag)
|
||||
* @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns
|
||||
* which are passed in an array of nested attributes, each nested attribute
|
||||
* defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern.
|
||||
* Each pattern defines a wakeup packet. The matching is done on the MSDU,
|
||||
* i.e. as though the packet was an 802.3 packet, so the pattern matching
|
||||
* is done after the packet is converted to the MSDU.
|
||||
*
|
||||
* In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute
|
||||
* carrying a &struct nl80211_wowlan_pattern_support.
|
||||
* @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers
|
||||
* @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number
|
||||
*/
|
||||
enum nl80211_wowlan_triggers {
|
||||
__NL80211_WOWLAN_TRIG_INVALID,
|
||||
NL80211_WOWLAN_TRIG_ANY,
|
||||
NL80211_WOWLAN_TRIG_DISCONNECT,
|
||||
NL80211_WOWLAN_TRIG_MAGIC_PKT,
|
||||
NL80211_WOWLAN_TRIG_PKT_PATTERN,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_WOWLAN_TRIG,
|
||||
MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_iface_limit_attrs - limit attributes
|
||||
* @NL80211_IFACE_LIMIT_UNSPEC: (reserved)
|
||||
* @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that
|
||||
* can be chosen from this set of interface types (u32)
|
||||
* @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a
|
||||
* flag attribute for each interface type in this set
|
||||
* @NUM_NL80211_IFACE_LIMIT: number of attributes
|
||||
* @MAX_NL80211_IFACE_LIMIT: highest attribute number
|
||||
*/
|
||||
enum nl80211_iface_limit_attrs {
|
||||
NL80211_IFACE_LIMIT_UNSPEC,
|
||||
NL80211_IFACE_LIMIT_MAX,
|
||||
NL80211_IFACE_LIMIT_TYPES,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_IFACE_LIMIT,
|
||||
MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_if_combination_attrs -- interface combination attributes
|
||||
*
|
||||
* @NL80211_IFACE_COMB_UNSPEC: (reserved)
|
||||
* @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits
|
||||
* for given interface types, see &enum nl80211_iface_limit_attrs.
|
||||
* @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of
|
||||
* interfaces that can be created in this group. This number doesn't
|
||||
* apply to interfaces purely managed in software, which are listed
|
||||
* in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE.
|
||||
* @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that
|
||||
* beacon intervals within this group must be all the same even for
|
||||
* infrastructure and AP/GO combinations, i.e. the GO(s) must adopt
|
||||
* the infrastructure network's beacon interval.
|
||||
* @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many
|
||||
* different channels may be used within this group.
|
||||
* @NUM_NL80211_IFACE_COMB: number of attributes
|
||||
* @MAX_NL80211_IFACE_COMB: highest attribute number
|
||||
*
|
||||
* Examples:
|
||||
* limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2
|
||||
* => allows an AP and a STA that must match BIs
|
||||
*
|
||||
* numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8
|
||||
* => allows 8 of AP/GO
|
||||
*
|
||||
* numbers = [ #{STA} <= 2 ], channels = 2, max = 2
|
||||
* => allows two STAs on different channels
|
||||
*
|
||||
* numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
|
||||
* => allows a STA plus three P2P interfaces
|
||||
*
|
||||
* The list of these four possiblities could completely be contained
|
||||
* within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate
|
||||
* that any of these groups must match.
|
||||
*
|
||||
* "Combinations" of just a single interface will not be listed here,
|
||||
* a single interface of any valid interface type is assumed to always
|
||||
* be possible by itself. This means that implicitly, for each valid
|
||||
* interface type, the following group always exists:
|
||||
* numbers = [ #{<type>} <= 1 ], channels = 1, max = 1
|
||||
*/
|
||||
enum nl80211_if_combination_attrs {
|
||||
NL80211_IFACE_COMB_UNSPEC,
|
||||
NL80211_IFACE_COMB_LIMITS,
|
||||
NL80211_IFACE_COMB_MAXNUM,
|
||||
NL80211_IFACE_COMB_STA_AP_BI_MATCH,
|
||||
NL80211_IFACE_COMB_NUM_CHANNELS,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_IFACE_COMB,
|
||||
MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* enum nl80211_plink_state - state of a mesh peer link finite state machine
|
||||
*
|
||||
* @NL80211_PLINK_LISTEN: initial state, considered the implicit
|
||||
* state of non existant mesh peer links
|
||||
* @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to
|
||||
* this mesh peer
|
||||
* @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received
|
||||
* from this mesh peer
|
||||
* @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been
|
||||
* received from this mesh peer
|
||||
* @NL80211_PLINK_ESTAB: mesh peer link is established
|
||||
* @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
|
||||
* @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
|
||||
* plink are discarded
|
||||
* @NUM_NL80211_PLINK_STATES: number of peer link states
|
||||
* @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
|
||||
*/
|
||||
enum nl80211_plink_state {
|
||||
NL80211_PLINK_LISTEN,
|
||||
NL80211_PLINK_OPN_SNT,
|
||||
NL80211_PLINK_OPN_RCVD,
|
||||
NL80211_PLINK_CNF_RCVD,
|
||||
NL80211_PLINK_ESTAB,
|
||||
NL80211_PLINK_HOLDING,
|
||||
NL80211_PLINK_BLOCKED,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_PLINK_STATES,
|
||||
MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1
|
||||
};
|
||||
|
||||
#endif /* __LINUX_NL80211_H */
|
||||
|
|
|
|||
|
|
@ -45,11 +45,12 @@ static inline bool trigger_all_cpu_backtrace(void)
|
|||
|
||||
#ifdef CONFIG_LOCKUP_DETECTOR
|
||||
int hw_nmi_is_cpu_stuck(struct pt_regs *);
|
||||
u64 hw_nmi_get_sample_period(void);
|
||||
u64 hw_nmi_get_sample_period(int watchdog_thresh);
|
||||
extern int watchdog_enabled;
|
||||
extern int watchdog_thresh;
|
||||
struct ctl_table;
|
||||
extern int proc_dowatchdog_enabled(struct ctl_table *, int ,
|
||||
void __user *, size_t *, loff_t *);
|
||||
extern int proc_dowatchdog(struct ctl_table *, int ,
|
||||
void __user *, size_t *, loff_t *);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -209,8 +209,9 @@ static inline int notifier_to_errno(int ret)
|
|||
#define NETDEV_POST_TYPE_CHANGE 0x000F
|
||||
#define NETDEV_POST_INIT 0x0010
|
||||
#define NETDEV_UNREGISTER_BATCH 0x0011
|
||||
#define NETDEV_BONDING_DESLAVE 0x0012
|
||||
#define NETDEV_RELEASE 0x0012
|
||||
#define NETDEV_NOTIFY_PEERS 0x0013
|
||||
#define NETDEV_JOIN 0x0014
|
||||
|
||||
#define SYS_DOWN 0x0001 /* Notify of system down */
|
||||
#define SYS_RESTART SYS_DOWN
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@ extern void of_device_make_bus_id(struct device *dev);
|
|||
static inline int of_driver_match_device(struct device *dev,
|
||||
const struct device_driver *drv)
|
||||
{
|
||||
dev->of_match = of_match_device(drv->of_match_table, dev);
|
||||
return dev->of_match != NULL;
|
||||
return of_match_device(drv->of_match_table, dev) != NULL;
|
||||
}
|
||||
|
||||
extern struct platform_device *of_dev_get(struct platform_device *dev);
|
||||
|
|
@ -58,6 +57,11 @@ static inline int of_device_uevent(struct device *dev,
|
|||
|
||||
static inline void of_device_node_put(struct device *dev) { }
|
||||
|
||||
static inline const struct of_device_id *of_match_device(
|
||||
const struct of_device_id *matches, const struct device *dev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif /* CONFIG_OF_DEVICE */
|
||||
|
||||
#endif /* _LINUX_OF_DEVICE_H */
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ extern int of_irq_to_resource(struct device_node *dev, int index,
|
|||
extern int of_irq_count(struct device_node *dev);
|
||||
extern int of_irq_to_resource_table(struct device_node *dev,
|
||||
struct resource *res, int nr_irqs);
|
||||
extern struct device_node *of_irq_find_parent(struct device_node *child);
|
||||
|
||||
#endif /* CONFIG_OF_IRQ */
|
||||
#endif /* CONFIG_OF */
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ extern void pcie_aspm_exit_link_state(struct pci_dev *pdev);
|
|||
extern void pcie_aspm_pm_state_change(struct pci_dev *pdev);
|
||||
extern void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
|
||||
extern void pci_disable_link_state(struct pci_dev *pdev, int state);
|
||||
extern void pci_disable_link_state_locked(struct pci_dev *pdev, int state);
|
||||
extern void pcie_clear_aspm(void);
|
||||
extern void pcie_no_aspm(void);
|
||||
#else
|
||||
|
|
|
|||
52
include/linux/pci-ats.h
Normal file
52
include/linux/pci-ats.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#ifndef LINUX_PCI_ATS_H
|
||||
#define LINUX_PCI_ATS_H
|
||||
|
||||
/* Address Translation Service */
|
||||
struct pci_ats {
|
||||
int pos; /* capability position */
|
||||
int stu; /* Smallest Translation Unit */
|
||||
int qdep; /* Invalidate Queue Depth */
|
||||
int ref_cnt; /* Physical Function reference count */
|
||||
unsigned int is_enabled:1; /* Enable bit is set */
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
|
||||
extern int pci_enable_ats(struct pci_dev *dev, int ps);
|
||||
extern void pci_disable_ats(struct pci_dev *dev);
|
||||
extern int pci_ats_queue_depth(struct pci_dev *dev);
|
||||
/**
|
||||
* pci_ats_enabled - query the ATS status
|
||||
* @dev: the PCI device
|
||||
*
|
||||
* Returns 1 if ATS capability is enabled, or 0 if not.
|
||||
*/
|
||||
static inline int pci_ats_enabled(struct pci_dev *dev)
|
||||
{
|
||||
return dev->ats && dev->ats->is_enabled;
|
||||
}
|
||||
|
||||
#else /* CONFIG_PCI_IOV */
|
||||
|
||||
static inline int pci_enable_ats(struct pci_dev *dev, int ps)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline void pci_disable_ats(struct pci_dev *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int pci_ats_queue_depth(struct pci_dev *dev)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int pci_ats_enabled(struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PCI_IOV */
|
||||
|
||||
#endif /* LINUX_PCI_ATS_H*/
|
||||
|
|
@ -214,10 +214,15 @@ enum pci_bus_speed {
|
|||
PCI_SPEED_UNKNOWN = 0xff,
|
||||
};
|
||||
|
||||
struct pci_cap_saved_data {
|
||||
char cap_nr;
|
||||
unsigned int size;
|
||||
u32 data[0];
|
||||
};
|
||||
|
||||
struct pci_cap_saved_state {
|
||||
struct hlist_node next;
|
||||
char cap_nr;
|
||||
u32 data[0];
|
||||
struct pci_cap_saved_data cap;
|
||||
};
|
||||
|
||||
struct pcie_link_state;
|
||||
|
|
@ -366,7 +371,7 @@ static inline struct pci_cap_saved_state *pci_find_saved_cap(
|
|||
struct hlist_node *pos;
|
||||
|
||||
hlist_for_each_entry(tmp, pos, &pci_dev->saved_cap_space, next) {
|
||||
if (tmp->cap_nr == cap)
|
||||
if (tmp->cap.cap_nr == cap)
|
||||
return tmp;
|
||||
}
|
||||
return NULL;
|
||||
|
|
@ -807,6 +812,10 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size);
|
|||
/* Power management related routines */
|
||||
int pci_save_state(struct pci_dev *dev);
|
||||
void pci_restore_state(struct pci_dev *dev);
|
||||
struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev);
|
||||
int pci_load_saved_state(struct pci_dev *dev, struct pci_saved_state *state);
|
||||
int pci_load_and_free_saved_state(struct pci_dev *dev,
|
||||
struct pci_saved_state **state);
|
||||
int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state);
|
||||
int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
|
||||
pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
|
||||
|
|
@ -828,6 +837,23 @@ static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
|
|||
return __pci_enable_wake(dev, state, false, enable);
|
||||
}
|
||||
|
||||
#define PCI_EXP_IDO_REQUEST (1<<0)
|
||||
#define PCI_EXP_IDO_COMPLETION (1<<1)
|
||||
void pci_enable_ido(struct pci_dev *dev, unsigned long type);
|
||||
void pci_disable_ido(struct pci_dev *dev, unsigned long type);
|
||||
|
||||
enum pci_obff_signal_type {
|
||||
PCI_EXP_OBFF_SIGNAL_L0,
|
||||
PCI_EXP_OBFF_SIGNAL_ALWAYS,
|
||||
};
|
||||
int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type);
|
||||
void pci_disable_obff(struct pci_dev *dev);
|
||||
|
||||
bool pci_ltr_supported(struct pci_dev *dev);
|
||||
int pci_enable_ltr(struct pci_dev *dev);
|
||||
void pci_disable_ltr(struct pci_dev *dev);
|
||||
int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns);
|
||||
|
||||
/* For use by arch with custom probe code */
|
||||
void set_pcie_port_type(struct pci_dev *pdev);
|
||||
void set_pcie_hotplug_bridge(struct pci_dev *pdev);
|
||||
|
|
@ -1207,6 +1233,23 @@ static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void pci_enable_ido(struct pci_dev *dev, unsigned long type)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void pci_disable_ido(struct pci_dev *dev, unsigned long type)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int pci_enable_obff(struct pci_dev *dev, unsigned long type)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void pci_disable_obff(struct pci_dev *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int pci_request_regions(struct pci_dev *dev, const char *res_name)
|
||||
{
|
||||
return -EIO;
|
||||
|
|
|
|||
|
|
@ -608,6 +608,8 @@
|
|||
#define PCI_DEVICE_ID_MATROX_G550 0x2527
|
||||
#define PCI_DEVICE_ID_MATROX_VIA 0x4536
|
||||
|
||||
#define PCI_VENDOR_ID_MOBILITY_ELECTRONICS 0x14f2
|
||||
|
||||
#define PCI_VENDOR_ID_CT 0x102c
|
||||
#define PCI_DEVICE_ID_CT_69000 0x00c0
|
||||
#define PCI_DEVICE_ID_CT_65545 0x00d8
|
||||
|
|
@ -2481,6 +2483,8 @@
|
|||
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f
|
||||
#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40
|
||||
#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41
|
||||
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN 0x1e40
|
||||
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX 0x1e5f
|
||||
#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310
|
||||
#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f
|
||||
#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
|
||||
|
|
|
|||
|
|
@ -508,8 +508,18 @@
|
|||
#define PCI_EXP_RTSTA_PENDING 0x20000 /* PME pending */
|
||||
#define PCI_EXP_DEVCAP2 36 /* Device Capabilities 2 */
|
||||
#define PCI_EXP_DEVCAP2_ARI 0x20 /* Alternative Routing-ID */
|
||||
#define PCI_EXP_DEVCAP2_LTR 0x800 /* Latency tolerance reporting */
|
||||
#define PCI_EXP_OBFF_MASK 0xc0000 /* OBFF support mechanism */
|
||||
#define PCI_EXP_OBFF_MSG 0x40000 /* New message signaling */
|
||||
#define PCI_EXP_OBFF_WAKE 0x80000 /* Re-use WAKE# for OBFF */
|
||||
#define PCI_EXP_DEVCTL2 40 /* Device Control 2 */
|
||||
#define PCI_EXP_DEVCTL2_ARI 0x20 /* Alternative Routing-ID */
|
||||
#define PCI_EXP_IDO_REQ_EN 0x100 /* ID-based ordering request enable */
|
||||
#define PCI_EXP_IDO_CMP_EN 0x200 /* ID-based ordering completion enable */
|
||||
#define PCI_EXP_LTR_EN 0x400 /* Latency tolerance reporting */
|
||||
#define PCI_EXP_OBFF_MSGA_EN 0x2000 /* OBFF enable with Message type A */
|
||||
#define PCI_EXP_OBFF_MSGB_EN 0x4000 /* OBFF enable with Message type B */
|
||||
#define PCI_EXP_OBFF_WAKE_EN 0x6000 /* OBFF using WAKE# signaling */
|
||||
#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */
|
||||
#define PCI_EXP_SLTCTL2 56 /* Slot Control 2 */
|
||||
|
||||
|
|
@ -527,6 +537,7 @@
|
|||
#define PCI_EXT_CAP_ID_ARI 14
|
||||
#define PCI_EXT_CAP_ID_ATS 15
|
||||
#define PCI_EXT_CAP_ID_SRIOV 16
|
||||
#define PCI_EXT_CAP_ID_LTR 24
|
||||
|
||||
/* Advanced Error Reporting */
|
||||
#define PCI_ERR_UNCOR_STATUS 4 /* Uncorrectable Error Status */
|
||||
|
|
@ -683,6 +694,12 @@
|
|||
#define PCI_SRIOV_VFM_MO 0x2 /* Active.MigrateOut */
|
||||
#define PCI_SRIOV_VFM_AV 0x3 /* Active.Available */
|
||||
|
||||
#define PCI_LTR_MAX_SNOOP_LAT 0x4
|
||||
#define PCI_LTR_MAX_NOSNOOP_LAT 0x6
|
||||
#define PCI_LTR_VALUE_MASK 0x000003ff
|
||||
#define PCI_LTR_SCALE_MASK 0x00001c00
|
||||
#define PCI_LTR_SCALE_SHIFT 10
|
||||
|
||||
/* Access Control Service */
|
||||
#define PCI_ACS_CAP 0x04 /* ACS Capability Register */
|
||||
#define PCI_ACS_SV 0x01 /* Source Validation */
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
* Performance events:
|
||||
*
|
||||
* Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de>
|
||||
* Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar
|
||||
* Copyright (C) 2008-2009, Red Hat, Inc., Peter Zijlstra
|
||||
* Copyright (C) 2008-2011, Red Hat, Inc., Ingo Molnar
|
||||
* Copyright (C) 2008-2011, Red Hat, Inc., Peter Zijlstra
|
||||
*
|
||||
* Data type definitions, declarations, prototypes.
|
||||
*
|
||||
|
|
@ -52,6 +52,8 @@ enum perf_hw_id {
|
|||
PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
|
||||
PERF_COUNT_HW_BRANCH_MISSES = 5,
|
||||
PERF_COUNT_HW_BUS_CYCLES = 6,
|
||||
PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
|
||||
PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
|
||||
|
||||
PERF_COUNT_HW_MAX, /* non-ABI */
|
||||
};
|
||||
|
|
@ -468,9 +470,9 @@ enum perf_callchain_context {
|
|||
PERF_CONTEXT_MAX = (__u64)-4095,
|
||||
};
|
||||
|
||||
#define PERF_FLAG_FD_NO_GROUP (1U << 0)
|
||||
#define PERF_FLAG_FD_OUTPUT (1U << 1)
|
||||
#define PERF_FLAG_PID_CGROUP (1U << 2) /* pid=cgroup id, per-cpu mode only */
|
||||
#define PERF_FLAG_FD_NO_GROUP (1U << 0)
|
||||
#define PERF_FLAG_FD_OUTPUT (1U << 1)
|
||||
#define PERF_FLAG_PID_CGROUP (1U << 2) /* pid=cgroup id, per-cpu mode only */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/*
|
||||
|
|
@ -484,9 +486,9 @@ enum perf_callchain_context {
|
|||
#endif
|
||||
|
||||
struct perf_guest_info_callbacks {
|
||||
int (*is_in_guest) (void);
|
||||
int (*is_user_mode) (void);
|
||||
unsigned long (*get_guest_ip) (void);
|
||||
int (*is_in_guest)(void);
|
||||
int (*is_user_mode)(void);
|
||||
unsigned long (*get_guest_ip)(void);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
|
|
@ -505,7 +507,7 @@ struct perf_guest_info_callbacks {
|
|||
#include <linux/ftrace.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/irq_work.h>
|
||||
#include <linux/jump_label_ref.h>
|
||||
#include <linux/jump_label.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/local.h>
|
||||
|
||||
|
|
@ -652,19 +654,19 @@ struct pmu {
|
|||
* Start the transaction, after this ->add() doesn't need to
|
||||
* do schedulability tests.
|
||||
*/
|
||||
void (*start_txn) (struct pmu *pmu); /* optional */
|
||||
void (*start_txn) (struct pmu *pmu); /* optional */
|
||||
/*
|
||||
* If ->start_txn() disabled the ->add() schedulability test
|
||||
* then ->commit_txn() is required to perform one. On success
|
||||
* the transaction is closed. On error the transaction is kept
|
||||
* open until ->cancel_txn() is called.
|
||||
*/
|
||||
int (*commit_txn) (struct pmu *pmu); /* optional */
|
||||
int (*commit_txn) (struct pmu *pmu); /* optional */
|
||||
/*
|
||||
* Will cancel the transaction, assumes ->del() is called
|
||||
* for each successful ->add() during the transaction.
|
||||
*/
|
||||
void (*cancel_txn) (struct pmu *pmu); /* optional */
|
||||
void (*cancel_txn) (struct pmu *pmu); /* optional */
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -712,15 +714,15 @@ typedef void (*perf_overflow_handler_t)(struct perf_event *, int,
|
|||
struct pt_regs *regs);
|
||||
|
||||
enum perf_group_flag {
|
||||
PERF_GROUP_SOFTWARE = 0x1,
|
||||
PERF_GROUP_SOFTWARE = 0x1,
|
||||
};
|
||||
|
||||
#define SWEVENT_HLIST_BITS 8
|
||||
#define SWEVENT_HLIST_SIZE (1 << SWEVENT_HLIST_BITS)
|
||||
#define SWEVENT_HLIST_BITS 8
|
||||
#define SWEVENT_HLIST_SIZE (1 << SWEVENT_HLIST_BITS)
|
||||
|
||||
struct swevent_hlist {
|
||||
struct hlist_head heads[SWEVENT_HLIST_SIZE];
|
||||
struct rcu_head rcu_head;
|
||||
struct hlist_head heads[SWEVENT_HLIST_SIZE];
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
#define PERF_ATTACH_CONTEXT 0x01
|
||||
|
|
@ -733,13 +735,13 @@ struct swevent_hlist {
|
|||
* This is a per-cpu dynamically allocated data structure.
|
||||
*/
|
||||
struct perf_cgroup_info {
|
||||
u64 time;
|
||||
u64 timestamp;
|
||||
u64 time;
|
||||
u64 timestamp;
|
||||
};
|
||||
|
||||
struct perf_cgroup {
|
||||
struct cgroup_subsys_state css;
|
||||
struct perf_cgroup_info *info; /* timing info, one per cpu */
|
||||
struct cgroup_subsys_state css;
|
||||
struct perf_cgroup_info *info; /* timing info, one per cpu */
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
@ -923,7 +925,7 @@ struct perf_event_context {
|
|||
|
||||
/*
|
||||
* Number of contexts where an event can trigger:
|
||||
* task, softirq, hardirq, nmi.
|
||||
* task, softirq, hardirq, nmi.
|
||||
*/
|
||||
#define PERF_NR_CONTEXTS 4
|
||||
|
||||
|
|
@ -1001,8 +1003,7 @@ struct perf_sample_data {
|
|||
struct perf_raw_record *raw;
|
||||
};
|
||||
|
||||
static inline
|
||||
void perf_sample_data_init(struct perf_sample_data *data, u64 addr)
|
||||
static inline void perf_sample_data_init(struct perf_sample_data *data, u64 addr)
|
||||
{
|
||||
data->addr = addr;
|
||||
data->raw = NULL;
|
||||
|
|
@ -1034,13 +1035,12 @@ static inline int is_software_event(struct perf_event *event)
|
|||
return event->pmu->task_ctx_nr == perf_sw_context;
|
||||
}
|
||||
|
||||
extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX];
|
||||
extern struct jump_label_key perf_swevent_enabled[PERF_COUNT_SW_MAX];
|
||||
|
||||
extern void __perf_sw_event(u32, u64, int, struct pt_regs *, u64);
|
||||
|
||||
#ifndef perf_arch_fetch_caller_regs
|
||||
static inline void
|
||||
perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip) { }
|
||||
static inline void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip) { }
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -1063,26 +1063,24 @@ perf_sw_event(u32 event_id, u64 nr, int nmi, struct pt_regs *regs, u64 addr)
|
|||
{
|
||||
struct pt_regs hot_regs;
|
||||
|
||||
JUMP_LABEL(&perf_swevent_enabled[event_id], have_event);
|
||||
return;
|
||||
|
||||
have_event:
|
||||
if (!regs) {
|
||||
perf_fetch_caller_regs(&hot_regs);
|
||||
regs = &hot_regs;
|
||||
if (static_branch(&perf_swevent_enabled[event_id])) {
|
||||
if (!regs) {
|
||||
perf_fetch_caller_regs(&hot_regs);
|
||||
regs = &hot_regs;
|
||||
}
|
||||
__perf_sw_event(event_id, nr, nmi, regs, addr);
|
||||
}
|
||||
__perf_sw_event(event_id, nr, nmi, regs, addr);
|
||||
}
|
||||
|
||||
extern atomic_t perf_sched_events;
|
||||
extern struct jump_label_key perf_sched_events;
|
||||
|
||||
static inline void perf_event_task_sched_in(struct task_struct *task)
|
||||
{
|
||||
COND_STMT(&perf_sched_events, __perf_event_task_sched_in(task));
|
||||
if (static_branch(&perf_sched_events))
|
||||
__perf_event_task_sched_in(task);
|
||||
}
|
||||
|
||||
static inline
|
||||
void perf_event_task_sched_out(struct task_struct *task, struct task_struct *next)
|
||||
static inline void perf_event_task_sched_out(struct task_struct *task, struct task_struct *next)
|
||||
{
|
||||
perf_sw_event(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 1, NULL, 0);
|
||||
|
||||
|
|
@ -1100,14 +1098,10 @@ extern void perf_event_fork(struct task_struct *tsk);
|
|||
/* Callchains */
|
||||
DECLARE_PER_CPU(struct perf_callchain_entry, perf_callchain_entry);
|
||||
|
||||
extern void perf_callchain_user(struct perf_callchain_entry *entry,
|
||||
struct pt_regs *regs);
|
||||
extern void perf_callchain_kernel(struct perf_callchain_entry *entry,
|
||||
struct pt_regs *regs);
|
||||
extern void perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs);
|
||||
extern void perf_callchain_kernel(struct perf_callchain_entry *entry, struct pt_regs *regs);
|
||||
|
||||
|
||||
static inline void
|
||||
perf_callchain_store(struct perf_callchain_entry *entry, u64 ip)
|
||||
static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64 ip)
|
||||
{
|
||||
if (entry->nr < PERF_MAX_STACK_DEPTH)
|
||||
entry->ip[entry->nr++] = ip;
|
||||
|
|
@ -1143,9 +1137,9 @@ extern void perf_tp_event(u64 addr, u64 count, void *record,
|
|||
extern void perf_bp_event(struct perf_event *event, void *data);
|
||||
|
||||
#ifndef perf_misc_flags
|
||||
#define perf_misc_flags(regs) (user_mode(regs) ? PERF_RECORD_MISC_USER : \
|
||||
PERF_RECORD_MISC_KERNEL)
|
||||
#define perf_instruction_pointer(regs) instruction_pointer(regs)
|
||||
# define perf_misc_flags(regs) \
|
||||
(user_mode(regs) ? PERF_RECORD_MISC_USER : PERF_RECORD_MISC_KERNEL)
|
||||
# define perf_instruction_pointer(regs) instruction_pointer(regs)
|
||||
#endif
|
||||
|
||||
extern int perf_output_begin(struct perf_output_handle *handle,
|
||||
|
|
@ -1180,9 +1174,9 @@ static inline void
|
|||
perf_bp_event(struct perf_event *event, void *data) { }
|
||||
|
||||
static inline int perf_register_guest_info_callbacks
|
||||
(struct perf_guest_info_callbacks *callbacks) { return 0; }
|
||||
(struct perf_guest_info_callbacks *callbacks) { return 0; }
|
||||
static inline int perf_unregister_guest_info_callbacks
|
||||
(struct perf_guest_info_callbacks *callbacks) { return 0; }
|
||||
(struct perf_guest_info_callbacks *callbacks) { return 0; }
|
||||
|
||||
static inline void perf_event_mmap(struct vm_area_struct *vma) { }
|
||||
static inline void perf_event_comm(struct task_struct *tsk) { }
|
||||
|
|
@ -1195,23 +1189,22 @@ static inline void perf_event_disable(struct perf_event *event) { }
|
|||
static inline void perf_event_task_tick(void) { }
|
||||
#endif
|
||||
|
||||
#define perf_output_put(handle, x) \
|
||||
perf_output_copy((handle), &(x), sizeof(x))
|
||||
#define perf_output_put(handle, x) perf_output_copy((handle), &(x), sizeof(x))
|
||||
|
||||
/*
|
||||
* This has to have a higher priority than migration_notifier in sched.c.
|
||||
*/
|
||||
#define perf_cpu_notifier(fn) \
|
||||
do { \
|
||||
static struct notifier_block fn##_nb __cpuinitdata = \
|
||||
{ .notifier_call = fn, .priority = CPU_PRI_PERF }; \
|
||||
fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE, \
|
||||
(void *)(unsigned long)smp_processor_id()); \
|
||||
fn(&fn##_nb, (unsigned long)CPU_STARTING, \
|
||||
(void *)(unsigned long)smp_processor_id()); \
|
||||
fn(&fn##_nb, (unsigned long)CPU_ONLINE, \
|
||||
(void *)(unsigned long)smp_processor_id()); \
|
||||
register_cpu_notifier(&fn##_nb); \
|
||||
#define perf_cpu_notifier(fn) \
|
||||
do { \
|
||||
static struct notifier_block fn##_nb __cpuinitdata = \
|
||||
{ .notifier_call = fn, .priority = CPU_PRI_PERF }; \
|
||||
fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE, \
|
||||
(void *)(unsigned long)smp_processor_id()); \
|
||||
fn(&fn##_nb, (unsigned long)CPU_STARTING, \
|
||||
(void *)(unsigned long)smp_processor_id()); \
|
||||
fn(&fn##_nb, (unsigned long)CPU_ONLINE, \
|
||||
(void *)(unsigned long)smp_processor_id()); \
|
||||
register_cpu_notifier(&fn##_nb); \
|
||||
} while (0)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
|||
|
|
@ -588,4 +588,19 @@ struct tc_sfb_xstats {
|
|||
|
||||
#define SFB_MAX_PROB 0xFFFF
|
||||
|
||||
/* QFQ */
|
||||
enum {
|
||||
TCA_QFQ_UNSPEC,
|
||||
TCA_QFQ_WEIGHT,
|
||||
TCA_QFQ_LMAX,
|
||||
__TCA_QFQ_MAX
|
||||
};
|
||||
|
||||
#define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1)
|
||||
|
||||
struct tc_qfq_stats {
|
||||
__u32 weight;
|
||||
__u32 lmax;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -150,9 +150,6 @@ extern struct platform_device *platform_create_bundle(struct platform_driver *dr
|
|||
struct resource *res, unsigned int n_res,
|
||||
const void *data, size_t size);
|
||||
|
||||
extern const struct dev_pm_ops * platform_bus_get_pm_ops(void);
|
||||
extern void platform_bus_set_pm_ops(const struct dev_pm_ops *pm);
|
||||
|
||||
/* early platform driver interface */
|
||||
struct early_platform_driver {
|
||||
const char *class_str;
|
||||
|
|
@ -205,4 +202,64 @@ static inline char *early_platform_driver_setup_func(void) \
|
|||
}
|
||||
#endif /* MODULE */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
extern int platform_pm_prepare(struct device *dev);
|
||||
extern void platform_pm_complete(struct device *dev);
|
||||
#else
|
||||
#define platform_pm_prepare NULL
|
||||
#define platform_pm_complete NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
extern int platform_pm_suspend(struct device *dev);
|
||||
extern int platform_pm_suspend_noirq(struct device *dev);
|
||||
extern int platform_pm_resume(struct device *dev);
|
||||
extern int platform_pm_resume_noirq(struct device *dev);
|
||||
#else
|
||||
#define platform_pm_suspend NULL
|
||||
#define platform_pm_resume NULL
|
||||
#define platform_pm_suspend_noirq NULL
|
||||
#define platform_pm_resume_noirq NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HIBERNATE_CALLBACKS
|
||||
extern int platform_pm_freeze(struct device *dev);
|
||||
extern int platform_pm_freeze_noirq(struct device *dev);
|
||||
extern int platform_pm_thaw(struct device *dev);
|
||||
extern int platform_pm_thaw_noirq(struct device *dev);
|
||||
extern int platform_pm_poweroff(struct device *dev);
|
||||
extern int platform_pm_poweroff_noirq(struct device *dev);
|
||||
extern int platform_pm_restore(struct device *dev);
|
||||
extern int platform_pm_restore_noirq(struct device *dev);
|
||||
#else
|
||||
#define platform_pm_freeze NULL
|
||||
#define platform_pm_thaw NULL
|
||||
#define platform_pm_poweroff NULL
|
||||
#define platform_pm_restore NULL
|
||||
#define platform_pm_freeze_noirq NULL
|
||||
#define platform_pm_thaw_noirq NULL
|
||||
#define platform_pm_poweroff_noirq NULL
|
||||
#define platform_pm_restore_noirq NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
#define USE_PLATFORM_PM_SLEEP_OPS \
|
||||
.prepare = platform_pm_prepare, \
|
||||
.complete = platform_pm_complete, \
|
||||
.suspend = platform_pm_suspend, \
|
||||
.resume = platform_pm_resume, \
|
||||
.freeze = platform_pm_freeze, \
|
||||
.thaw = platform_pm_thaw, \
|
||||
.poweroff = platform_pm_poweroff, \
|
||||
.restore = platform_pm_restore, \
|
||||
.suspend_noirq = platform_pm_suspend_noirq, \
|
||||
.resume_noirq = platform_pm_resume_noirq, \
|
||||
.freeze_noirq = platform_pm_freeze_noirq, \
|
||||
.thaw_noirq = platform_pm_thaw_noirq, \
|
||||
.poweroff_noirq = platform_pm_poweroff_noirq, \
|
||||
.restore_noirq = platform_pm_restore_noirq,
|
||||
#else
|
||||
#define USE_PLATFORM_PM_SLEEP_OPS
|
||||
#endif
|
||||
|
||||
#endif /* _PLATFORM_DEVICE_H_ */
|
||||
|
|
|
|||
|
|
@ -460,6 +460,7 @@ struct dev_pm_info {
|
|||
unsigned long active_jiffies;
|
||||
unsigned long suspended_jiffies;
|
||||
unsigned long accounting_timestamp;
|
||||
void *subsys_data; /* Owned by the subsystem. */
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -529,21 +530,17 @@ struct dev_power_domain {
|
|||
*/
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
#ifndef CONFIG_ARCH_NO_SYSDEV_OPS
|
||||
extern int sysdev_suspend(pm_message_t state);
|
||||
extern int sysdev_resume(void);
|
||||
#else
|
||||
static inline int sysdev_suspend(pm_message_t state) { return 0; }
|
||||
static inline int sysdev_resume(void) { return 0; }
|
||||
#endif
|
||||
|
||||
extern void device_pm_lock(void);
|
||||
extern void dpm_resume_noirq(pm_message_t state);
|
||||
extern void dpm_resume_end(pm_message_t state);
|
||||
extern void dpm_resume(pm_message_t state);
|
||||
extern void dpm_complete(pm_message_t state);
|
||||
|
||||
extern void device_pm_unlock(void);
|
||||
extern int dpm_suspend_noirq(pm_message_t state);
|
||||
extern int dpm_suspend_start(pm_message_t state);
|
||||
extern int dpm_suspend(pm_message_t state);
|
||||
extern int dpm_prepare(pm_message_t state);
|
||||
|
||||
extern void __suspend_report_result(const char *function, void *fn, int ret);
|
||||
|
||||
|
|
@ -553,6 +550,16 @@ extern void __suspend_report_result(const char *function, void *fn, int ret);
|
|||
} while (0)
|
||||
|
||||
extern int device_pm_wait_for_dev(struct device *sub, struct device *dev);
|
||||
|
||||
extern int pm_generic_prepare(struct device *dev);
|
||||
extern int pm_generic_suspend(struct device *dev);
|
||||
extern int pm_generic_resume(struct device *dev);
|
||||
extern int pm_generic_freeze(struct device *dev);
|
||||
extern int pm_generic_thaw(struct device *dev);
|
||||
extern int pm_generic_restore(struct device *dev);
|
||||
extern int pm_generic_poweroff(struct device *dev);
|
||||
extern void pm_generic_complete(struct device *dev);
|
||||
|
||||
#else /* !CONFIG_PM_SLEEP */
|
||||
|
||||
#define device_pm_lock() do {} while (0)
|
||||
|
|
@ -569,6 +576,15 @@ static inline int device_pm_wait_for_dev(struct device *a, struct device *b)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define pm_generic_prepare NULL
|
||||
#define pm_generic_suspend NULL
|
||||
#define pm_generic_resume NULL
|
||||
#define pm_generic_freeze NULL
|
||||
#define pm_generic_thaw NULL
|
||||
#define pm_generic_restore NULL
|
||||
#define pm_generic_poweroff NULL
|
||||
#define pm_generic_complete NULL
|
||||
#endif /* !CONFIG_PM_SLEEP */
|
||||
|
||||
/* How to reorder dpm_list after device_move() */
|
||||
|
|
@ -579,11 +595,4 @@ enum dpm_order {
|
|||
DPM_ORDER_DEV_LAST,
|
||||
};
|
||||
|
||||
extern int pm_generic_suspend(struct device *dev);
|
||||
extern int pm_generic_resume(struct device *dev);
|
||||
extern int pm_generic_freeze(struct device *dev);
|
||||
extern int pm_generic_thaw(struct device *dev);
|
||||
extern int pm_generic_restore(struct device *dev);
|
||||
extern int pm_generic_poweroff(struct device *dev);
|
||||
|
||||
#endif /* _LINUX_PM_H */
|
||||
|
|
|
|||
|
|
@ -245,4 +245,46 @@ static inline void pm_runtime_dont_use_autosuspend(struct device *dev)
|
|||
__pm_runtime_use_autosuspend(dev, false);
|
||||
}
|
||||
|
||||
struct pm_clk_notifier_block {
|
||||
struct notifier_block nb;
|
||||
struct dev_power_domain *pwr_domain;
|
||||
char *con_ids[];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME_CLK
|
||||
extern int pm_runtime_clk_init(struct device *dev);
|
||||
extern void pm_runtime_clk_destroy(struct device *dev);
|
||||
extern int pm_runtime_clk_add(struct device *dev, const char *con_id);
|
||||
extern void pm_runtime_clk_remove(struct device *dev, const char *con_id);
|
||||
extern int pm_runtime_clk_suspend(struct device *dev);
|
||||
extern int pm_runtime_clk_resume(struct device *dev);
|
||||
#else
|
||||
static inline int pm_runtime_clk_init(struct device *dev)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
static inline void pm_runtime_clk_destroy(struct device *dev)
|
||||
{
|
||||
}
|
||||
static inline int pm_runtime_clk_add(struct device *dev, const char *con_id)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
static inline void pm_runtime_clk_remove(struct device *dev, const char *con_id)
|
||||
{
|
||||
}
|
||||
#define pm_runtime_clock_suspend NULL
|
||||
#define pm_runtime_clock_resume NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_CLK
|
||||
extern void pm_runtime_clk_add_notifier(struct bus_type *bus,
|
||||
struct pm_clk_notifier_block *clknb);
|
||||
#else
|
||||
static inline void pm_runtime_clk_add_notifier(struct bus_type *bus,
|
||||
struct pm_clk_notifier_block *clknb)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ struct posix_clock;
|
|||
* @timer_create: Create a new timer
|
||||
* @timer_delete: Remove a previously created timer
|
||||
* @timer_gettime: Get remaining time and interval of a timer
|
||||
* @timer_setttime: Set a timer's initial expiration and interval
|
||||
* @timer_settime: Set a timer's initial expiration and interval
|
||||
* @fasync: Optional character device fasync method
|
||||
* @mmap: Optional character device mmap method
|
||||
* @open: Optional character device open method
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/alarmtimer.h>
|
||||
|
||||
union cpu_time_count {
|
||||
cputime_t cpu;
|
||||
|
|
@ -80,6 +81,7 @@ struct k_itimer {
|
|||
unsigned long incr;
|
||||
unsigned long expires;
|
||||
} mmtimer;
|
||||
struct alarm alarmtimer;
|
||||
} it;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -208,6 +208,8 @@ static inline struct proc_dir_entry *proc_symlink(const char *name,
|
|||
struct proc_dir_entry *parent,const char *dest) {return NULL;}
|
||||
static inline struct proc_dir_entry *proc_mkdir(const char *name,
|
||||
struct proc_dir_entry *parent) {return NULL;}
|
||||
static inline struct proc_dir_entry *proc_mkdir_mode(const char *name,
|
||||
mode_t mode, struct proc_dir_entry *parent) { return NULL; }
|
||||
|
||||
static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
|
||||
mode_t mode, struct proc_dir_entry *base,
|
||||
|
|
|
|||
|
|
@ -35,7 +35,9 @@ struct pstore_info {
|
|||
struct mutex buf_mutex; /* serialize access to 'buf' */
|
||||
char *buf;
|
||||
size_t bufsize;
|
||||
size_t (*read)(u64 *id, enum pstore_type_id *type,
|
||||
int (*open)(struct pstore_info *psi);
|
||||
int (*close)(struct pstore_info *psi);
|
||||
ssize_t (*read)(u64 *id, enum pstore_type_id *type,
|
||||
struct timespec *time);
|
||||
u64 (*write)(enum pstore_type_id type, size_t size);
|
||||
int (*erase)(u64 id);
|
||||
|
|
|
|||
42
include/linux/pti.h
Normal file
42
include/linux/pti.h
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Copyright (C) Intel 2011
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* The PTI (Parallel Trace Interface) driver directs trace data routed from
|
||||
* various parts in the system out through the Intel Penwell PTI port and
|
||||
* out of the mobile device for analysis with a debugging tool
|
||||
* (Lauterbach, Fido). This is part of a solution for the MIPI P1149.7,
|
||||
* compact JTAG, standard.
|
||||
*
|
||||
* This header file will allow other parts of the OS to use the
|
||||
* interface to write out it's contents for debugging a mobile system.
|
||||
*/
|
||||
|
||||
#ifndef PTI_H_
|
||||
#define PTI_H_
|
||||
|
||||
/* offset for last dword of any PTI message. Part of MIPI P1149.7 */
|
||||
#define PTI_LASTDWORD_DTS 0x30
|
||||
|
||||
/* basic structure used as a write address to the PTI HW */
|
||||
struct pti_masterchannel {
|
||||
u8 master;
|
||||
u8 channel;
|
||||
};
|
||||
|
||||
/* the following functions are defined in misc/pti.c */
|
||||
void pti_writedata(struct pti_masterchannel *mc, u8 *buf, int count);
|
||||
struct pti_masterchannel *pti_request_masterchannel(u8 type);
|
||||
void pti_release_masterchannel(struct pti_masterchannel *mc);
|
||||
|
||||
#endif /*PTI_H_*/
|
||||
|
|
@ -136,6 +136,14 @@ static inline void rb_set_color(struct rb_node *rb, int color)
|
|||
#define RB_EMPTY_NODE(node) (rb_parent(node) == node)
|
||||
#define RB_CLEAR_NODE(node) (rb_set_parent(node, node))
|
||||
|
||||
static inline void rb_init_node(struct rb_node *rb)
|
||||
{
|
||||
rb->rb_parent_color = 0;
|
||||
rb->rb_right = NULL;
|
||||
rb->rb_left = NULL;
|
||||
RB_CLEAR_NODE(rb);
|
||||
}
|
||||
|
||||
extern void rb_insert_color(struct rb_node *, struct rb_root *);
|
||||
extern void rb_erase(struct rb_node *, struct rb_root *);
|
||||
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_entry_rcu(pos, head, member) \
|
||||
for (pos = list_entry_rcu((head)->next, typeof(*pos), member); \
|
||||
prefetch(pos->member.next), &pos->member != (head); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
|
||||
|
||||
|
||||
|
|
@ -270,7 +270,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_continue_rcu(pos, head) \
|
||||
for ((pos) = rcu_dereference_raw(list_next_rcu(pos)); \
|
||||
prefetch((pos)->next), (pos) != (head); \
|
||||
(pos) != (head); \
|
||||
(pos) = rcu_dereference_raw(list_next_rcu(pos)))
|
||||
|
||||
/**
|
||||
|
|
@ -284,7 +284,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each_entry_continue_rcu(pos, head, member) \
|
||||
for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \
|
||||
prefetch(pos->member.next), &pos->member != (head); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
|
||||
|
||||
/**
|
||||
|
|
@ -427,7 +427,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
|
||||
#define __hlist_for_each_rcu(pos, head) \
|
||||
for (pos = rcu_dereference(hlist_first_rcu(head)); \
|
||||
pos && ({ prefetch(pos->next); 1; }); \
|
||||
pos; \
|
||||
pos = rcu_dereference(hlist_next_rcu(pos)))
|
||||
|
||||
/**
|
||||
|
|
@ -443,7 +443,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
*/
|
||||
#define hlist_for_each_entry_rcu(tpos, pos, head, member) \
|
||||
for (pos = rcu_dereference_raw(hlist_first_rcu(head)); \
|
||||
pos && ({ prefetch(pos->next); 1; }) && \
|
||||
pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
|
||||
pos = rcu_dereference_raw(hlist_next_rcu(pos)))
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
*/
|
||||
#define hlist_for_each_entry_rcu_bh(tpos, pos, head, member) \
|
||||
for (pos = rcu_dereference_bh((head)->first); \
|
||||
pos && ({ prefetch(pos->next); 1; }) && \
|
||||
pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
|
||||
pos = rcu_dereference_bh(pos->next))
|
||||
|
||||
|
|
@ -472,7 +472,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
*/
|
||||
#define hlist_for_each_entry_continue_rcu(tpos, pos, member) \
|
||||
for (pos = rcu_dereference((pos)->next); \
|
||||
pos && ({ prefetch(pos->next); 1; }) && \
|
||||
pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
|
||||
pos = rcu_dereference(pos->next))
|
||||
|
||||
|
|
@ -484,7 +484,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
*/
|
||||
#define hlist_for_each_entry_continue_rcu_bh(tpos, pos, member) \
|
||||
for (pos = rcu_dereference_bh((pos)->next); \
|
||||
pos && ({ prefetch(pos->next); 1; }) && \
|
||||
pos && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
|
||||
pos = rcu_dereference_bh(pos->next))
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,18 @@
|
|||
extern int rcutorture_runnable; /* for sysctl */
|
||||
#endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
|
||||
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
|
||||
extern void rcutorture_record_test_transition(void);
|
||||
extern void rcutorture_record_progress(unsigned long vernum);
|
||||
#else
|
||||
static inline void rcutorture_record_test_transition(void)
|
||||
{
|
||||
}
|
||||
static inline void rcutorture_record_progress(unsigned long vernum)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#define UINT_CMP_GE(a, b) (UINT_MAX / 2 >= (a) - (b))
|
||||
#define UINT_CMP_LT(a, b) (UINT_MAX / 2 < (a) - (b))
|
||||
#define ULONG_CMP_GE(a, b) (ULONG_MAX / 2 >= (a) - (b))
|
||||
|
|
@ -68,7 +80,6 @@ extern void call_rcu_sched(struct rcu_head *head,
|
|||
extern void synchronize_sched(void);
|
||||
extern void rcu_barrier_bh(void);
|
||||
extern void rcu_barrier_sched(void);
|
||||
extern int sched_expedited_torture_stats(char *page);
|
||||
|
||||
static inline void __rcu_read_lock_bh(void)
|
||||
{
|
||||
|
|
@ -774,6 +785,7 @@ extern struct debug_obj_descr rcuhead_debug_descr;
|
|||
|
||||
static inline void debug_rcu_head_queue(struct rcu_head *head)
|
||||
{
|
||||
WARN_ON_ONCE((unsigned long)head & 0x3);
|
||||
debug_object_activate(head, &rcuhead_debug_descr);
|
||||
debug_object_active_state(head, &rcuhead_debug_descr,
|
||||
STATE_RCU_HEAD_READY,
|
||||
|
|
@ -797,4 +809,60 @@ static inline void debug_rcu_head_unqueue(struct rcu_head *head)
|
|||
}
|
||||
#endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */
|
||||
|
||||
static __always_inline bool __is_kfree_rcu_offset(unsigned long offset)
|
||||
{
|
||||
return offset < 4096;
|
||||
}
|
||||
|
||||
static __always_inline
|
||||
void __kfree_rcu(struct rcu_head *head, unsigned long offset)
|
||||
{
|
||||
typedef void (*rcu_callback)(struct rcu_head *);
|
||||
|
||||
BUILD_BUG_ON(!__builtin_constant_p(offset));
|
||||
|
||||
/* See the kfree_rcu() header comment. */
|
||||
BUILD_BUG_ON(!__is_kfree_rcu_offset(offset));
|
||||
|
||||
call_rcu(head, (rcu_callback)offset);
|
||||
}
|
||||
|
||||
extern void kfree(const void *);
|
||||
|
||||
static inline void __rcu_reclaim(struct rcu_head *head)
|
||||
{
|
||||
unsigned long offset = (unsigned long)head->func;
|
||||
|
||||
if (__is_kfree_rcu_offset(offset))
|
||||
kfree((void *)head - offset);
|
||||
else
|
||||
head->func(head);
|
||||
}
|
||||
|
||||
/**
|
||||
* kfree_rcu() - kfree an object after a grace period.
|
||||
* @ptr: pointer to kfree
|
||||
* @rcu_head: the name of the struct rcu_head within the type of @ptr.
|
||||
*
|
||||
* Many rcu callbacks functions just call kfree() on the base structure.
|
||||
* These functions are trivial, but their size adds up, and furthermore
|
||||
* when they are used in a kernel module, that module must invoke the
|
||||
* high-latency rcu_barrier() function at module-unload time.
|
||||
*
|
||||
* The kfree_rcu() function handles this issue. Rather than encoding a
|
||||
* function address in the embedded rcu_head structure, kfree_rcu() instead
|
||||
* encodes the offset of the rcu_head structure within the base structure.
|
||||
* Because the functions are not allowed in the low-order 4096 bytes of
|
||||
* kernel virtual memory, offsets up to 4095 bytes can be accommodated.
|
||||
* If the offset is larger than 4095 bytes, a compile-time error will
|
||||
* be generated in __kfree_rcu(). If this error is triggered, you can
|
||||
* either fall back to use of call_rcu() or rearrange the structure to
|
||||
* position the rcu_head structure into the first 4096 bytes.
|
||||
*
|
||||
* Note that the allowable offset might decrease in the future, for example,
|
||||
* to allow something like kmem_cache_free_rcu().
|
||||
*/
|
||||
#define kfree_rcu(ptr, rcu_head) \
|
||||
__kfree_rcu(&((ptr)->rcu_head), offsetof(typeof(*(ptr)), rcu_head))
|
||||
|
||||
#endif /* __LINUX_RCUPDATE_H */
|
||||
|
|
|
|||
|
|
@ -99,6 +99,14 @@ static inline void rcu_note_context_switch(int cpu)
|
|||
rcu_preempt_note_context_switch();
|
||||
}
|
||||
|
||||
/*
|
||||
* Take advantage of the fact that there is only one CPU, which
|
||||
* allows us to ignore virtualization-based context switches.
|
||||
*/
|
||||
static inline void rcu_virt_note_context_switch(int cpu)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of grace periods.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -35,6 +35,16 @@ extern void rcu_note_context_switch(int cpu);
|
|||
extern int rcu_needs_cpu(int cpu);
|
||||
extern void rcu_cpu_stall_reset(void);
|
||||
|
||||
/*
|
||||
* Note a virtualization-based context switch. This is simply a
|
||||
* wrapper around rcu_note_context_switch(), which allows TINY_RCU
|
||||
* to save a few bytes.
|
||||
*/
|
||||
static inline void rcu_virt_note_context_switch(int cpu)
|
||||
{
|
||||
rcu_note_context_switch(cpu);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
|
||||
extern void exit_rcu(void);
|
||||
|
|
@ -58,9 +68,12 @@ static inline void synchronize_rcu_bh_expedited(void)
|
|||
|
||||
extern void rcu_barrier(void);
|
||||
|
||||
extern unsigned long rcutorture_testseq;
|
||||
extern unsigned long rcutorture_vernum;
|
||||
extern long rcu_batches_completed(void);
|
||||
extern long rcu_batches_completed_bh(void);
|
||||
extern long rcu_batches_completed_sched(void);
|
||||
|
||||
extern void rcu_force_quiescent_state(void);
|
||||
extern void rcu_bh_force_quiescent_state(void);
|
||||
extern void rcu_sched_force_quiescent_state(void);
|
||||
|
|
|
|||
48
include/linux/rfkill-regulator.h
Normal file
48
include/linux/rfkill-regulator.h
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* rfkill-regulator.c - Regulator consumer driver for rfkill
|
||||
*
|
||||
* Copyright (C) 2009 Guiming Zhuo <gmzhuo@gmail.com>
|
||||
* Copyright (C) 2011 Antonio Ospite <ospite@studenti.unina.it>
|
||||
*
|
||||
* 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_RFKILL_REGULATOR_H
|
||||
#define __LINUX_RFKILL_REGULATOR_H
|
||||
|
||||
/*
|
||||
* Use "vrfkill" as supply id when declaring the regulator consumer:
|
||||
*
|
||||
* static struct regulator_consumer_supply pcap_regulator_V6_consumers [] = {
|
||||
* { .dev_name = "rfkill-regulator.0", .supply = "vrfkill" },
|
||||
* };
|
||||
*
|
||||
* If you have several regulator driven rfkill, you can append a numerical id to
|
||||
* .dev_name as done above, and use the same id when declaring the platform
|
||||
* device:
|
||||
*
|
||||
* static struct rfkill_regulator_platform_data ezx_rfkill_bt_data = {
|
||||
* .name = "ezx-bluetooth",
|
||||
* .type = RFKILL_TYPE_BLUETOOTH,
|
||||
* };
|
||||
*
|
||||
* static struct platform_device a910_rfkill = {
|
||||
* .name = "rfkill-regulator",
|
||||
* .id = 0,
|
||||
* .dev = {
|
||||
* .platform_data = &ezx_rfkill_bt_data,
|
||||
* },
|
||||
* };
|
||||
*/
|
||||
|
||||
#include <linux/rfkill.h>
|
||||
|
||||
struct rfkill_regulator_platform_data {
|
||||
char *name; /* the name for the rfkill switch */
|
||||
enum rfkill_type type; /* the type as specified in rfkill.h */
|
||||
};
|
||||
|
||||
#endif /* __LINUX_RFKILL_REGULATOR_H */
|
||||
|
|
@ -315,7 +315,6 @@ extern int proc_dowatchdog_thresh(struct ctl_table *table, int write,
|
|||
void __user *buffer,
|
||||
size_t *lenp, loff_t *ppos);
|
||||
extern unsigned int softlockup_panic;
|
||||
extern int softlockup_thresh;
|
||||
void lockup_detector_init(void);
|
||||
#else
|
||||
static inline void touch_softlockup_watchdog(void)
|
||||
|
|
@ -360,7 +359,7 @@ extern signed long schedule_timeout_interruptible(signed long timeout);
|
|||
extern signed long schedule_timeout_killable(signed long timeout);
|
||||
extern signed long schedule_timeout_uninterruptible(signed long timeout);
|
||||
asmlinkage void schedule(void);
|
||||
extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner);
|
||||
extern int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner);
|
||||
|
||||
struct nsproxy;
|
||||
struct user_namespace;
|
||||
|
|
@ -653,9 +652,8 @@ struct signal_struct {
|
|||
* Bits in flags field of signal_struct.
|
||||
*/
|
||||
#define SIGNAL_STOP_STOPPED 0x00000001 /* job control stop in effect */
|
||||
#define SIGNAL_STOP_DEQUEUED 0x00000002 /* stop signal dequeued */
|
||||
#define SIGNAL_STOP_CONTINUED 0x00000004 /* SIGCONT since WCONTINUED reap */
|
||||
#define SIGNAL_GROUP_EXIT 0x00000008 /* group exit in progress */
|
||||
#define SIGNAL_STOP_CONTINUED 0x00000002 /* SIGCONT since WCONTINUED reap */
|
||||
#define SIGNAL_GROUP_EXIT 0x00000004 /* group exit in progress */
|
||||
/*
|
||||
* Pending notifications to parent.
|
||||
*/
|
||||
|
|
@ -731,10 +729,6 @@ struct sched_info {
|
|||
/* timestamps */
|
||||
unsigned long long last_arrival,/* when we last ran on a cpu */
|
||||
last_queued; /* when we were last queued to run */
|
||||
#ifdef CONFIG_SCHEDSTATS
|
||||
/* BKL stats */
|
||||
unsigned int bkl_count;
|
||||
#endif
|
||||
};
|
||||
#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
|
||||
|
||||
|
|
@ -792,17 +786,39 @@ enum cpu_idle_type {
|
|||
};
|
||||
|
||||
/*
|
||||
* sched-domains (multiprocessor balancing) declarations:
|
||||
* Increase resolution of nice-level calculations for 64-bit architectures.
|
||||
* The extra resolution improves shares distribution and load balancing of
|
||||
* low-weight task groups (eg. nice +19 on an autogroup), deeper taskgroup
|
||||
* hierarchies, especially on larger systems. This is not a user-visible change
|
||||
* and does not change the user-interface for setting shares/weights.
|
||||
*
|
||||
* We increase resolution only if we have enough bits to allow this increased
|
||||
* resolution (i.e. BITS_PER_LONG > 32). The costs for increasing resolution
|
||||
* when BITS_PER_LONG <= 32 are pretty high and the returns do not justify the
|
||||
* increased costs.
|
||||
*/
|
||||
#if BITS_PER_LONG > 32
|
||||
# define SCHED_LOAD_RESOLUTION 10
|
||||
# define scale_load(w) ((w) << SCHED_LOAD_RESOLUTION)
|
||||
# define scale_load_down(w) ((w) >> SCHED_LOAD_RESOLUTION)
|
||||
#else
|
||||
# define SCHED_LOAD_RESOLUTION 0
|
||||
# define scale_load(w) (w)
|
||||
# define scale_load_down(w) (w)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Increase resolution of nice-level calculations:
|
||||
*/
|
||||
#define SCHED_LOAD_SHIFT 10
|
||||
#define SCHED_LOAD_SHIFT (10 + SCHED_LOAD_RESOLUTION)
|
||||
#define SCHED_LOAD_SCALE (1L << SCHED_LOAD_SHIFT)
|
||||
|
||||
#define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE
|
||||
/*
|
||||
* Increase resolution of cpu_power calculations
|
||||
*/
|
||||
#define SCHED_POWER_SHIFT 10
|
||||
#define SCHED_POWER_SCALE (1L << SCHED_POWER_SHIFT)
|
||||
|
||||
/*
|
||||
* sched-domains (multiprocessor balancing) declarations:
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
#define SD_LOAD_BALANCE 0x0001 /* Do load balancing on this domain. */
|
||||
#define SD_BALANCE_NEWIDLE 0x0002 /* Balance when about to become idle */
|
||||
|
|
@ -868,6 +884,7 @@ static inline int sd_power_saving_flags(void)
|
|||
|
||||
struct sched_group {
|
||||
struct sched_group *next; /* Must be a circular list */
|
||||
atomic_t ref;
|
||||
|
||||
/*
|
||||
* CPU power of this group, SCHED_LOAD_SCALE being max power for a
|
||||
|
|
@ -882,9 +899,6 @@ struct sched_group {
|
|||
* NOTE: this field is variable length. (Allocated dynamically
|
||||
* by attaching extra space to the end of the structure,
|
||||
* depending on how many CPUs the kernel has booted up with)
|
||||
*
|
||||
* It is also be embedded into static data structures at build
|
||||
* time. (See 'struct static_sched_group' in kernel/sched.c)
|
||||
*/
|
||||
unsigned long cpumask[0];
|
||||
};
|
||||
|
|
@ -894,17 +908,6 @@ static inline struct cpumask *sched_group_cpus(struct sched_group *sg)
|
|||
return to_cpumask(sg->cpumask);
|
||||
}
|
||||
|
||||
enum sched_domain_level {
|
||||
SD_LV_NONE = 0,
|
||||
SD_LV_SIBLING,
|
||||
SD_LV_MC,
|
||||
SD_LV_BOOK,
|
||||
SD_LV_CPU,
|
||||
SD_LV_NODE,
|
||||
SD_LV_ALLNODES,
|
||||
SD_LV_MAX
|
||||
};
|
||||
|
||||
struct sched_domain_attr {
|
||||
int relax_domain_level;
|
||||
};
|
||||
|
|
@ -913,6 +916,8 @@ struct sched_domain_attr {
|
|||
.relax_domain_level = -1, \
|
||||
}
|
||||
|
||||
extern int sched_domain_level_max;
|
||||
|
||||
struct sched_domain {
|
||||
/* These fields must be setup */
|
||||
struct sched_domain *parent; /* top domain must be null terminated */
|
||||
|
|
@ -930,7 +935,7 @@ struct sched_domain {
|
|||
unsigned int forkexec_idx;
|
||||
unsigned int smt_gain;
|
||||
int flags; /* See SD_* */
|
||||
enum sched_domain_level level;
|
||||
int level;
|
||||
|
||||
/* Runtime fields. */
|
||||
unsigned long last_balance; /* init to jiffies. units in jiffies */
|
||||
|
|
@ -973,6 +978,10 @@ struct sched_domain {
|
|||
#ifdef CONFIG_SCHED_DEBUG
|
||||
char *name;
|
||||
#endif
|
||||
union {
|
||||
void *private; /* used during construction */
|
||||
struct rcu_head rcu; /* used during destruction */
|
||||
};
|
||||
|
||||
unsigned int span_weight;
|
||||
/*
|
||||
|
|
@ -981,9 +990,6 @@ struct sched_domain {
|
|||
* NOTE: this field is variable length. (Allocated dynamically
|
||||
* by attaching extra space to the end of the structure,
|
||||
* depending on how many CPUs the kernel has booted up with)
|
||||
*
|
||||
* It is also be embedded into static data structures at build
|
||||
* time. (See 'struct static_sched_domain' in kernel/sched.c)
|
||||
*/
|
||||
unsigned long span[0];
|
||||
};
|
||||
|
|
@ -1048,8 +1054,12 @@ struct sched_domain;
|
|||
#define WF_FORK 0x02 /* child wakeup after fork */
|
||||
|
||||
#define ENQUEUE_WAKEUP 1
|
||||
#define ENQUEUE_WAKING 2
|
||||
#define ENQUEUE_HEAD 4
|
||||
#define ENQUEUE_HEAD 2
|
||||
#ifdef CONFIG_SMP
|
||||
#define ENQUEUE_WAKING 4 /* sched_class::task_waking was called */
|
||||
#else
|
||||
#define ENQUEUE_WAKING 0
|
||||
#endif
|
||||
|
||||
#define DEQUEUE_SLEEP 1
|
||||
|
||||
|
|
@ -1067,12 +1077,11 @@ struct sched_class {
|
|||
void (*put_prev_task) (struct rq *rq, struct task_struct *p);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
int (*select_task_rq)(struct rq *rq, struct task_struct *p,
|
||||
int sd_flag, int flags);
|
||||
int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags);
|
||||
|
||||
void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);
|
||||
void (*post_schedule) (struct rq *this_rq);
|
||||
void (*task_waking) (struct rq *this_rq, struct task_struct *task);
|
||||
void (*task_waking) (struct task_struct *task);
|
||||
void (*task_woken) (struct rq *this_rq, struct task_struct *task);
|
||||
|
||||
void (*set_cpus_allowed)(struct task_struct *p,
|
||||
|
|
@ -1197,13 +1206,11 @@ struct task_struct {
|
|||
unsigned int flags; /* per process flags, defined below */
|
||||
unsigned int ptrace;
|
||||
|
||||
int lock_depth; /* BKL lock depth */
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#ifdef __ARCH_WANT_UNLOCKED_CTXSW
|
||||
int oncpu;
|
||||
#endif
|
||||
struct task_struct *wake_entry;
|
||||
int on_cpu;
|
||||
#endif
|
||||
int on_rq;
|
||||
|
||||
int prio, static_prio, normal_prio;
|
||||
unsigned int rt_priority;
|
||||
|
|
@ -1264,6 +1271,7 @@ struct task_struct {
|
|||
int exit_state;
|
||||
int exit_code, exit_signal;
|
||||
int pdeath_signal; /* The signal sent when the parent dies */
|
||||
unsigned int group_stop; /* GROUP_STOP_*, siglock protected */
|
||||
/* ??? */
|
||||
unsigned int personality;
|
||||
unsigned did_exec:1;
|
||||
|
|
@ -1274,6 +1282,7 @@ struct task_struct {
|
|||
|
||||
/* Revert to default priority/policy when forking */
|
||||
unsigned sched_reset_on_fork:1;
|
||||
unsigned sched_contributes_to_load:1;
|
||||
|
||||
pid_t pid;
|
||||
pid_t tgid;
|
||||
|
|
@ -1783,6 +1792,17 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *
|
|||
#define tsk_used_math(p) ((p)->flags & PF_USED_MATH)
|
||||
#define used_math() tsk_used_math(current)
|
||||
|
||||
/*
|
||||
* task->group_stop flags
|
||||
*/
|
||||
#define GROUP_STOP_SIGMASK 0xffff /* signr of the last group stop */
|
||||
#define GROUP_STOP_PENDING (1 << 16) /* task should stop for group stop */
|
||||
#define GROUP_STOP_CONSUME (1 << 17) /* consume group stop count */
|
||||
#define GROUP_STOP_TRAPPING (1 << 18) /* switching from STOPPED to TRACED */
|
||||
#define GROUP_STOP_DEQUEUED (1 << 19) /* stop signal dequeued */
|
||||
|
||||
extern void task_clear_group_stop_pending(struct task_struct *task);
|
||||
|
||||
#ifdef CONFIG_PREEMPT_RCU
|
||||
|
||||
#define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */
|
||||
|
|
@ -2063,14 +2083,13 @@ extern void xtime_update(unsigned long ticks);
|
|||
|
||||
extern int wake_up_state(struct task_struct *tsk, unsigned int state);
|
||||
extern int wake_up_process(struct task_struct *tsk);
|
||||
extern void wake_up_new_task(struct task_struct *tsk,
|
||||
unsigned long clone_flags);
|
||||
extern void wake_up_new_task(struct task_struct *tsk);
|
||||
#ifdef CONFIG_SMP
|
||||
extern void kick_process(struct task_struct *tsk);
|
||||
#else
|
||||
static inline void kick_process(struct task_struct *tsk) { }
|
||||
#endif
|
||||
extern void sched_fork(struct task_struct *p, int clone_flags);
|
||||
extern void sched_fork(struct task_struct *p);
|
||||
extern void sched_dead(struct task_struct *p);
|
||||
|
||||
extern void proc_caches_init(void);
|
||||
|
|
@ -2195,8 +2214,10 @@ extern void set_task_comm(struct task_struct *tsk, char *from);
|
|||
extern char *get_task_comm(char *to, struct task_struct *tsk);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
void scheduler_ipi(void);
|
||||
extern unsigned long wait_task_inactive(struct task_struct *, long match_state);
|
||||
#else
|
||||
static inline void scheduler_ipi(void) { }
|
||||
static inline unsigned long wait_task_inactive(struct task_struct *p,
|
||||
long match_state)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -88,12 +88,12 @@ static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
|
|||
unsigned ret;
|
||||
|
||||
repeat:
|
||||
ret = sl->sequence;
|
||||
smp_rmb();
|
||||
ret = ACCESS_ONCE(sl->sequence);
|
||||
if (unlikely(ret & 1)) {
|
||||
cpu_relax();
|
||||
goto repeat;
|
||||
}
|
||||
smp_rmb();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@
|
|||
#define PORT_OCTEON 17 /* Cavium OCTEON internal UART */
|
||||
#define PORT_AR7 18 /* Texas Instruments AR7 internal UART */
|
||||
#define PORT_U6_16550A 19 /* ST-Ericsson U6xxx internal UART */
|
||||
#define PORT_MAX_8250 19 /* max port ID */
|
||||
#define PORT_TEGRA 20 /* NVIDIA Tegra internal UART */
|
||||
#define PORT_MAX_8250 20 /* max port ID */
|
||||
|
||||
/*
|
||||
* ARM specific type numbers. These are not currently guaranteed
|
||||
|
|
@ -202,6 +203,9 @@
|
|||
/* VIA VT8500 SoC */
|
||||
#define PORT_VT8500 97
|
||||
|
||||
/* Xilinx PSS UART */
|
||||
#define PORT_XUARTPS 98
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@
|
|||
* ST16C654: 8 16 56 60 8 16 32 56 PORT_16654
|
||||
* TI16C750: 1 16 32 56 xx xx xx xx PORT_16750
|
||||
* TI16C752: 8 16 56 60 8 16 32 56
|
||||
* Tegra: 1 4 8 14 16 8 4 1 PORT_TEGRA
|
||||
*/
|
||||
#define UART_FCR_R_TRIG_00 0x00
|
||||
#define UART_FCR_R_TRIG_01 0x40
|
||||
|
|
@ -118,6 +119,7 @@
|
|||
#define UART_MCR_DTR 0x01 /* DTR complement */
|
||||
|
||||
#define UART_LSR 5 /* In: Line Status Register */
|
||||
#define UART_LSR_FIFOE 0x80 /* Fifo error */
|
||||
#define UART_LSR_TEMT 0x40 /* Transmitter empty */
|
||||
#define UART_LSR_THRE 0x20 /* Transmit-hold-register empty */
|
||||
#define UART_LSR_BI 0x10 /* Break interrupt indicator */
|
||||
|
|
|
|||
|
|
@ -8,17 +8,27 @@
|
|||
* 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.
|
||||
*
|
||||
* For further information, see the Documentation/hwmon/sht15 file.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct sht15_platform_data - sht15 connectivity info
|
||||
* @gpio_data: no. of gpio to which bidirectional data line is connected
|
||||
* @gpio_sck: no. of gpio to which the data clock is connected.
|
||||
* @supply_mv: supply voltage in mv. Overridden by regulator if available.
|
||||
**/
|
||||
* @gpio_data: no. of gpio to which bidirectional data line is
|
||||
* connected.
|
||||
* @gpio_sck: no. of gpio to which the data clock is connected.
|
||||
* @supply_mv: supply voltage in mv. Overridden by regulator if
|
||||
* available.
|
||||
* @checksum: flag to indicate the checksum should be validated.
|
||||
* @no_otp_reload: flag to indicate no reload from OTP.
|
||||
* @low_resolution: flag to indicate the temp/humidity resolution to use.
|
||||
*/
|
||||
struct sht15_platform_data {
|
||||
int gpio_data;
|
||||
int gpio_sck;
|
||||
int supply_mv;
|
||||
bool checksum;
|
||||
bool no_otp_reload;
|
||||
bool low_resolution;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
#ifdef __KERNEL__
|
||||
#include <linux/list.h>
|
||||
|
||||
struct task_struct;
|
||||
|
||||
/* for sysctl */
|
||||
extern int print_fatal_signals;
|
||||
/*
|
||||
|
|
@ -123,13 +125,13 @@ _SIG_SET_BINOP(sigorsets, _sig_or)
|
|||
#define _sig_and(x,y) ((x) & (y))
|
||||
_SIG_SET_BINOP(sigandsets, _sig_and)
|
||||
|
||||
#define _sig_nand(x,y) ((x) & ~(y))
|
||||
_SIG_SET_BINOP(signandsets, _sig_nand)
|
||||
#define _sig_andn(x,y) ((x) & ~(y))
|
||||
_SIG_SET_BINOP(sigandnsets, _sig_andn)
|
||||
|
||||
#undef _SIG_SET_BINOP
|
||||
#undef _sig_or
|
||||
#undef _sig_and
|
||||
#undef _sig_nand
|
||||
#undef _sig_andn
|
||||
|
||||
#define _SIG_SET_OP(name, op) \
|
||||
static inline void name(sigset_t *set) \
|
||||
|
|
@ -234,6 +236,9 @@ static inline int valid_signal(unsigned long sig)
|
|||
return sig <= _NSIG ? 1 : 0;
|
||||
}
|
||||
|
||||
struct timespec;
|
||||
struct pt_regs;
|
||||
|
||||
extern int next_signal(struct sigpending *pending, sigset_t *mask);
|
||||
extern int do_send_sig_info(int sig, struct siginfo *info,
|
||||
struct task_struct *p, bool group);
|
||||
|
|
@ -242,10 +247,12 @@ extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *);
|
|||
extern long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig,
|
||||
siginfo_t *info);
|
||||
extern long do_sigpending(void __user *, unsigned long);
|
||||
extern int do_sigtimedwait(const sigset_t *, siginfo_t *,
|
||||
const struct timespec *);
|
||||
extern int sigprocmask(int, sigset_t *, sigset_t *);
|
||||
extern void set_current_blocked(const sigset_t *);
|
||||
extern int show_unhandled_signals;
|
||||
|
||||
struct pt_regs;
|
||||
extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie);
|
||||
extern void exit_signals(struct task_struct *tsk);
|
||||
|
||||
|
|
|
|||
|
|
@ -391,8 +391,8 @@ struct sk_buff {
|
|||
|
||||
__u32 rxhash;
|
||||
|
||||
__u16 queue_mapping;
|
||||
kmemcheck_bitfield_begin(flags2);
|
||||
__u16 queue_mapping:16;
|
||||
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||
__u8 ndisc_nodetype:2;
|
||||
#endif
|
||||
|
|
@ -1442,7 +1442,7 @@ extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
|
|||
|
||||
static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
if (unlikely(skb->data_len)) {
|
||||
if (unlikely(skb_is_nonlinear(skb))) {
|
||||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1782,7 +1782,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
|
|||
|
||||
#define skb_queue_walk(queue, skb) \
|
||||
for (skb = (queue)->next; \
|
||||
prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \
|
||||
skb != (struct sk_buff *)(queue); \
|
||||
skb = skb->next)
|
||||
|
||||
#define skb_queue_walk_safe(queue, skb, tmp) \
|
||||
|
|
@ -1791,7 +1791,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
|
|||
skb = tmp, tmp = skb->next)
|
||||
|
||||
#define skb_queue_walk_from(queue, skb) \
|
||||
for (; prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \
|
||||
for (; skb != (struct sk_buff *)(queue); \
|
||||
skb = skb->next)
|
||||
|
||||
#define skb_queue_walk_from_safe(queue, skb, tmp) \
|
||||
|
|
@ -1801,7 +1801,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
|
|||
|
||||
#define skb_queue_reverse_walk(queue, skb) \
|
||||
for (skb = (queue)->prev; \
|
||||
prefetch(skb->prev), (skb != (struct sk_buff *)(queue)); \
|
||||
skb != (struct sk_buff *)(queue); \
|
||||
skb = skb->prev)
|
||||
|
||||
#define skb_queue_reverse_walk_safe(queue, skb, tmp) \
|
||||
|
|
|
|||
|
|
@ -37,9 +37,7 @@ enum stat_item {
|
|||
|
||||
struct kmem_cache_cpu {
|
||||
void **freelist; /* Pointer to next available object */
|
||||
#ifdef CONFIG_CMPXCHG_LOCAL
|
||||
unsigned long tid; /* Globally unique transaction id */
|
||||
#endif
|
||||
struct page *page; /* The slab from which we are allocating */
|
||||
int node; /* The node of the page (or -1 for debug) */
|
||||
#ifdef CONFIG_SLUB_STATS
|
||||
|
|
@ -179,7 +177,8 @@ static __always_inline int kmalloc_index(size_t size)
|
|||
if (size <= 4 * 1024) return 12;
|
||||
/*
|
||||
* The following is only needed to support architectures with a larger page
|
||||
* size than 4k.
|
||||
* size than 4k. We need to support 2 * PAGE_SIZE here. So for a 64k page
|
||||
* size we would have to go up to 128k.
|
||||
*/
|
||||
if (size <= 8 * 1024) return 13;
|
||||
if (size <= 16 * 1024) return 14;
|
||||
|
|
@ -190,7 +189,8 @@ static __always_inline int kmalloc_index(size_t size)
|
|||
if (size <= 512 * 1024) return 19;
|
||||
if (size <= 1024 * 1024) return 20;
|
||||
if (size <= 2 * 1024 * 1024) return 21;
|
||||
return -1;
|
||||
BUG();
|
||||
return -1; /* Will never be reached */
|
||||
|
||||
/*
|
||||
* What we really wanted to do and cannot do because of compiler issues is:
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ struct smsc911x_platform_config {
|
|||
unsigned int irq_polarity;
|
||||
unsigned int irq_type;
|
||||
unsigned int flags;
|
||||
unsigned int shift;
|
||||
phy_interface_t phy_interface;
|
||||
unsigned char mac[6];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -333,5 +333,7 @@ struct timespec;
|
|||
|
||||
extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
|
||||
unsigned int flags, struct timespec *timeout);
|
||||
extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg,
|
||||
unsigned int vlen, unsigned int flags);
|
||||
#endif /* not kernel and not glibc */
|
||||
#endif /* _LINUX_SOCKET_H */
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
# error "please don't include this file directly"
|
||||
#endif
|
||||
|
||||
#include <asm/processor.h> /* for cpu_relax() */
|
||||
|
||||
/*
|
||||
* include/linux/spinlock_up.h - UP-debug version of spinlocks.
|
||||
*
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue