Merge tag 'v3.4-rc2' into regulator-drivers
Linux 3.4-rc2 contains some fixes that further patches depend upon.
This commit is contained in:
@@ -3,6 +3,7 @@ header-y += can/
|
||||
header-y += caif/
|
||||
header-y += dvb/
|
||||
header-y += hdlc/
|
||||
header-y += hsi/
|
||||
header-y += isdn/
|
||||
header-y += mmc/
|
||||
header-y += nfsd/
|
||||
|
||||
@@ -764,12 +764,6 @@ static inline const struct cpumask *get_cpu_mask(unsigned int cpu)
|
||||
*
|
||||
*/
|
||||
#ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS
|
||||
/* These strip const, as traditionally they weren't const. */
|
||||
#define cpu_possible_map (*(cpumask_t *)cpu_possible_mask)
|
||||
#define cpu_online_map (*(cpumask_t *)cpu_online_mask)
|
||||
#define cpu_present_map (*(cpumask_t *)cpu_present_mask)
|
||||
#define cpu_active_map (*(cpumask_t *)cpu_active_mask)
|
||||
|
||||
#define cpumask_of_cpu(cpu) (*get_cpu_mask(cpu))
|
||||
|
||||
#define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS)
|
||||
|
||||
@@ -100,3 +100,6 @@ struct crypto_report_rng {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
unsigned int seedsize;
|
||||
};
|
||||
|
||||
#define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \
|
||||
sizeof(struct crypto_report_blkcipher))
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
enum dma_attr {
|
||||
DMA_ATTR_WRITE_BARRIER,
|
||||
DMA_ATTR_WEAK_ORDERING,
|
||||
DMA_ATTR_WRITE_COMBINE,
|
||||
DMA_ATTR_NON_CONSISTENT,
|
||||
DMA_ATTR_MAX,
|
||||
};
|
||||
|
||||
|
||||
@@ -9,10 +9,15 @@
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
struct dma_map_ops {
|
||||
void* (*alloc_coherent)(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp);
|
||||
void (*free_coherent)(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
void* (*alloc)(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp,
|
||||
struct dma_attrs *attrs);
|
||||
void (*free)(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs);
|
||||
int (*mmap)(struct device *, struct vm_area_struct *,
|
||||
void *, dma_addr_t, size_t, struct dma_attrs *attrs);
|
||||
|
||||
dma_addr_t (*map_page)(struct device *dev, struct page *page,
|
||||
unsigned long offset, size_t size,
|
||||
enum dma_data_direction dir,
|
||||
|
||||
@@ -896,8 +896,7 @@ static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)
|
||||
*
|
||||
* 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.
|
||||
* hold the RTNL lock.
|
||||
*
|
||||
* See the structures used by these operations for further documentation.
|
||||
*
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define _LINUX_FIREWIRE_H
|
||||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/kref.h>
|
||||
@@ -64,8 +65,6 @@
|
||||
#define CSR_MODEL 0x17
|
||||
#define CSR_DIRECTORY_ID 0x20
|
||||
|
||||
struct device;
|
||||
|
||||
struct fw_csr_iterator {
|
||||
const u32 *p;
|
||||
const u32 *end;
|
||||
|
||||
@@ -1215,6 +1215,7 @@ extern int vfs_setlease(struct file *, long, struct file_lock **);
|
||||
extern int lease_modify(struct file_lock **, int);
|
||||
extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
|
||||
extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
|
||||
extern void locks_delete_block(struct file_lock *waiter);
|
||||
extern void lock_flocks(void);
|
||||
extern void unlock_flocks(void);
|
||||
#else /* !CONFIG_FILE_LOCKING */
|
||||
@@ -1359,6 +1360,10 @@ static inline int lock_may_write(struct inode *inode, loff_t start,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void locks_delete_block(struct file_lock *waiter)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void lock_flocks(void)
|
||||
{
|
||||
}
|
||||
@@ -2506,6 +2511,7 @@ extern int dcache_readdir(struct file *, void *, filldir_t);
|
||||
extern int simple_setattr(struct dentry *, struct iattr *);
|
||||
extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
|
||||
extern int simple_statfs(struct dentry *, struct kstatfs *);
|
||||
extern int simple_open(struct inode *inode, struct file *file);
|
||||
extern int simple_link(struct dentry *, struct inode *, struct dentry *);
|
||||
extern int simple_unlink(struct inode *, struct dentry *);
|
||||
extern int simple_rmdir(struct inode *, struct dentry *);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
header-y += hsi_char.h
|
||||
@@ -0,0 +1,410 @@
|
||||
/*
|
||||
* HSI core header file.
|
||||
*
|
||||
* Copyright (C) 2010 Nokia Corporation. All rights reserved.
|
||||
*
|
||||
* Contact: Carlos Chinea <carlos.chinea@nokia.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_HSI_H__
|
||||
#define __LINUX_HSI_H__
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
/* HSI message ttype */
|
||||
#define HSI_MSG_READ 0
|
||||
#define HSI_MSG_WRITE 1
|
||||
|
||||
/* HSI configuration values */
|
||||
enum {
|
||||
HSI_MODE_STREAM = 1,
|
||||
HSI_MODE_FRAME,
|
||||
};
|
||||
|
||||
enum {
|
||||
HSI_FLOW_SYNC, /* Synchronized flow */
|
||||
HSI_FLOW_PIPE, /* Pipelined flow */
|
||||
};
|
||||
|
||||
enum {
|
||||
HSI_ARB_RR, /* Round-robin arbitration */
|
||||
HSI_ARB_PRIO, /* Channel priority arbitration */
|
||||
};
|
||||
|
||||
#define HSI_MAX_CHANNELS 16
|
||||
|
||||
/* HSI message status codes */
|
||||
enum {
|
||||
HSI_STATUS_COMPLETED, /* Message transfer is completed */
|
||||
HSI_STATUS_PENDING, /* Message pending to be read/write (POLL) */
|
||||
HSI_STATUS_PROCEEDING, /* Message transfer is ongoing */
|
||||
HSI_STATUS_QUEUED, /* Message waiting to be served */
|
||||
HSI_STATUS_ERROR, /* Error when message transfer was ongoing */
|
||||
};
|
||||
|
||||
/* HSI port event codes */
|
||||
enum {
|
||||
HSI_EVENT_START_RX,
|
||||
HSI_EVENT_STOP_RX,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct hsi_config - Configuration for RX/TX HSI modules
|
||||
* @mode: Bit transmission mode (STREAM or FRAME)
|
||||
* @channels: Number of channels to use [1..16]
|
||||
* @speed: Max bit transmission speed (Kbit/s)
|
||||
* @flow: RX flow type (SYNCHRONIZED or PIPELINE)
|
||||
* @arb_mode: Arbitration mode for TX frame (Round robin, priority)
|
||||
*/
|
||||
struct hsi_config {
|
||||
unsigned int mode;
|
||||
unsigned int channels;
|
||||
unsigned int speed;
|
||||
union {
|
||||
unsigned int flow; /* RX only */
|
||||
unsigned int arb_mode; /* TX only */
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* struct hsi_board_info - HSI client board info
|
||||
* @name: Name for the HSI device
|
||||
* @hsi_id: HSI controller id where the client sits
|
||||
* @port: Port number in the controller where the client sits
|
||||
* @tx_cfg: HSI TX configuration
|
||||
* @rx_cfg: HSI RX configuration
|
||||
* @platform_data: Platform related data
|
||||
* @archdata: Architecture-dependent device data
|
||||
*/
|
||||
struct hsi_board_info {
|
||||
const char *name;
|
||||
unsigned int hsi_id;
|
||||
unsigned int port;
|
||||
struct hsi_config tx_cfg;
|
||||
struct hsi_config rx_cfg;
|
||||
void *platform_data;
|
||||
struct dev_archdata *archdata;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_HSI_BOARDINFO
|
||||
extern int hsi_register_board_info(struct hsi_board_info const *info,
|
||||
unsigned int len);
|
||||
#else
|
||||
static inline int hsi_register_board_info(struct hsi_board_info const *info,
|
||||
unsigned int len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_HSI_BOARDINFO */
|
||||
|
||||
/**
|
||||
* struct hsi_client - HSI client attached to an HSI port
|
||||
* @device: Driver model representation of the device
|
||||
* @tx_cfg: HSI TX configuration
|
||||
* @rx_cfg: HSI RX configuration
|
||||
* @hsi_start_rx: Called after incoming wake line goes high
|
||||
* @hsi_stop_rx: Called after incoming wake line goes low
|
||||
*/
|
||||
struct hsi_client {
|
||||
struct device device;
|
||||
struct hsi_config tx_cfg;
|
||||
struct hsi_config rx_cfg;
|
||||
void (*hsi_start_rx)(struct hsi_client *cl);
|
||||
void (*hsi_stop_rx)(struct hsi_client *cl);
|
||||
/* private: */
|
||||
unsigned int pclaimed:1;
|
||||
struct list_head link;
|
||||
};
|
||||
|
||||
#define to_hsi_client(dev) container_of(dev, struct hsi_client, device)
|
||||
|
||||
static inline void hsi_client_set_drvdata(struct hsi_client *cl, void *data)
|
||||
{
|
||||
dev_set_drvdata(&cl->device, data);
|
||||
}
|
||||
|
||||
static inline void *hsi_client_drvdata(struct hsi_client *cl)
|
||||
{
|
||||
return dev_get_drvdata(&cl->device);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct hsi_client_driver - Driver associated to an HSI client
|
||||
* @driver: Driver model representation of the driver
|
||||
*/
|
||||
struct hsi_client_driver {
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
#define to_hsi_client_driver(drv) container_of(drv, struct hsi_client_driver,\
|
||||
driver)
|
||||
|
||||
int hsi_register_client_driver(struct hsi_client_driver *drv);
|
||||
|
||||
static inline void hsi_unregister_client_driver(struct hsi_client_driver *drv)
|
||||
{
|
||||
driver_unregister(&drv->driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct hsi_msg - HSI message descriptor
|
||||
* @link: Free to use by the current descriptor owner
|
||||
* @cl: HSI device client that issues the transfer
|
||||
* @sgt: Head of the scatterlist array
|
||||
* @context: Client context data associated to the transfer
|
||||
* @complete: Transfer completion callback
|
||||
* @destructor: Destructor to free resources when flushing
|
||||
* @status: Status of the transfer when completed
|
||||
* @actual_len: Actual length of data transfered on completion
|
||||
* @channel: Channel were to TX/RX the message
|
||||
* @ttype: Transfer type (TX if set, RX otherwise)
|
||||
* @break_frame: if true HSI will send/receive a break frame. Data buffers are
|
||||
* ignored in the request.
|
||||
*/
|
||||
struct hsi_msg {
|
||||
struct list_head link;
|
||||
struct hsi_client *cl;
|
||||
struct sg_table sgt;
|
||||
void *context;
|
||||
|
||||
void (*complete)(struct hsi_msg *msg);
|
||||
void (*destructor)(struct hsi_msg *msg);
|
||||
|
||||
int status;
|
||||
unsigned int actual_len;
|
||||
unsigned int channel;
|
||||
unsigned int ttype:1;
|
||||
unsigned int break_frame:1;
|
||||
};
|
||||
|
||||
struct hsi_msg *hsi_alloc_msg(unsigned int n_frag, gfp_t flags);
|
||||
void hsi_free_msg(struct hsi_msg *msg);
|
||||
|
||||
/**
|
||||
* struct hsi_port - HSI port device
|
||||
* @device: Driver model representation of the device
|
||||
* @tx_cfg: Current TX path configuration
|
||||
* @rx_cfg: Current RX path configuration
|
||||
* @num: Port number
|
||||
* @shared: Set when port can be shared by different clients
|
||||
* @claimed: Reference count of clients which claimed the port
|
||||
* @lock: Serialize port claim
|
||||
* @async: Asynchronous transfer callback
|
||||
* @setup: Callback to set the HSI client configuration
|
||||
* @flush: Callback to clean the HW state and destroy all pending transfers
|
||||
* @start_tx: Callback to inform that a client wants to TX data
|
||||
* @stop_tx: Callback to inform that a client no longer wishes to TX data
|
||||
* @release: Callback to inform that a client no longer uses the port
|
||||
* @clients: List of hsi_clients using the port.
|
||||
* @clock: Lock to serialize access to the clients list.
|
||||
*/
|
||||
struct hsi_port {
|
||||
struct device device;
|
||||
struct hsi_config tx_cfg;
|
||||
struct hsi_config rx_cfg;
|
||||
unsigned int num;
|
||||
unsigned int shared:1;
|
||||
int claimed;
|
||||
struct mutex lock;
|
||||
int (*async)(struct hsi_msg *msg);
|
||||
int (*setup)(struct hsi_client *cl);
|
||||
int (*flush)(struct hsi_client *cl);
|
||||
int (*start_tx)(struct hsi_client *cl);
|
||||
int (*stop_tx)(struct hsi_client *cl);
|
||||
int (*release)(struct hsi_client *cl);
|
||||
struct list_head clients;
|
||||
spinlock_t clock;
|
||||
};
|
||||
|
||||
#define to_hsi_port(dev) container_of(dev, struct hsi_port, device)
|
||||
#define hsi_get_port(cl) to_hsi_port((cl)->device.parent)
|
||||
|
||||
void hsi_event(struct hsi_port *port, unsigned int event);
|
||||
int hsi_claim_port(struct hsi_client *cl, unsigned int share);
|
||||
void hsi_release_port(struct hsi_client *cl);
|
||||
|
||||
static inline int hsi_port_claimed(struct hsi_client *cl)
|
||||
{
|
||||
return cl->pclaimed;
|
||||
}
|
||||
|
||||
static inline void hsi_port_set_drvdata(struct hsi_port *port, void *data)
|
||||
{
|
||||
dev_set_drvdata(&port->device, data);
|
||||
}
|
||||
|
||||
static inline void *hsi_port_drvdata(struct hsi_port *port)
|
||||
{
|
||||
return dev_get_drvdata(&port->device);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct hsi_controller - HSI controller device
|
||||
* @device: Driver model representation of the device
|
||||
* @owner: Pointer to the module owning the controller
|
||||
* @id: HSI controller ID
|
||||
* @num_ports: Number of ports in the HSI controller
|
||||
* @port: Array of HSI ports
|
||||
*/
|
||||
struct hsi_controller {
|
||||
struct device device;
|
||||
struct module *owner;
|
||||
unsigned int id;
|
||||
unsigned int num_ports;
|
||||
struct hsi_port *port;
|
||||
};
|
||||
|
||||
#define to_hsi_controller(dev) container_of(dev, struct hsi_controller, device)
|
||||
|
||||
struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags);
|
||||
void hsi_free_controller(struct hsi_controller *hsi);
|
||||
int hsi_register_controller(struct hsi_controller *hsi);
|
||||
void hsi_unregister_controller(struct hsi_controller *hsi);
|
||||
|
||||
static inline void hsi_controller_set_drvdata(struct hsi_controller *hsi,
|
||||
void *data)
|
||||
{
|
||||
dev_set_drvdata(&hsi->device, data);
|
||||
}
|
||||
|
||||
static inline void *hsi_controller_drvdata(struct hsi_controller *hsi)
|
||||
{
|
||||
return dev_get_drvdata(&hsi->device);
|
||||
}
|
||||
|
||||
static inline struct hsi_port *hsi_find_port_num(struct hsi_controller *hsi,
|
||||
unsigned int num)
|
||||
{
|
||||
return (num < hsi->num_ports) ? &hsi->port[num] : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* API for HSI clients
|
||||
*/
|
||||
int hsi_async(struct hsi_client *cl, struct hsi_msg *msg);
|
||||
|
||||
/**
|
||||
* hsi_id - Get HSI controller ID associated to a client
|
||||
* @cl: Pointer to a HSI client
|
||||
*
|
||||
* Return the controller id where the client is attached to
|
||||
*/
|
||||
static inline unsigned int hsi_id(struct hsi_client *cl)
|
||||
{
|
||||
return to_hsi_controller(cl->device.parent->parent)->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_port_id - Gets the port number a client is attached to
|
||||
* @cl: Pointer to HSI client
|
||||
*
|
||||
* Return the port number associated to the client
|
||||
*/
|
||||
static inline unsigned int hsi_port_id(struct hsi_client *cl)
|
||||
{
|
||||
return to_hsi_port(cl->device.parent)->num;
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_setup - Configure the client's port
|
||||
* @cl: Pointer to the HSI client
|
||||
*
|
||||
* When sharing ports, clients should either relay on a single
|
||||
* client setup or have the same setup for all of them.
|
||||
*
|
||||
* Return -errno on failure, 0 on success
|
||||
*/
|
||||
static inline int hsi_setup(struct hsi_client *cl)
|
||||
{
|
||||
if (!hsi_port_claimed(cl))
|
||||
return -EACCES;
|
||||
return hsi_get_port(cl)->setup(cl);
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_flush - Flush all pending transactions on the client's port
|
||||
* @cl: Pointer to the HSI client
|
||||
*
|
||||
* This function will destroy all pending hsi_msg in the port and reset
|
||||
* the HW port so it is ready to receive and transmit from a clean state.
|
||||
*
|
||||
* Return -errno on failure, 0 on success
|
||||
*/
|
||||
static inline int hsi_flush(struct hsi_client *cl)
|
||||
{
|
||||
if (!hsi_port_claimed(cl))
|
||||
return -EACCES;
|
||||
return hsi_get_port(cl)->flush(cl);
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_async_read - Submit a read transfer
|
||||
* @cl: Pointer to the HSI client
|
||||
* @msg: HSI message descriptor of the transfer
|
||||
*
|
||||
* Return -errno on failure, 0 on success
|
||||
*/
|
||||
static inline int hsi_async_read(struct hsi_client *cl, struct hsi_msg *msg)
|
||||
{
|
||||
msg->ttype = HSI_MSG_READ;
|
||||
return hsi_async(cl, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_async_write - Submit a write transfer
|
||||
* @cl: Pointer to the HSI client
|
||||
* @msg: HSI message descriptor of the transfer
|
||||
*
|
||||
* Return -errno on failure, 0 on success
|
||||
*/
|
||||
static inline int hsi_async_write(struct hsi_client *cl, struct hsi_msg *msg)
|
||||
{
|
||||
msg->ttype = HSI_MSG_WRITE;
|
||||
return hsi_async(cl, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_start_tx - Signal the port that the client wants to start a TX
|
||||
* @cl: Pointer to the HSI client
|
||||
*
|
||||
* Return -errno on failure, 0 on success
|
||||
*/
|
||||
static inline int hsi_start_tx(struct hsi_client *cl)
|
||||
{
|
||||
if (!hsi_port_claimed(cl))
|
||||
return -EACCES;
|
||||
return hsi_get_port(cl)->start_tx(cl);
|
||||
}
|
||||
|
||||
/**
|
||||
* hsi_stop_tx - Signal the port that the client no longer wants to transmit
|
||||
* @cl: Pointer to the HSI client
|
||||
*
|
||||
* Return -errno on failure, 0 on success
|
||||
*/
|
||||
static inline int hsi_stop_tx(struct hsi_client *cl)
|
||||
{
|
||||
if (!hsi_port_claimed(cl))
|
||||
return -EACCES;
|
||||
return hsi_get_port(cl)->stop_tx(cl);
|
||||
}
|
||||
#endif /* __LINUX_HSI_H__ */
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Part of the HSI character device driver.
|
||||
*
|
||||
* Copyright (C) 2010 Nokia Corporation. All rights reserved.
|
||||
*
|
||||
* Contact: Andras Domokos <andras.domokos at nokia.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __HSI_CHAR_H
|
||||
#define __HSI_CHAR_H
|
||||
|
||||
#define HSI_CHAR_MAGIC 'k'
|
||||
#define HSC_IOW(num, dtype) _IOW(HSI_CHAR_MAGIC, num, dtype)
|
||||
#define HSC_IOR(num, dtype) _IOR(HSI_CHAR_MAGIC, num, dtype)
|
||||
#define HSC_IOWR(num, dtype) _IOWR(HSI_CHAR_MAGIC, num, dtype)
|
||||
#define HSC_IO(num) _IO(HSI_CHAR_MAGIC, num)
|
||||
|
||||
#define HSC_RESET HSC_IO(16)
|
||||
#define HSC_SET_PM HSC_IO(17)
|
||||
#define HSC_SEND_BREAK HSC_IO(18)
|
||||
#define HSC_SET_RX HSC_IOW(19, struct hsc_rx_config)
|
||||
#define HSC_GET_RX HSC_IOW(20, struct hsc_rx_config)
|
||||
#define HSC_SET_TX HSC_IOW(21, struct hsc_tx_config)
|
||||
#define HSC_GET_TX HSC_IOW(22, struct hsc_tx_config)
|
||||
|
||||
#define HSC_PM_DISABLE 0
|
||||
#define HSC_PM_ENABLE 1
|
||||
|
||||
#define HSC_MODE_STREAM 1
|
||||
#define HSC_MODE_FRAME 2
|
||||
#define HSC_FLOW_SYNC 0
|
||||
#define HSC_ARB_RR 0
|
||||
#define HSC_ARB_PRIO 1
|
||||
|
||||
struct hsc_rx_config {
|
||||
uint32_t mode;
|
||||
uint32_t flow;
|
||||
uint32_t channels;
|
||||
};
|
||||
|
||||
struct hsc_tx_config {
|
||||
uint32_t mode;
|
||||
uint32_t channels;
|
||||
uint32_t speed;
|
||||
uint32_t arb_mode;
|
||||
};
|
||||
|
||||
#endif /* __HSI_CHAR_H */
|
||||
@@ -22,7 +22,7 @@
|
||||
#define EQL_DEFAULT_SLAVE_PRIORITY 28800
|
||||
#define EQL_DEFAULT_MAX_SLAVES 4
|
||||
#define EQL_DEFAULT_MTU 576
|
||||
#define EQL_DEFAULT_RESCHED_IVAL 100
|
||||
#define EQL_DEFAULT_RESCHED_IVAL HZ
|
||||
|
||||
#define EQL_ENSLAVE (SIOCDEVPRIVATE)
|
||||
#define EQL_EMANCIPATE (SIOCDEVPRIVATE + 1)
|
||||
|
||||
@@ -63,7 +63,8 @@ enum kgdb_bptype {
|
||||
BP_HARDWARE_BREAKPOINT,
|
||||
BP_WRITE_WATCHPOINT,
|
||||
BP_READ_WATCHPOINT,
|
||||
BP_ACCESS_WATCHPOINT
|
||||
BP_ACCESS_WATCHPOINT,
|
||||
BP_POKE_BREAKPOINT,
|
||||
};
|
||||
|
||||
enum kgdb_bpstate {
|
||||
@@ -207,8 +208,8 @@ extern void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc);
|
||||
|
||||
/* Optional functions. */
|
||||
extern int kgdb_validate_break_address(unsigned long addr);
|
||||
extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr);
|
||||
extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle);
|
||||
extern int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt);
|
||||
extern int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt);
|
||||
|
||||
/**
|
||||
* kgdb_arch_late - Perform any architecture specific initalization.
|
||||
|
||||
+22
-5
@@ -110,12 +110,29 @@ call_usermodehelper(char *path, char **argv, char **envp, int wait)
|
||||
|
||||
extern struct ctl_table usermodehelper_table[];
|
||||
|
||||
enum umh_disable_depth {
|
||||
UMH_ENABLED = 0,
|
||||
UMH_FREEZING,
|
||||
UMH_DISABLED,
|
||||
};
|
||||
|
||||
extern void usermodehelper_init(void);
|
||||
|
||||
extern int usermodehelper_disable(void);
|
||||
extern void usermodehelper_enable(void);
|
||||
extern bool usermodehelper_is_disabled(void);
|
||||
extern void read_lock_usermodehelper(void);
|
||||
extern void read_unlock_usermodehelper(void);
|
||||
extern int __usermodehelper_disable(enum umh_disable_depth depth);
|
||||
extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
|
||||
|
||||
static inline int usermodehelper_disable(void)
|
||||
{
|
||||
return __usermodehelper_disable(UMH_DISABLED);
|
||||
}
|
||||
|
||||
static inline void usermodehelper_enable(void)
|
||||
{
|
||||
__usermodehelper_set_disable_depth(UMH_ENABLED);
|
||||
}
|
||||
|
||||
extern int usermodehelper_read_trylock(void);
|
||||
extern long usermodehelper_read_lock_wait(long timeout);
|
||||
extern void usermodehelper_read_unlock(void);
|
||||
|
||||
#endif /* __LINUX_KMOD_H__ */
|
||||
|
||||
+25
-71
@@ -22,6 +22,23 @@
|
||||
#include <linux/key.h>
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
struct lsm_network_audit {
|
||||
int netif;
|
||||
struct sock *sk;
|
||||
u16 family;
|
||||
__be16 dport;
|
||||
__be16 sport;
|
||||
union {
|
||||
struct {
|
||||
__be32 daddr;
|
||||
__be32 saddr;
|
||||
} v4;
|
||||
struct {
|
||||
struct in6_addr daddr;
|
||||
struct in6_addr saddr;
|
||||
} v6;
|
||||
} fam;
|
||||
};
|
||||
|
||||
/* Auxiliary data to use in generating the audit record. */
|
||||
struct common_audit_data {
|
||||
@@ -41,23 +58,7 @@ struct common_audit_data {
|
||||
struct path path;
|
||||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
struct {
|
||||
int netif;
|
||||
struct sock *sk;
|
||||
u16 family;
|
||||
__be16 dport;
|
||||
__be16 sport;
|
||||
union {
|
||||
struct {
|
||||
__be32 daddr;
|
||||
__be32 saddr;
|
||||
} v4;
|
||||
struct {
|
||||
struct in6_addr daddr;
|
||||
struct in6_addr saddr;
|
||||
} v6;
|
||||
} fam;
|
||||
} net;
|
||||
struct lsm_network_audit *net;
|
||||
int cap;
|
||||
int ipc_id;
|
||||
struct task_struct *tsk;
|
||||
@@ -72,64 +73,15 @@ struct common_audit_data {
|
||||
/* this union contains LSM specific data */
|
||||
union {
|
||||
#ifdef CONFIG_SECURITY_SMACK
|
||||
/* SMACK data */
|
||||
struct smack_audit_data {
|
||||
const char *function;
|
||||
char *subject;
|
||||
char *object;
|
||||
char *request;
|
||||
int result;
|
||||
} smack_audit_data;
|
||||
struct smack_audit_data *smack_audit_data;
|
||||
#endif
|
||||
#ifdef CONFIG_SECURITY_SELINUX
|
||||
/* SELinux data */
|
||||
struct {
|
||||
u32 ssid;
|
||||
u32 tsid;
|
||||
u16 tclass;
|
||||
u32 requested;
|
||||
u32 audited;
|
||||
u32 denied;
|
||||
/*
|
||||
* auditdeny is a bit tricky and unintuitive. See the
|
||||
* comments in avc.c for it's meaning and usage.
|
||||
*/
|
||||
u32 auditdeny;
|
||||
struct av_decision *avd;
|
||||
int result;
|
||||
} selinux_audit_data;
|
||||
struct selinux_audit_data *selinux_audit_data;
|
||||
#endif
|
||||
#ifdef CONFIG_SECURITY_APPARMOR
|
||||
struct {
|
||||
int error;
|
||||
int op;
|
||||
int type;
|
||||
void *profile;
|
||||
const char *name;
|
||||
const char *info;
|
||||
union {
|
||||
void *target;
|
||||
struct {
|
||||
long pos;
|
||||
void *target;
|
||||
} iface;
|
||||
struct {
|
||||
int rlim;
|
||||
unsigned long max;
|
||||
} rlim;
|
||||
struct {
|
||||
const char *target;
|
||||
u32 request;
|
||||
u32 denied;
|
||||
uid_t ouid;
|
||||
} fs;
|
||||
};
|
||||
} apparmor_audit_data;
|
||||
struct apparmor_audit_data *apparmor_audit_data;
|
||||
#endif
|
||||
};
|
||||
/* these callback will be implemented by a specific LSM */
|
||||
void (*lsm_pre_audit)(struct audit_buffer *, void *);
|
||||
void (*lsm_post_audit)(struct audit_buffer *, void *);
|
||||
}; /* per LSM data pointer union */
|
||||
};
|
||||
|
||||
#define v4info fam.v4
|
||||
@@ -146,6 +98,8 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb,
|
||||
{ memset((_d), 0, sizeof(struct common_audit_data)); \
|
||||
(_d)->type = LSM_AUDIT_DATA_##_t; }
|
||||
|
||||
void common_lsm_audit(struct common_audit_data *a);
|
||||
void common_lsm_audit(struct common_audit_data *a,
|
||||
void (*pre_audit)(struct audit_buffer *, void *),
|
||||
void (*post_audit)(struct audit_buffer *, void *));
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2604,8 +2604,6 @@ extern void net_disable_timestamp(void);
|
||||
extern void *dev_seq_start(struct seq_file *seq, loff_t *pos);
|
||||
extern void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos);
|
||||
extern void dev_seq_stop(struct seq_file *seq, void *v);
|
||||
extern int dev_seq_open_ops(struct inode *inode, struct file *file,
|
||||
const struct seq_operations *ops);
|
||||
#endif
|
||||
|
||||
extern int netdev_class_create_file(struct class_attribute *class_attr);
|
||||
|
||||
@@ -58,8 +58,8 @@ struct xt_set_info_target_v1 {
|
||||
struct xt_set_info_target_v2 {
|
||||
struct xt_set_info add_set;
|
||||
struct xt_set_info del_set;
|
||||
u32 flags;
|
||||
u32 timeout;
|
||||
__u32 flags;
|
||||
__u32 timeout;
|
||||
};
|
||||
|
||||
#endif /*_XT_SET_H*/
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
* GPL v2 Only
|
||||
*/
|
||||
|
||||
#ifndef __ATMEL_NAND_H__
|
||||
#define __ATMEL_NAND_H__
|
||||
#ifndef __ATMEL_H__
|
||||
#define __ATMEL_H__
|
||||
|
||||
#include <linux/mtd/nand.h>
|
||||
|
||||
@@ -24,4 +24,4 @@ struct atmel_nand_data {
|
||||
unsigned int num_parts;
|
||||
};
|
||||
|
||||
#endif /* __ATMEL_NAND_H__ */
|
||||
#endif /* __ATMEL_H__ */
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
enum {
|
||||
PM_QOS_RESERVED = 0,
|
||||
@@ -29,6 +30,7 @@ enum {
|
||||
struct pm_qos_request {
|
||||
struct plist_node node;
|
||||
int pm_qos_class;
|
||||
struct delayed_work work; /* for pm_qos_update_request_timeout */
|
||||
};
|
||||
|
||||
struct dev_pm_qos_request {
|
||||
@@ -73,6 +75,8 @@ void pm_qos_add_request(struct pm_qos_request *req, int pm_qos_class,
|
||||
s32 value);
|
||||
void pm_qos_update_request(struct pm_qos_request *req,
|
||||
s32 new_value);
|
||||
void pm_qos_update_request_timeout(struct pm_qos_request *req,
|
||||
s32 new_value, unsigned long timeout_us);
|
||||
void pm_qos_remove_request(struct pm_qos_request *req);
|
||||
|
||||
int pm_qos_request(int pm_qos_class);
|
||||
|
||||
@@ -71,7 +71,7 @@ struct regulator_state {
|
||||
* @uV_offset: Offset applied to voltages from consumer to compensate for
|
||||
* voltage drops.
|
||||
*
|
||||
* @min_uA: Smallest consumers consumers may set.
|
||||
* @min_uA: Smallest current consumers may set.
|
||||
* @max_uA: Largest current consumers may set.
|
||||
*
|
||||
* @valid_modes_mask: Mask of modes which may be configured by consumers.
|
||||
@@ -134,10 +134,8 @@ struct regulation_constraints {
|
||||
/**
|
||||
* struct regulator_consumer_supply - supply -> device mapping
|
||||
*
|
||||
* This maps a supply name to a device. Only one of dev or dev_name
|
||||
* can be specified. Use of dev_name allows support for buses which
|
||||
* make struct device available late such as I2C and is the preferred
|
||||
* form.
|
||||
* This maps a supply name to a device. Use of dev_name allows support for
|
||||
* buses which make struct device available late such as I2C.
|
||||
*
|
||||
* @dev_name: Result of dev_name() for the consumer.
|
||||
* @supply: Name for the supply.
|
||||
|
||||
@@ -265,7 +265,7 @@ struct ucred {
|
||||
#define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
|
||||
#define MSG_MORE 0x8000 /* Sender will send more */
|
||||
#define MSG_WAITFORONE 0x10000 /* recvmmsg(): block until 1+ packets avail */
|
||||
|
||||
#define MSG_SENDPAGE_NOTLAST 0x20000 /* sendpage() internal : not the last page */
|
||||
#define MSG_EOF MSG_FIN
|
||||
|
||||
#define MSG_CMSG_CLOEXEC 0x40000000 /* Set close_on_exit for file
|
||||
|
||||
@@ -305,6 +305,13 @@ static inline int mem_cgroup_swappiness(struct mem_cgroup *mem)
|
||||
return vm_swappiness;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
|
||||
extern void mem_cgroup_uncharge_swap(swp_entry_t ent);
|
||||
#else
|
||||
static inline void mem_cgroup_uncharge_swap(swp_entry_t ent)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_SWAP
|
||||
/* linux/mm/page_io.c */
|
||||
extern int swap_readpage(struct page *);
|
||||
@@ -375,13 +382,6 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
|
||||
extern void mem_cgroup_uncharge_swap(swp_entry_t ent);
|
||||
#else
|
||||
static inline void mem_cgroup_uncharge_swap(swp_entry_t ent)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_SWAP */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user