mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
Merge commit 'v2.6.30-rc3' into tracing/hw-branch-tracing
Conflicts:
arch/x86/kernel/ptrace.c
Merge reason: fix the conflict above, and also pick up the CONFIG_BROKEN
dependency change from upstream so that we can remove it
here.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
commit
416dfdcdb8
2109 changed files with 109824 additions and 58535 deletions
|
|
@ -29,6 +29,8 @@
|
|||
#ifndef __LINUX_ATA_H__
|
||||
#define __LINUX_ATA_H__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
|
|
@ -91,6 +93,7 @@ enum {
|
|||
ATA_ID_CFA_POWER = 160,
|
||||
ATA_ID_CFA_KEY_MGMT = 162,
|
||||
ATA_ID_CFA_MODES = 163,
|
||||
ATA_ID_DATA_SET_MGMT = 169,
|
||||
ATA_ID_ROT_SPEED = 217,
|
||||
ATA_ID_PIO4 = (1 << 1),
|
||||
|
||||
|
|
@ -248,6 +251,7 @@ enum {
|
|||
ATA_CMD_SMART = 0xB0,
|
||||
ATA_CMD_MEDIA_LOCK = 0xDE,
|
||||
ATA_CMD_MEDIA_UNLOCK = 0xDF,
|
||||
ATA_CMD_DSM = 0x06,
|
||||
/* marked obsolete in the ATA/ATAPI-7 spec */
|
||||
ATA_CMD_RESTORE = 0x10,
|
||||
|
||||
|
|
@ -321,6 +325,9 @@ enum {
|
|||
ATA_SMART_READ_VALUES = 0xD0,
|
||||
ATA_SMART_READ_THRESHOLDS = 0xD1,
|
||||
|
||||
/* feature values for Data Set Management */
|
||||
ATA_DSM_TRIM = 0x01,
|
||||
|
||||
/* password used in LBA Mid / LBA High for executing SMART commands */
|
||||
ATA_SMART_LBAM_PASS = 0x4F,
|
||||
ATA_SMART_LBAH_PASS = 0xC2,
|
||||
|
|
@ -723,6 +730,14 @@ static inline int ata_id_has_unload(const u16 *id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int ata_id_has_trim(const u16 *id)
|
||||
{
|
||||
if (ata_id_major_version(id) >= 7 &&
|
||||
(id[ATA_ID_DATA_SET_MGMT] & 1))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int ata_id_current_chs_valid(const u16 *id)
|
||||
{
|
||||
/* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
|
||||
|
|
@ -863,6 +878,32 @@ static inline void ata_id_to_hd_driveid(u16 *id)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Write up to 'max' LBA Range Entries to the buffer that will cover the
|
||||
* extent from sector to sector + count. This is used for TRIM and for
|
||||
* ADD LBA(S) TO NV CACHE PINNED SET.
|
||||
*/
|
||||
static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max,
|
||||
u64 sector, unsigned long count)
|
||||
{
|
||||
__le64 *buffer = _buffer;
|
||||
unsigned i = 0;
|
||||
|
||||
while (i < max) {
|
||||
u64 entry = sector |
|
||||
((u64)(count > 0xffff ? 0xffff : count) << 48);
|
||||
buffer[i++] = __cpu_to_le64(entry);
|
||||
if (count <= 0xffff)
|
||||
break;
|
||||
count -= 0xffff;
|
||||
sector += 0xffff;
|
||||
}
|
||||
|
||||
max = ALIGN(i * 8, 512);
|
||||
memset(buffer + i, 0, max - i * 8);
|
||||
return max;
|
||||
}
|
||||
|
||||
static inline int is_multi_taskfile(struct ata_taskfile *tf)
|
||||
{
|
||||
return (tf->command == ATA_CMD_READ_MULTI) ||
|
||||
|
|
|
|||
|
|
@ -504,6 +504,115 @@ static inline int bio_has_data(struct bio *bio)
|
|||
return bio && bio->bi_io_vec != NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* BIO list managment for use by remapping drivers (e.g. DM or MD).
|
||||
*
|
||||
* A bio_list anchors a singly-linked list of bios chained through the bi_next
|
||||
* member of the bio. The bio_list also caches the last list member to allow
|
||||
* fast access to the tail.
|
||||
*/
|
||||
struct bio_list {
|
||||
struct bio *head;
|
||||
struct bio *tail;
|
||||
};
|
||||
|
||||
static inline int bio_list_empty(const struct bio_list *bl)
|
||||
{
|
||||
return bl->head == NULL;
|
||||
}
|
||||
|
||||
static inline void bio_list_init(struct bio_list *bl)
|
||||
{
|
||||
bl->head = bl->tail = NULL;
|
||||
}
|
||||
|
||||
#define bio_list_for_each(bio, bl) \
|
||||
for (bio = (bl)->head; bio; bio = bio->bi_next)
|
||||
|
||||
static inline unsigned bio_list_size(const struct bio_list *bl)
|
||||
{
|
||||
unsigned sz = 0;
|
||||
struct bio *bio;
|
||||
|
||||
bio_list_for_each(bio, bl)
|
||||
sz++;
|
||||
|
||||
return sz;
|
||||
}
|
||||
|
||||
static inline void bio_list_add(struct bio_list *bl, struct bio *bio)
|
||||
{
|
||||
bio->bi_next = NULL;
|
||||
|
||||
if (bl->tail)
|
||||
bl->tail->bi_next = bio;
|
||||
else
|
||||
bl->head = bio;
|
||||
|
||||
bl->tail = bio;
|
||||
}
|
||||
|
||||
static inline void bio_list_add_head(struct bio_list *bl, struct bio *bio)
|
||||
{
|
||||
bio->bi_next = bl->head;
|
||||
|
||||
bl->head = bio;
|
||||
|
||||
if (!bl->tail)
|
||||
bl->tail = bio;
|
||||
}
|
||||
|
||||
static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2)
|
||||
{
|
||||
if (!bl2->head)
|
||||
return;
|
||||
|
||||
if (bl->tail)
|
||||
bl->tail->bi_next = bl2->head;
|
||||
else
|
||||
bl->head = bl2->head;
|
||||
|
||||
bl->tail = bl2->tail;
|
||||
}
|
||||
|
||||
static inline void bio_list_merge_head(struct bio_list *bl,
|
||||
struct bio_list *bl2)
|
||||
{
|
||||
if (!bl2->head)
|
||||
return;
|
||||
|
||||
if (bl->head)
|
||||
bl2->tail->bi_next = bl->head;
|
||||
else
|
||||
bl->tail = bl2->tail;
|
||||
|
||||
bl->head = bl2->head;
|
||||
}
|
||||
|
||||
static inline struct bio *bio_list_pop(struct bio_list *bl)
|
||||
{
|
||||
struct bio *bio = bl->head;
|
||||
|
||||
if (bio) {
|
||||
bl->head = bl->head->bi_next;
|
||||
if (!bl->head)
|
||||
bl->tail = NULL;
|
||||
|
||||
bio->bi_next = NULL;
|
||||
}
|
||||
|
||||
return bio;
|
||||
}
|
||||
|
||||
static inline struct bio *bio_list_get(struct bio_list *bl)
|
||||
{
|
||||
struct bio *bio = bl->head;
|
||||
|
||||
bl->head = bl->tail = NULL;
|
||||
|
||||
return bio;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_INTEGRITY)
|
||||
|
||||
#define bip_vec_idx(bip, idx) (&(bip->bip_vec[(idx)]))
|
||||
|
|
|
|||
|
|
@ -117,7 +117,6 @@ enum rq_flag_bits {
|
|||
__REQ_RW_META, /* metadata io request */
|
||||
__REQ_COPY_USER, /* contains copies of user pages */
|
||||
__REQ_INTEGRITY, /* integrity metadata has been remapped */
|
||||
__REQ_UNPLUG, /* unplug queue on submission */
|
||||
__REQ_NOIDLE, /* Don't anticipate more IO after this one */
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
|
@ -145,7 +144,6 @@ enum rq_flag_bits {
|
|||
#define REQ_RW_META (1 << __REQ_RW_META)
|
||||
#define REQ_COPY_USER (1 << __REQ_COPY_USER)
|
||||
#define REQ_INTEGRITY (1 << __REQ_INTEGRITY)
|
||||
#define REQ_UNPLUG (1 << __REQ_UNPLUG)
|
||||
#define REQ_NOIDLE (1 << __REQ_NOIDLE)
|
||||
|
||||
#define BLK_MAX_CDB 16
|
||||
|
|
|
|||
|
|
@ -155,6 +155,7 @@ void create_empty_buffers(struct page *, unsigned long,
|
|||
unsigned long b_state);
|
||||
void end_buffer_read_sync(struct buffer_head *bh, int uptodate);
|
||||
void end_buffer_write_sync(struct buffer_head *bh, int uptodate);
|
||||
void end_buffer_async_write(struct buffer_head *bh, int uptodate);
|
||||
|
||||
/* Things to do with buffers at mapping->private_list */
|
||||
void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode);
|
||||
|
|
@ -197,6 +198,8 @@ extern int buffer_heads_over_limit;
|
|||
void block_invalidatepage(struct page *page, unsigned long offset);
|
||||
int block_write_full_page(struct page *page, get_block_t *get_block,
|
||||
struct writeback_control *wbc);
|
||||
int block_write_full_page_endio(struct page *page, get_block_t *get_block,
|
||||
struct writeback_control *wbc, bh_end_io_t *handler);
|
||||
int block_read_full_page(struct page*, get_block_t*);
|
||||
int block_is_partially_uptodate(struct page *page, read_descriptor_t *desc,
|
||||
unsigned long from);
|
||||
|
|
|
|||
|
|
@ -377,7 +377,21 @@ struct cpu_vfs_cap_data {
|
|||
#define CAP_FOR_EACH_U32(__capi) \
|
||||
for (__capi = 0; __capi < _KERNEL_CAPABILITY_U32S; ++__capi)
|
||||
|
||||
/*
|
||||
* CAP_FS_MASK and CAP_NFSD_MASKS:
|
||||
*
|
||||
* The fs mask is all the privileges that fsuid==0 historically meant.
|
||||
* At one time in the past, that included CAP_MKNOD and CAP_LINUX_IMMUTABLE.
|
||||
*
|
||||
* It has never meant setting security.* and trusted.* xattrs.
|
||||
*
|
||||
* We could also define fsmask as follows:
|
||||
* 1. CAP_FS_MASK is the privilege to bypass all fs-related DAC permissions
|
||||
* 2. The security.* and trusted.* xattrs are fs-related MAC permissions
|
||||
*/
|
||||
|
||||
# define CAP_FS_MASK_B0 (CAP_TO_MASK(CAP_CHOWN) \
|
||||
| CAP_TO_MASK(CAP_MKNOD) \
|
||||
| CAP_TO_MASK(CAP_DAC_OVERRIDE) \
|
||||
| CAP_TO_MASK(CAP_DAC_READ_SEARCH) \
|
||||
| CAP_TO_MASK(CAP_FOWNER) \
|
||||
|
|
@ -392,11 +406,12 @@ struct cpu_vfs_cap_data {
|
|||
# define CAP_EMPTY_SET ((kernel_cap_t){{ 0, 0 }})
|
||||
# define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }})
|
||||
# define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }})
|
||||
# define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } })
|
||||
# define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \
|
||||
| CAP_TO_MASK(CAP_LINUX_IMMUTABLE), \
|
||||
CAP_FS_MASK_B1 } })
|
||||
# define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \
|
||||
| CAP_TO_MASK(CAP_SYS_RESOURCE) \
|
||||
| CAP_TO_MASK(CAP_MKNOD), \
|
||||
CAP_FS_MASK_B1 } })
|
||||
| CAP_TO_MASK(CAP_SYS_RESOURCE), \
|
||||
CAP_FS_MASK_B1 } })
|
||||
|
||||
#endif /* _KERNEL_CAPABILITY_U32S != 2 */
|
||||
|
||||
|
|
|
|||
|
|
@ -143,7 +143,9 @@ extern u64 timecounter_cyc2time(struct timecounter *tc,
|
|||
* 400-499: Perfect
|
||||
* The ideal clocksource. A must-use where
|
||||
* available.
|
||||
* @read: returns a cycle value
|
||||
* @read: returns a cycle value, passes clocksource as argument
|
||||
* @enable: optional function to enable the clocksource
|
||||
* @disable: optional function to disable the clocksource
|
||||
* @mask: bitmask for two's complement
|
||||
* subtraction of non 64 bit counters
|
||||
* @mult: cycle to nanosecond multiplier (adjusted by NTP)
|
||||
|
|
@ -162,7 +164,9 @@ struct clocksource {
|
|||
char *name;
|
||||
struct list_head list;
|
||||
int rating;
|
||||
cycle_t (*read)(void);
|
||||
cycle_t (*read)(struct clocksource *cs);
|
||||
int (*enable)(struct clocksource *cs);
|
||||
void (*disable)(struct clocksource *cs);
|
||||
cycle_t mask;
|
||||
u32 mult;
|
||||
u32 mult_orig;
|
||||
|
|
@ -271,7 +275,34 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant)
|
|||
*/
|
||||
static inline cycle_t clocksource_read(struct clocksource *cs)
|
||||
{
|
||||
return cs->read();
|
||||
return cs->read(cs);
|
||||
}
|
||||
|
||||
/**
|
||||
* clocksource_enable: - enable clocksource
|
||||
* @cs: pointer to clocksource
|
||||
*
|
||||
* Enables the specified clocksource. The clocksource callback
|
||||
* function should start up the hardware and setup mult and field
|
||||
* members of struct clocksource to reflect hardware capabilities.
|
||||
*/
|
||||
static inline int clocksource_enable(struct clocksource *cs)
|
||||
{
|
||||
return cs->enable ? cs->enable(cs) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* clocksource_disable: - disable clocksource
|
||||
* @cs: pointer to clocksource
|
||||
*
|
||||
* Disables the specified clocksource. The clocksource callback
|
||||
* function should power down the now unused hardware block to
|
||||
* save power.
|
||||
*/
|
||||
static inline void clocksource_disable(struct clocksource *cs)
|
||||
{
|
||||
if (cs->disable)
|
||||
cs->disable(cs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ struct ftrace_branch_data {
|
|||
* Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
|
||||
* to disable branch tracing on a per file basis.
|
||||
*/
|
||||
#if defined(CONFIG_TRACE_BRANCH_PROFILING) && !defined(DISABLE_BRANCH_PROFILING)
|
||||
#if defined(CONFIG_TRACE_BRANCH_PROFILING) \
|
||||
&& !defined(DISABLE_BRANCH_PROFILING) && !defined(__CHECKER__)
|
||||
void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
||||
|
||||
#define likely_notrace(x) __builtin_expect(!!(x), 1)
|
||||
|
|
@ -114,7 +115,9 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
|||
* "Define 'is'", Bill Clinton
|
||||
* "Define 'if'", Steven Rostedt
|
||||
*/
|
||||
#define if(cond) if (__builtin_constant_p((cond)) ? !!(cond) : \
|
||||
#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
|
||||
#define __trace_if(cond) \
|
||||
if (__builtin_constant_p((cond)) ? !!(cond) : \
|
||||
({ \
|
||||
int ______r; \
|
||||
static struct ftrace_branch_data \
|
||||
|
|
|
|||
|
|
@ -2,12 +2,20 @@
|
|||
#define __LINUX_DEBUG_LOCKING_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
struct task_struct;
|
||||
|
||||
extern int debug_locks;
|
||||
extern int debug_locks_silent;
|
||||
|
||||
|
||||
static inline int __debug_locks_off(void)
|
||||
{
|
||||
return xchg(&debug_locks, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic 'turn off all lock debugging' function:
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -116,7 +116,6 @@ void dm_put_device(struct dm_target *ti, struct dm_dev *d);
|
|||
/*
|
||||
* Target features
|
||||
*/
|
||||
#define DM_TARGET_SUPPORTS_BARRIERS 0x00000001
|
||||
|
||||
struct target_type {
|
||||
uint64_t features;
|
||||
|
|
|
|||
|
|
@ -551,6 +551,7 @@ extern int (*platform_notify_remove)(struct device *dev);
|
|||
extern struct device *get_device(struct device *dev);
|
||||
extern void put_device(struct device *dev);
|
||||
|
||||
extern void wait_for_device_probe(void);
|
||||
|
||||
/* drivers/base/power/shutdown.c */
|
||||
extern void device_shutdown(void);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ static inline u64 dma_get_mask(struct device *dev)
|
|||
{
|
||||
if (dev && dev->dma_mask && *dev->dma_mask)
|
||||
return *dev->dma_mask;
|
||||
return DMA_32BIT_MASK;
|
||||
return DMA_BIT_MASK(32);
|
||||
}
|
||||
|
||||
extern u64 dma_get_required_mask(struct device *dev);
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ extern int ddebug_remove_module(char *mod_name);
|
|||
DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \
|
||||
if (__dynamic_dbg_enabled(descriptor)) \
|
||||
dev_printk(KERN_DEBUG, dev, \
|
||||
KBUILD_MODNAME ": " pr_fmt(fmt),\
|
||||
KBUILD_MODNAME ": " fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ extern void elv_abort_queue(struct request_queue *);
|
|||
extern void elv_completed_request(struct request_queue *, struct request *);
|
||||
extern int elv_set_request(struct request_queue *, struct request *, gfp_t);
|
||||
extern void elv_put_request(struct request_queue *, struct request *);
|
||||
extern void elv_drain_elevator(struct request_queue *);
|
||||
|
||||
/*
|
||||
* io scheduler registration
|
||||
|
|
|
|||
|
|
@ -173,8 +173,12 @@ struct fb_fix_screeninfo {
|
|||
/* Interpretation of offset for color fields: All offsets are from the right,
|
||||
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
|
||||
* can use the offset as right argument to <<). A pixel afterwards is a bit
|
||||
* stream and is written to video memory as that unmodified. This implies
|
||||
* big-endian byte order if bits_per_pixel is greater than 8.
|
||||
* stream and is written to video memory as that unmodified.
|
||||
*
|
||||
* For pseudocolor: offset and length should be the same for all color
|
||||
* components. Offset specifies the position of the least significant bit
|
||||
* of the pallette index in a pixel value. Length indicates the number
|
||||
* of available palette entries (i.e. # of entries = 1 << length).
|
||||
*/
|
||||
struct fb_bitfield {
|
||||
__u32 offset; /* beginning of bitfield */
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
#ifndef _LINUX_FIEMAP_H
|
||||
#define _LINUX_FIEMAP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct fiemap_extent {
|
||||
__u64 fe_logical; /* logical offset in bytes for the start of
|
||||
* the extent from the beginning of the file */
|
||||
|
|
|
|||
|
|
@ -87,6 +87,60 @@ struct inodes_stat_t {
|
|||
*/
|
||||
#define FMODE_NOCMTIME ((__force fmode_t)2048)
|
||||
|
||||
/*
|
||||
* The below are the various read and write types that we support. Some of
|
||||
* them include behavioral modifiers that send information down to the
|
||||
* block layer and IO scheduler. Terminology:
|
||||
*
|
||||
* The block layer uses device plugging to defer IO a little bit, in
|
||||
* the hope that we will see more IO very shortly. This increases
|
||||
* coalescing of adjacent IO and thus reduces the number of IOs we
|
||||
* have to send to the device. It also allows for better queuing,
|
||||
* if the IO isn't mergeable. If the caller is going to be waiting
|
||||
* for the IO, then he must ensure that the device is unplugged so
|
||||
* that the IO is dispatched to the driver.
|
||||
*
|
||||
* All IO is handled async in Linux. This is fine for background
|
||||
* writes, but for reads or writes that someone waits for completion
|
||||
* on, we want to notify the block layer and IO scheduler so that they
|
||||
* know about it. That allows them to make better scheduling
|
||||
* decisions. So when the below references 'sync' and 'async', it
|
||||
* is referencing this priority hint.
|
||||
*
|
||||
* With that in mind, the available types are:
|
||||
*
|
||||
* READ A normal read operation. Device will be plugged.
|
||||
* READ_SYNC A synchronous read. Device is not plugged, caller can
|
||||
* immediately wait on this read without caring about
|
||||
* unplugging.
|
||||
* READA Used for read-ahead operations. Lower priority, and the
|
||||
* block layer could (in theory) choose to ignore this
|
||||
* request if it runs into resource problems.
|
||||
* WRITE A normal async write. Device will be plugged.
|
||||
* SWRITE Like WRITE, but a special case for ll_rw_block() that
|
||||
* tells it to lock the buffer first. Normally a buffer
|
||||
* must be locked before doing IO.
|
||||
* WRITE_SYNC_PLUG Synchronous write. Identical to WRITE, but passes down
|
||||
* the hint that someone will be waiting on this IO
|
||||
* shortly. The device must still be unplugged explicitly,
|
||||
* WRITE_SYNC_PLUG does not do this as we could be
|
||||
* submitting more writes before we actually wait on any
|
||||
* of them.
|
||||
* WRITE_SYNC Like WRITE_SYNC_PLUG, but also unplugs the device
|
||||
* immediately after submission. The write equivalent
|
||||
* of READ_SYNC.
|
||||
* WRITE_ODIRECT Special case write for O_DIRECT only.
|
||||
* SWRITE_SYNC
|
||||
* SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer.
|
||||
* See SWRITE.
|
||||
* WRITE_BARRIER Like WRITE, but tells the block layer that all
|
||||
* previously submitted writes must be safely on storage
|
||||
* before this one is started. Also guarantees that when
|
||||
* this write is complete, it itself is also safely on
|
||||
* storage. Prevents reordering of writes on both sides
|
||||
* of this IO.
|
||||
*
|
||||
*/
|
||||
#define RW_MASK 1
|
||||
#define RWA_MASK 2
|
||||
#define READ 0
|
||||
|
|
@ -102,6 +156,11 @@ struct inodes_stat_t {
|
|||
(SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
|
||||
#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
|
||||
#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER))
|
||||
|
||||
/*
|
||||
* These aren't really reads or writes, they pass down information about
|
||||
* parts of device that are now unused by the file system.
|
||||
*/
|
||||
#define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD)
|
||||
#define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER))
|
||||
|
||||
|
|
@ -738,9 +797,6 @@ enum inode_i_mutex_lock_class
|
|||
I_MUTEX_QUOTA
|
||||
};
|
||||
|
||||
extern void inode_double_lock(struct inode *inode1, struct inode *inode2);
|
||||
extern void inode_double_unlock(struct inode *inode1, struct inode *inode2);
|
||||
|
||||
/*
|
||||
* NOTE: in a 32bit arch with a preemptable kernel and
|
||||
* an UP compile the i_size_read/write must be atomic
|
||||
|
|
@ -1699,6 +1755,9 @@ struct file_system_type {
|
|||
struct lock_class_key i_alloc_sem_key;
|
||||
};
|
||||
|
||||
extern int get_sb_ns(struct file_system_type *fs_type, int flags, void *data,
|
||||
int (*fill_super)(struct super_block *, void *, int),
|
||||
struct vfsmount *mnt);
|
||||
extern int get_sb_bdev(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data,
|
||||
int (*fill_super)(struct super_block *, void *, int),
|
||||
|
|
@ -2147,8 +2206,6 @@ extern ssize_t generic_file_splice_read(struct file *, loff_t *,
|
|||
struct pipe_inode_info *, size_t, unsigned int);
|
||||
extern ssize_t generic_file_splice_write(struct pipe_inode_info *,
|
||||
struct file *, loff_t *, size_t, unsigned int);
|
||||
extern ssize_t generic_file_splice_write_nolock(struct pipe_inode_info *,
|
||||
struct file *, loff_t *, size_t, unsigned int);
|
||||
extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
|
||||
struct file *out, loff_t *, size_t len, unsigned int flags);
|
||||
extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
|
||||
|
|
@ -2242,9 +2299,8 @@ extern int vfs_readdir(struct file *, filldir_t, void *);
|
|||
|
||||
extern int vfs_stat(char __user *, struct kstat *);
|
||||
extern int vfs_lstat(char __user *, struct kstat *);
|
||||
extern int vfs_stat_fd(int dfd, char __user *, struct kstat *);
|
||||
extern int vfs_lstat_fd(int dfd, char __user *, struct kstat *);
|
||||
extern int vfs_fstat(unsigned int, struct kstat *);
|
||||
extern int vfs_fstatat(int , char __user *, struct kstat *, int);
|
||||
|
||||
extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
|
@ -2392,7 +2448,7 @@ struct ctl_table;
|
|||
int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
|
||||
int get_filesystem_list(char * buf);
|
||||
int __init get_filesystem_list(char *buf);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_FS_H */
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
#define _FSL_DEVICE_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/phy.h>
|
||||
|
||||
/*
|
||||
* Some conventions on how we handle peripherals on Freescale chips
|
||||
|
|
@ -44,31 +43,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
struct gianfar_platform_data {
|
||||
/* device specific information */
|
||||
u32 device_flags;
|
||||
char bus_id[BUS_ID_SIZE];
|
||||
phy_interface_t interface;
|
||||
};
|
||||
|
||||
struct gianfar_mdio_data {
|
||||
/* board specific information */
|
||||
int irq[32];
|
||||
};
|
||||
|
||||
/* Flags in gianfar_platform_data */
|
||||
#define FSL_GIANFAR_BRD_HAS_PHY_INTR 0x00000001 /* set or use a timer */
|
||||
#define FSL_GIANFAR_BRD_IS_REDUCED 0x00000002 /* Set if RGMII, RMII */
|
||||
|
||||
struct fsl_i2c_platform_data {
|
||||
/* device specific information */
|
||||
u32 device_flags;
|
||||
};
|
||||
|
||||
/* Flags related to I2C device features */
|
||||
#define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001
|
||||
#define FSL_I2C_DEV_CLOCK_5200 0x00000002
|
||||
|
||||
enum fsl_usb2_operating_modes {
|
||||
FSL_USB2_MPH_HOST,
|
||||
FSL_USB2_DR_HOST,
|
||||
|
|
|
|||
|
|
@ -356,6 +356,9 @@ struct ftrace_graph_ret {
|
|||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
|
||||
/* for init task */
|
||||
#define INIT_FTRACE_GRAPH .ret_stack = NULL,
|
||||
|
||||
/*
|
||||
* Stack of return addresses for functions
|
||||
* of a thread.
|
||||
|
|
@ -430,10 +433,11 @@ static inline void unpause_graph_tracing(void)
|
|||
{
|
||||
atomic_dec(¤t->tracing_graph_pause);
|
||||
}
|
||||
#else
|
||||
#else /* !CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
||||
#define __notrace_funcgraph
|
||||
#define __irq_entry
|
||||
#define INIT_FTRACE_GRAPH
|
||||
|
||||
static inline void ftrace_graph_init_task(struct task_struct *t) { }
|
||||
static inline void ftrace_graph_exit_task(struct task_struct *t) { }
|
||||
|
|
@ -445,7 +449,7 @@ static inline int task_curr_ret_stack(struct task_struct *tsk)
|
|||
|
||||
static inline void pause_graph_tracing(void) { }
|
||||
static inline void unpause_graph_tracing(void) { }
|
||||
#endif
|
||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
||||
#ifdef CONFIG_TRACING
|
||||
#include <linux/sched.h>
|
||||
|
|
@ -507,33 +511,4 @@ static inline void trace_hw_branch_oops(void) {}
|
|||
|
||||
#endif /* CONFIG_HW_BRANCH_TRACER */
|
||||
|
||||
/*
|
||||
* A syscall entry in the ftrace syscalls array.
|
||||
*
|
||||
* @name: name of the syscall
|
||||
* @nb_args: number of parameters it takes
|
||||
* @types: list of types as strings
|
||||
* @args: list of args as strings (args[i] matches types[i])
|
||||
*/
|
||||
struct syscall_metadata {
|
||||
const char *name;
|
||||
int nb_args;
|
||||
const char **types;
|
||||
const char **args;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
extern void arch_init_ftrace_syscalls(void);
|
||||
extern struct syscall_metadata *syscall_nr_to_meta(int nr);
|
||||
extern void start_ftrace_syscalls(void);
|
||||
extern void stop_ftrace_syscalls(void);
|
||||
extern void ftrace_syscall_enter(struct pt_regs *regs);
|
||||
extern void ftrace_syscall_exit(struct pt_regs *regs);
|
||||
#else
|
||||
static inline void start_ftrace_syscalls(void) { }
|
||||
static inline void stop_ftrace_syscalls(void) { }
|
||||
static inline void ftrace_syscall_enter(struct pt_regs *regs) { }
|
||||
static inline void ftrace_syscall_exit(struct pt_regs *regs) { }
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_FTRACE_H */
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@
|
|||
# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_GENERIC_HARDIRQS)
|
||||
extern void synchronize_irq(unsigned int irq);
|
||||
#else
|
||||
# define synchronize_irq(irq) barrier()
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
#define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */
|
||||
#define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */
|
||||
#define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */
|
||||
#define I2C_HW_B_CX231XX 0x010024 /* Conexant CX231XX USB based cards */
|
||||
#define I2C_HW_B_HDPVR 0x010025 /* Hauppauge HD PVR */
|
||||
|
||||
/* --- SGI adapters */
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ struct i2c_board_info {
|
|||
* are provided using conventional syntax.
|
||||
*/
|
||||
#define I2C_BOARD_INFO(dev_type, dev_addr) \
|
||||
.type = (dev_type), .addr = (dev_addr)
|
||||
.type = dev_type, .addr = (dev_addr)
|
||||
|
||||
|
||||
/* Add-on boards should register/unregister their devices; e.g. a board
|
||||
|
|
|
|||
10
include/linux/i2c/s6000.h
Normal file
10
include/linux/i2c/s6000.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef __LINUX_I2C_S6000_H
|
||||
#define __LINUX_I2C_S6000_H
|
||||
|
||||
struct s6_i2c_platform_data {
|
||||
const char *clock; /* the clock to use */
|
||||
int bus_num; /* the bus number to register */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -239,66 +239,39 @@ typedef enum {
|
|||
ide_started, /* a drive operation was started, handler was set */
|
||||
} ide_startstop_t;
|
||||
|
||||
enum {
|
||||
IDE_VALID_ERROR = (1 << 1),
|
||||
IDE_VALID_FEATURE = IDE_VALID_ERROR,
|
||||
IDE_VALID_NSECT = (1 << 2),
|
||||
IDE_VALID_LBAL = (1 << 3),
|
||||
IDE_VALID_LBAM = (1 << 4),
|
||||
IDE_VALID_LBAH = (1 << 5),
|
||||
IDE_VALID_DEVICE = (1 << 6),
|
||||
IDE_VALID_LBA = IDE_VALID_LBAL |
|
||||
IDE_VALID_LBAM |
|
||||
IDE_VALID_LBAH,
|
||||
IDE_VALID_OUT_TF = IDE_VALID_FEATURE |
|
||||
IDE_VALID_NSECT |
|
||||
IDE_VALID_LBA,
|
||||
IDE_VALID_IN_TF = IDE_VALID_NSECT |
|
||||
IDE_VALID_LBA,
|
||||
IDE_VALID_OUT_HOB = IDE_VALID_OUT_TF,
|
||||
IDE_VALID_IN_HOB = IDE_VALID_ERROR |
|
||||
IDE_VALID_NSECT |
|
||||
IDE_VALID_LBA,
|
||||
};
|
||||
|
||||
enum {
|
||||
IDE_TFLAG_LBA48 = (1 << 0),
|
||||
IDE_TFLAG_OUT_HOB_FEATURE = (1 << 1),
|
||||
IDE_TFLAG_OUT_HOB_NSECT = (1 << 2),
|
||||
IDE_TFLAG_OUT_HOB_LBAL = (1 << 3),
|
||||
IDE_TFLAG_OUT_HOB_LBAM = (1 << 4),
|
||||
IDE_TFLAG_OUT_HOB_LBAH = (1 << 5),
|
||||
IDE_TFLAG_OUT_HOB = IDE_TFLAG_OUT_HOB_FEATURE |
|
||||
IDE_TFLAG_OUT_HOB_NSECT |
|
||||
IDE_TFLAG_OUT_HOB_LBAL |
|
||||
IDE_TFLAG_OUT_HOB_LBAM |
|
||||
IDE_TFLAG_OUT_HOB_LBAH,
|
||||
IDE_TFLAG_OUT_FEATURE = (1 << 6),
|
||||
IDE_TFLAG_OUT_NSECT = (1 << 7),
|
||||
IDE_TFLAG_OUT_LBAL = (1 << 8),
|
||||
IDE_TFLAG_OUT_LBAM = (1 << 9),
|
||||
IDE_TFLAG_OUT_LBAH = (1 << 10),
|
||||
IDE_TFLAG_OUT_TF = IDE_TFLAG_OUT_FEATURE |
|
||||
IDE_TFLAG_OUT_NSECT |
|
||||
IDE_TFLAG_OUT_LBAL |
|
||||
IDE_TFLAG_OUT_LBAM |
|
||||
IDE_TFLAG_OUT_LBAH,
|
||||
IDE_TFLAG_OUT_DEVICE = (1 << 11),
|
||||
IDE_TFLAG_WRITE = (1 << 12),
|
||||
IDE_TFLAG_CUSTOM_HANDLER = (1 << 13),
|
||||
IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 14),
|
||||
IDE_TFLAG_IN_HOB_ERROR = (1 << 15),
|
||||
IDE_TFLAG_IN_HOB_NSECT = (1 << 16),
|
||||
IDE_TFLAG_IN_HOB_LBAL = (1 << 17),
|
||||
IDE_TFLAG_IN_HOB_LBAM = (1 << 18),
|
||||
IDE_TFLAG_IN_HOB_LBAH = (1 << 19),
|
||||
IDE_TFLAG_IN_HOB_LBA = IDE_TFLAG_IN_HOB_LBAL |
|
||||
IDE_TFLAG_IN_HOB_LBAM |
|
||||
IDE_TFLAG_IN_HOB_LBAH,
|
||||
IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_ERROR |
|
||||
IDE_TFLAG_IN_HOB_NSECT |
|
||||
IDE_TFLAG_IN_HOB_LBA,
|
||||
IDE_TFLAG_IN_ERROR = (1 << 20),
|
||||
IDE_TFLAG_IN_NSECT = (1 << 21),
|
||||
IDE_TFLAG_IN_LBAL = (1 << 22),
|
||||
IDE_TFLAG_IN_LBAM = (1 << 23),
|
||||
IDE_TFLAG_IN_LBAH = (1 << 24),
|
||||
IDE_TFLAG_IN_LBA = IDE_TFLAG_IN_LBAL |
|
||||
IDE_TFLAG_IN_LBAM |
|
||||
IDE_TFLAG_IN_LBAH,
|
||||
IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT |
|
||||
IDE_TFLAG_IN_LBA,
|
||||
IDE_TFLAG_IN_DEVICE = (1 << 25),
|
||||
IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB |
|
||||
IDE_TFLAG_IN_HOB,
|
||||
IDE_TFLAG_TF = IDE_TFLAG_OUT_TF |
|
||||
IDE_TFLAG_IN_TF,
|
||||
IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE |
|
||||
IDE_TFLAG_IN_DEVICE,
|
||||
IDE_TFLAG_WRITE = (1 << 1),
|
||||
IDE_TFLAG_CUSTOM_HANDLER = (1 << 2),
|
||||
IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 3),
|
||||
/* force 16-bit I/O operations */
|
||||
IDE_TFLAG_IO_16BIT = (1 << 26),
|
||||
IDE_TFLAG_IO_16BIT = (1 << 4),
|
||||
/* struct ide_cmd was allocated using kmalloc() */
|
||||
IDE_TFLAG_DYN = (1 << 27),
|
||||
IDE_TFLAG_FS = (1 << 28),
|
||||
IDE_TFLAG_MULTI_PIO = (1 << 29),
|
||||
IDE_TFLAG_DYN = (1 << 5),
|
||||
IDE_TFLAG_FS = (1 << 6),
|
||||
IDE_TFLAG_MULTI_PIO = (1 << 7),
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -309,45 +282,34 @@ enum {
|
|||
};
|
||||
|
||||
struct ide_taskfile {
|
||||
u8 hob_data; /* 0: high data byte (for TASKFILE IOCTL) */
|
||||
/* 1-5: additional data to support LBA48 */
|
||||
union {
|
||||
u8 hob_error; /* read: error */
|
||||
u8 hob_feature; /* write: feature */
|
||||
u8 data; /* 0: data byte (for TASKFILE ioctl) */
|
||||
union { /* 1: */
|
||||
u8 error; /* read: error */
|
||||
u8 feature; /* write: feature */
|
||||
};
|
||||
|
||||
u8 hob_nsect;
|
||||
u8 hob_lbal;
|
||||
u8 hob_lbam;
|
||||
u8 hob_lbah;
|
||||
|
||||
u8 data; /* 6: low data byte (for TASKFILE IOCTL) */
|
||||
|
||||
union { /* 7: */
|
||||
u8 error; /* read: error */
|
||||
u8 feature; /* write: feature */
|
||||
};
|
||||
|
||||
u8 nsect; /* 8: number of sectors */
|
||||
u8 lbal; /* 9: LBA low */
|
||||
u8 lbam; /* 10: LBA mid */
|
||||
u8 lbah; /* 11: LBA high */
|
||||
|
||||
u8 device; /* 12: device select */
|
||||
|
||||
union { /* 13: */
|
||||
u8 status; /* read: status */
|
||||
u8 nsect; /* 2: number of sectors */
|
||||
u8 lbal; /* 3: LBA low */
|
||||
u8 lbam; /* 4: LBA mid */
|
||||
u8 lbah; /* 5: LBA high */
|
||||
u8 device; /* 6: device select */
|
||||
union { /* 7: */
|
||||
u8 status; /* read: status */
|
||||
u8 command; /* write: command */
|
||||
};
|
||||
};
|
||||
|
||||
struct ide_cmd {
|
||||
union {
|
||||
struct ide_taskfile tf;
|
||||
u8 tf_array[14];
|
||||
};
|
||||
struct ide_taskfile tf;
|
||||
struct ide_taskfile hob;
|
||||
struct {
|
||||
struct {
|
||||
u8 tf;
|
||||
u8 hob;
|
||||
} out, in;
|
||||
} valid;
|
||||
|
||||
u8 tf_flags;
|
||||
u8 ftf_flags; /* for TASKFILE ioctl */
|
||||
u32 tf_flags;
|
||||
int protocol;
|
||||
|
||||
int sg_nents; /* number of sg entries */
|
||||
|
|
@ -662,8 +624,8 @@ struct ide_tp_ops {
|
|||
void (*write_devctl)(struct hwif_s *, u8);
|
||||
|
||||
void (*dev_select)(ide_drive_t *);
|
||||
void (*tf_load)(ide_drive_t *, struct ide_cmd *);
|
||||
void (*tf_read)(ide_drive_t *, struct ide_cmd *);
|
||||
void (*tf_load)(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
void (*tf_read)(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
|
||||
void (*input_data)(ide_drive_t *, struct ide_cmd *,
|
||||
void *, unsigned int);
|
||||
|
|
@ -1162,7 +1124,8 @@ extern int ide_devset_execute(ide_drive_t *drive,
|
|||
void ide_complete_cmd(ide_drive_t *, struct ide_cmd *, u8, u8);
|
||||
int ide_complete_rq(ide_drive_t *, int, unsigned int);
|
||||
|
||||
void ide_tf_dump(const char *, struct ide_taskfile *);
|
||||
void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd);
|
||||
void ide_tf_dump(const char *, struct ide_cmd *);
|
||||
|
||||
void ide_exec_command(ide_hwif_t *, u8);
|
||||
u8 ide_read_status(ide_hwif_t *);
|
||||
|
|
@ -1170,8 +1133,8 @@ u8 ide_read_altstatus(ide_hwif_t *);
|
|||
void ide_write_devctl(ide_hwif_t *, u8);
|
||||
|
||||
void ide_dev_select(ide_drive_t *);
|
||||
void ide_tf_load(ide_drive_t *, struct ide_cmd *);
|
||||
void ide_tf_read(ide_drive_t *, struct ide_cmd *);
|
||||
void ide_tf_load(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
void ide_tf_read(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
|
||||
void ide_input_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int);
|
||||
void ide_output_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int);
|
||||
|
|
@ -1529,7 +1492,7 @@ static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data)
|
|||
|
||||
extern void ide_toggle_bounce(ide_drive_t *drive, int on);
|
||||
|
||||
u64 ide_get_lba_addr(struct ide_taskfile *, int);
|
||||
u64 ide_get_lba_addr(struct ide_cmd *, int);
|
||||
u8 ide_dump_status(ide_drive_t *, const char *, u8);
|
||||
|
||||
struct ide_timing {
|
||||
|
|
|
|||
|
|
@ -247,6 +247,7 @@ struct obs_kernel_param {
|
|||
|
||||
/* Relies on boot_command_line being set */
|
||||
void __init parse_early_param(void);
|
||||
void __init parse_early_options(char *cmdline);
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <linux/irqflags.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/ipc.h>
|
||||
#include <linux/pid_namespace.h>
|
||||
#include <linux/user_namespace.h>
|
||||
|
|
@ -14,19 +15,6 @@
|
|||
extern struct files_struct init_files;
|
||||
extern struct fs_struct init_fs;
|
||||
|
||||
#define INIT_KIOCTX(name, which_mm) \
|
||||
{ \
|
||||
.users = ATOMIC_INIT(1), \
|
||||
.dead = 0, \
|
||||
.mm = &which_mm, \
|
||||
.user_id = 0, \
|
||||
.next = NULL, \
|
||||
.wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait), \
|
||||
.ctx_lock = __SPIN_LOCK_UNLOCKED(name.ctx_lock), \
|
||||
.reqs_active = 0U, \
|
||||
.max_reqs = ~0U, \
|
||||
}
|
||||
|
||||
#define INIT_MM(name) \
|
||||
{ \
|
||||
.mm_rb = RB_ROOT, \
|
||||
|
|
@ -185,6 +173,7 @@ extern struct cred init_cred;
|
|||
INIT_IDS \
|
||||
INIT_TRACE_IRQFLAGS \
|
||||
INIT_LOCKDEP \
|
||||
INIT_FTRACE_GRAPH \
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,18 @@
|
|||
#define IRQF_NOBALANCING 0x00000800
|
||||
#define IRQF_IRQPOLL 0x00001000
|
||||
|
||||
/*
|
||||
* Bits used by threaded handlers:
|
||||
* IRQTF_RUNTHREAD - signals that the interrupt handler thread should run
|
||||
* IRQTF_DIED - handler thread died
|
||||
* IRQTF_WARNED - warning "IRQ_WAKE_THREAD w/o thread_fn" has been printed
|
||||
*/
|
||||
enum {
|
||||
IRQTF_RUNTHREAD,
|
||||
IRQTF_DIED,
|
||||
IRQTF_WARNED,
|
||||
};
|
||||
|
||||
typedef irqreturn_t (*irq_handler_t)(int, void *);
|
||||
|
||||
/**
|
||||
|
|
@ -71,6 +83,9 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
|
|||
* @next: pointer to the next irqaction for shared interrupts
|
||||
* @irq: interrupt number
|
||||
* @dir: pointer to the proc/irq/NN/name entry
|
||||
* @thread_fn: interupt handler function for threaded interrupts
|
||||
* @thread: thread pointer for threaded interrupts
|
||||
* @thread_flags: flags related to @thread
|
||||
*/
|
||||
struct irqaction {
|
||||
irq_handler_t handler;
|
||||
|
|
@ -81,18 +96,68 @@ struct irqaction {
|
|||
struct irqaction *next;
|
||||
int irq;
|
||||
struct proc_dir_entry *dir;
|
||||
irq_handler_t thread_fn;
|
||||
struct task_struct *thread;
|
||||
unsigned long thread_flags;
|
||||
};
|
||||
|
||||
extern irqreturn_t no_action(int cpl, void *dev_id);
|
||||
extern int __must_check request_irq(unsigned int, irq_handler_t handler,
|
||||
unsigned long, const char *, void *);
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
extern int __must_check
|
||||
request_threaded_irq(unsigned int irq, irq_handler_t handler,
|
||||
irq_handler_t thread_fn,
|
||||
unsigned long flags, const char *name, void *dev);
|
||||
|
||||
static inline int __must_check
|
||||
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
|
||||
const char *name, void *dev)
|
||||
{
|
||||
return request_threaded_irq(irq, handler, NULL, flags, name, dev);
|
||||
}
|
||||
|
||||
extern void exit_irq_thread(void);
|
||||
#else
|
||||
|
||||
extern int __must_check
|
||||
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
|
||||
const char *name, void *dev);
|
||||
|
||||
/*
|
||||
* Special function to avoid ifdeffery in kernel/irq/devres.c which
|
||||
* gets magically built by GENERIC_HARDIRQS=n architectures (sparc,
|
||||
* m68k). I really love these $@%#!* obvious Makefile references:
|
||||
* ../../../kernel/irq/devres.o
|
||||
*/
|
||||
static inline int __must_check
|
||||
request_threaded_irq(unsigned int irq, irq_handler_t handler,
|
||||
irq_handler_t thread_fn,
|
||||
unsigned long flags, const char *name, void *dev)
|
||||
{
|
||||
return request_irq(irq, handler, flags, name, dev);
|
||||
}
|
||||
|
||||
static inline void exit_irq_thread(void) { }
|
||||
#endif
|
||||
|
||||
extern void free_irq(unsigned int, void *);
|
||||
|
||||
struct device;
|
||||
|
||||
extern int __must_check devm_request_irq(struct device *dev, unsigned int irq,
|
||||
irq_handler_t handler, unsigned long irqflags,
|
||||
const char *devname, void *dev_id);
|
||||
extern int __must_check
|
||||
devm_request_threaded_irq(struct device *dev, unsigned int irq,
|
||||
irq_handler_t handler, irq_handler_t thread_fn,
|
||||
unsigned long irqflags, const char *devname,
|
||||
void *dev_id);
|
||||
|
||||
static inline int __must_check
|
||||
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
|
||||
unsigned long irqflags, const char *devname, void *dev_id)
|
||||
{
|
||||
return devm_request_threaded_irq(dev, irq, handler, NULL, irqflags,
|
||||
devname, dev_id);
|
||||
}
|
||||
|
||||
extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ struct ipc_ids {
|
|||
};
|
||||
|
||||
struct ipc_namespace {
|
||||
struct kref kref;
|
||||
atomic_t count;
|
||||
struct ipc_ids ids[3];
|
||||
|
||||
int sem_ctls[4];
|
||||
|
|
@ -44,25 +44,57 @@ struct ipc_namespace {
|
|||
int shm_tot;
|
||||
|
||||
struct notifier_block ipcns_nb;
|
||||
|
||||
/* The kern_mount of the mqueuefs sb. We take a ref on it */
|
||||
struct vfsmount *mq_mnt;
|
||||
|
||||
/* # queues in this ns, protected by mq_lock */
|
||||
unsigned int mq_queues_count;
|
||||
|
||||
/* next fields are set through sysctl */
|
||||
unsigned int mq_queues_max; /* initialized to DFLT_QUEUESMAX */
|
||||
unsigned int mq_msg_max; /* initialized to DFLT_MSGMAX */
|
||||
unsigned int mq_msgsize_max; /* initialized to DFLT_MSGSIZEMAX */
|
||||
|
||||
};
|
||||
|
||||
extern struct ipc_namespace init_ipc_ns;
|
||||
extern atomic_t nr_ipc_ns;
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
extern spinlock_t mq_lock;
|
||||
#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC)
|
||||
#define INIT_IPC_NS(ns) .ns = &init_ipc_ns,
|
||||
#else
|
||||
#define INIT_IPC_NS(ns)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
extern int register_ipcns_notifier(struct ipc_namespace *);
|
||||
extern int cond_register_ipcns_notifier(struct ipc_namespace *);
|
||||
extern void unregister_ipcns_notifier(struct ipc_namespace *);
|
||||
extern int ipcns_notify(unsigned long);
|
||||
|
||||
#else /* CONFIG_SYSVIPC */
|
||||
#define INIT_IPC_NS(ns)
|
||||
static inline int register_ipcns_notifier(struct ipc_namespace *ns)
|
||||
{ return 0; }
|
||||
static inline int cond_register_ipcns_notifier(struct ipc_namespace *ns)
|
||||
{ return 0; }
|
||||
static inline void unregister_ipcns_notifier(struct ipc_namespace *ns) { }
|
||||
static inline int ipcns_notify(unsigned long l) { return 0; }
|
||||
#endif /* CONFIG_SYSVIPC */
|
||||
|
||||
#if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS)
|
||||
extern void free_ipc_ns(struct kref *kref);
|
||||
#ifdef CONFIG_POSIX_MQUEUE
|
||||
extern int mq_init_ns(struct ipc_namespace *ns);
|
||||
/* default values */
|
||||
#define DFLT_QUEUESMAX 256 /* max number of message queues */
|
||||
#define DFLT_MSGMAX 10 /* max number of messages in each queue */
|
||||
#define HARD_MSGMAX (131072/sizeof(void *))
|
||||
#define DFLT_MSGSIZEMAX 8192 /* max message size */
|
||||
#else
|
||||
static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; }
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_IPC_NS)
|
||||
extern void free_ipc_ns(struct ipc_namespace *ns);
|
||||
extern struct ipc_namespace *copy_ipcs(unsigned long flags,
|
||||
struct ipc_namespace *ns);
|
||||
extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
|
||||
|
|
@ -72,14 +104,11 @@ extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
|
|||
static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
|
||||
{
|
||||
if (ns)
|
||||
kref_get(&ns->kref);
|
||||
atomic_inc(&ns->count);
|
||||
return ns;
|
||||
}
|
||||
|
||||
static inline void put_ipc_ns(struct ipc_namespace *ns)
|
||||
{
|
||||
kref_put(&ns->kref, free_ipc_ns);
|
||||
}
|
||||
extern void put_ipc_ns(struct ipc_namespace *ns);
|
||||
#else
|
||||
static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
|
||||
struct ipc_namespace *ns)
|
||||
|
|
@ -99,4 +128,18 @@ static inline void put_ipc_ns(struct ipc_namespace *ns)
|
|||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_POSIX_MQUEUE_SYSCTL
|
||||
|
||||
struct ctl_table_header;
|
||||
extern struct ctl_table_header *mq_register_sysctl_table(void);
|
||||
|
||||
#else /* CONFIG_POSIX_MQUEUE_SYSCTL */
|
||||
|
||||
static inline struct ctl_table_header *mq_register_sysctl_table(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_POSIX_MQUEUE_SYSCTL */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -198,6 +198,8 @@ struct kernel_ipmi_msg {
|
|||
response. When you send a
|
||||
response message, this will
|
||||
be returned. */
|
||||
#define IPMI_OEM_RECV_TYPE 5 /* The response for OEM Channels */
|
||||
|
||||
/* Note that async events and received commands do not have a completion
|
||||
code as the first byte of the incoming data, unlike a response. */
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,12 @@
|
|||
#define IPMI_READ_EVENT_MSG_BUFFER_CMD 0x35
|
||||
#define IPMI_GET_CHANNEL_INFO_CMD 0x42
|
||||
|
||||
/* Bit for BMC global enables. */
|
||||
#define IPMI_BMC_RCV_MSG_INTR 0x01
|
||||
#define IPMI_BMC_EVT_MSG_INTR 0x02
|
||||
#define IPMI_BMC_EVT_MSG_BUFF 0x04
|
||||
#define IPMI_BMC_SYS_LOG 0x08
|
||||
|
||||
#define IPMI_NETFN_STORAGE_REQUEST 0x0a
|
||||
#define IPMI_NETFN_STORAGE_RESPONSE 0x0b
|
||||
#define IPMI_ADD_SEL_ENTRY_CMD 0x44
|
||||
|
|
@ -109,5 +115,7 @@
|
|||
#define IPMI_CHANNEL_MEDIUM_USB1 10
|
||||
#define IPMI_CHANNEL_MEDIUM_USB2 11
|
||||
#define IPMI_CHANNEL_MEDIUM_SYSINTF 12
|
||||
#define IPMI_CHANNEL_MEDIUM_OEM_MIN 0x60
|
||||
#define IPMI_CHANNEL_MEDIUM_OEM_MAX 0x7f
|
||||
|
||||
#endif /* __LINUX_IPMI_MSGDEFS_H */
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/irqnr.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/topology.h>
|
||||
#include <linux/wait.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
|
@ -158,6 +159,8 @@ struct irq_2_iommu;
|
|||
* @affinity: IRQ affinity on SMP
|
||||
* @cpu: cpu index useful for balancing
|
||||
* @pending_mask: pending rebalanced interrupts
|
||||
* @threads_active: number of irqaction threads currently running
|
||||
* @wait_for_threads: wait queue for sync_irq to wait for threaded handlers
|
||||
* @dir: /proc/irq/ procfs entry
|
||||
* @name: flow handler name for /proc/interrupts output
|
||||
*/
|
||||
|
|
@ -189,6 +192,8 @@ struct irq_desc {
|
|||
cpumask_var_t pending_mask;
|
||||
#endif
|
||||
#endif
|
||||
atomic_t threads_active;
|
||||
wait_queue_head_t wait_for_threads;
|
||||
#ifdef CONFIG_PROC_FS
|
||||
struct proc_dir_entry *dir;
|
||||
#endif
|
||||
|
|
@ -482,6 +487,16 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc,
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline void free_desc_masks(struct irq_desc *old_desc,
|
||||
struct irq_desc *new_desc)
|
||||
{
|
||||
free_cpumask_var(old_desc->affinity);
|
||||
|
||||
#ifdef CONFIG_GENERIC_PENDING_IRQ
|
||||
free_cpumask_var(old_desc->pending_mask);
|
||||
#endif
|
||||
}
|
||||
|
||||
#else /* !CONFIG_SMP */
|
||||
|
||||
static inline bool init_alloc_desc_masks(struct irq_desc *desc, int cpu,
|
||||
|
|
@ -495,6 +510,10 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc,
|
|||
{
|
||||
}
|
||||
|
||||
static inline void free_desc_masks(struct irq_desc *old_desc,
|
||||
struct irq_desc *new_desc)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#endif /* _LINUX_IRQ_H */
|
||||
|
|
|
|||
|
|
@ -5,10 +5,12 @@
|
|||
* enum irqreturn
|
||||
* @IRQ_NONE interrupt was not from this device
|
||||
* @IRQ_HANDLED interrupt was handled by this device
|
||||
* @IRQ_WAKE_THREAD handler requests to wake the handler thread
|
||||
*/
|
||||
enum irqreturn {
|
||||
IRQ_NONE,
|
||||
IRQ_HANDLED,
|
||||
IRQ_WAKE_THREAD,
|
||||
};
|
||||
|
||||
typedef enum irqreturn irqreturn_t;
|
||||
|
|
|
|||
|
|
@ -377,6 +377,15 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
|
|||
#define pr_cont(fmt, ...) \
|
||||
printk(KERN_CONT fmt, ##__VA_ARGS__)
|
||||
|
||||
/* pr_devel() should produce zero code unless DEBUG is defined */
|
||||
#ifdef DEBUG
|
||||
#define pr_devel(fmt, ...) \
|
||||
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
||||
#else
|
||||
#define pr_devel(fmt, ...) \
|
||||
({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
|
||||
#endif
|
||||
|
||||
/* If you are writing a driver, please use dev_dbg instead */
|
||||
#if defined(DEBUG)
|
||||
#define pr_debug(fmt, ...) \
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ extern int __request_module(bool wait, const char *name, ...) \
|
|||
#define request_module(mod...) __request_module(true, mod)
|
||||
#define request_module_nowait(mod...) __request_module(false, mod)
|
||||
#define try_then_request_module(x, mod...) \
|
||||
((x) ?: (__request_module(false, mod), (x)))
|
||||
((x) ?: (__request_module(true, mod), (x)))
|
||||
#else
|
||||
static inline int request_module(const char *name, ...) { return -ENOSYS; }
|
||||
static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; }
|
||||
|
|
|
|||
|
|
@ -94,12 +94,16 @@ struct kprobe {
|
|||
/* Called after addr is executed, unless... */
|
||||
kprobe_post_handler_t post_handler;
|
||||
|
||||
/* ... called if executing addr causes a fault (eg. page fault).
|
||||
* Return 1 if it handled fault, otherwise kernel will see it. */
|
||||
/*
|
||||
* ... called if executing addr causes a fault (eg. page fault).
|
||||
* Return 1 if it handled fault, otherwise kernel will see it.
|
||||
*/
|
||||
kprobe_fault_handler_t fault_handler;
|
||||
|
||||
/* ... called if breakpoint trap occurs in probe handler.
|
||||
* Return 1 if it handled break, otherwise kernel will see it. */
|
||||
/*
|
||||
* ... called if breakpoint trap occurs in probe handler.
|
||||
* Return 1 if it handled break, otherwise kernel will see it.
|
||||
*/
|
||||
kprobe_break_handler_t break_handler;
|
||||
|
||||
/* Saved opcode (which has been replaced with breakpoint) */
|
||||
|
|
@ -108,18 +112,28 @@ struct kprobe {
|
|||
/* copy of the original instruction */
|
||||
struct arch_specific_insn ainsn;
|
||||
|
||||
/* Indicates various status flags. Protected by kprobe_mutex. */
|
||||
/*
|
||||
* Indicates various status flags.
|
||||
* Protected by kprobe_mutex after this kprobe is registered.
|
||||
*/
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
/* Kprobe status flags */
|
||||
#define KPROBE_FLAG_GONE 1 /* breakpoint has already gone */
|
||||
#define KPROBE_FLAG_DISABLED 2 /* probe is temporarily disabled */
|
||||
|
||||
/* Has this kprobe gone ? */
|
||||
static inline int kprobe_gone(struct kprobe *p)
|
||||
{
|
||||
return p->flags & KPROBE_FLAG_GONE;
|
||||
}
|
||||
|
||||
/* Is this kprobe disabled ? */
|
||||
static inline int kprobe_disabled(struct kprobe *p)
|
||||
{
|
||||
return p->flags & (KPROBE_FLAG_DISABLED | KPROBE_FLAG_GONE);
|
||||
}
|
||||
/*
|
||||
* Special probe type that uses setjmp-longjmp type tricks to resume
|
||||
* execution at a specified entry with a matching prototype corresponding
|
||||
|
|
@ -279,6 +293,9 @@ void unregister_kretprobes(struct kretprobe **rps, int num);
|
|||
void kprobe_flush_task(struct task_struct *tk);
|
||||
void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head);
|
||||
|
||||
int disable_kprobe(struct kprobe *kp);
|
||||
int enable_kprobe(struct kprobe *kp);
|
||||
|
||||
#else /* !CONFIG_KPROBES: */
|
||||
|
||||
static inline int kprobes_built_in(void)
|
||||
|
|
@ -345,5 +362,30 @@ static inline void unregister_kretprobes(struct kretprobe **rps, int num)
|
|||
static inline void kprobe_flush_task(struct task_struct *tk)
|
||||
{
|
||||
}
|
||||
static inline int disable_kprobe(struct kprobe *kp)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
static inline int enable_kprobe(struct kprobe *kp)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif /* CONFIG_KPROBES */
|
||||
static inline int disable_kretprobe(struct kretprobe *rp)
|
||||
{
|
||||
return disable_kprobe(&rp->kp);
|
||||
}
|
||||
static inline int enable_kretprobe(struct kretprobe *rp)
|
||||
{
|
||||
return enable_kprobe(&rp->kp);
|
||||
}
|
||||
static inline int disable_jprobe(struct jprobe *jp)
|
||||
{
|
||||
return disable_kprobe(&jp->kp);
|
||||
}
|
||||
static inline int enable_jprobe(struct jprobe *jp)
|
||||
{
|
||||
return enable_kprobe(&jp->kp);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_KPROBES_H */
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ enum {
|
|||
|
||||
/* bits 24:31 of ap->flags are reserved for LLD specific flags */
|
||||
|
||||
|
||||
/* struct ata_port pflags */
|
||||
ATA_PFLAG_EH_PENDING = (1 << 0), /* EH pending */
|
||||
ATA_PFLAG_EH_IN_PROGRESS = (1 << 1), /* EH in progress */
|
||||
|
|
@ -225,6 +226,9 @@ enum {
|
|||
ATA_PFLAG_PM_PENDING = (1 << 18), /* PM operation pending */
|
||||
ATA_PFLAG_INIT_GTM_VALID = (1 << 19), /* initial gtm data valid */
|
||||
|
||||
ATA_PFLAG_PIO32 = (1 << 20), /* 32bit PIO */
|
||||
ATA_PFLAG_PIO32CHANGE = (1 << 21), /* 32bit PIO can be turned on/off */
|
||||
|
||||
/* struct ata_queued_cmd flags */
|
||||
ATA_QCFLAG_ACTIVE = (1 << 0), /* cmd not yet ack'd to scsi lyer */
|
||||
ATA_QCFLAG_DMAMAP = (1 << 1), /* SG table is DMA mapped */
|
||||
|
|
@ -689,7 +693,10 @@ struct ata_port {
|
|||
struct Scsi_Host *scsi_host; /* our co-allocated scsi host */
|
||||
struct ata_port_operations *ops;
|
||||
spinlock_t *lock;
|
||||
/* Flags owned by the EH context. Only EH should touch these once the
|
||||
port is active */
|
||||
unsigned long flags; /* ATA_FLAG_xxx */
|
||||
/* Flags that change dynamically, protected by ap->lock */
|
||||
unsigned int pflags; /* ATA_PFLAG_xxx */
|
||||
unsigned int print_id; /* user visible unique port ID */
|
||||
unsigned int port_no; /* 0 based port no. inside the host */
|
||||
|
|
@ -1595,6 +1602,7 @@ extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc);
|
|||
extern void ata_sff_error_handler(struct ata_port *ap);
|
||||
extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc);
|
||||
extern int ata_sff_port_start(struct ata_port *ap);
|
||||
extern int ata_sff_port_start32(struct ata_port *ap);
|
||||
extern void ata_sff_std_ports(struct ata_ioports *ioaddr);
|
||||
extern unsigned long ata_bmdma_mode_filter(struct ata_device *dev,
|
||||
unsigned long xfer_mask);
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
|
|||
{
|
||||
struct mem_cgroup *mem;
|
||||
rcu_read_lock();
|
||||
mem = mem_cgroup_from_task((mm)->owner);
|
||||
mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
|
||||
rcu_read_unlock();
|
||||
return cgroup == mem;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ struct pcf50633_platform_data {
|
|||
char **batteries;
|
||||
int num_batteries;
|
||||
|
||||
int charging_restart_interval;
|
||||
|
||||
/* Callbacks */
|
||||
void (*probe_done)(struct pcf50633 *);
|
||||
void (*mbc_event_callback)(struct pcf50633 *, int);
|
||||
|
|
|
|||
|
|
@ -128,7 +128,6 @@ enum pcf50633_reg_mbcs3 {
|
|||
int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);
|
||||
|
||||
int pcf50633_mbc_get_status(struct pcf50633 *);
|
||||
void pcf50633_mbc_set_status(struct pcf50633 *, int what, int status);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
206
include/linux/mg_disk.h
Normal file
206
include/linux/mg_disk.h
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* include/linux/mg_disk.c
|
||||
*
|
||||
* Support for the mGine m[g]flash IO mode.
|
||||
* Based on legacy hd.c
|
||||
*
|
||||
* (c) 2008 mGine Co.,LTD
|
||||
* (c) 2008 unsik Kim <donari75@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __MG_DISK_H__
|
||||
#define __MG_DISK_H__
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/ata.h>
|
||||
|
||||
/* name for block device */
|
||||
#define MG_DISK_NAME "mgd"
|
||||
/* name for platform device */
|
||||
#define MG_DEV_NAME "mg_disk"
|
||||
|
||||
#define MG_DISK_MAJ 0
|
||||
#define MG_DISK_MAX_PART 16
|
||||
#define MG_SECTOR_SIZE 512
|
||||
#define MG_MAX_SECTS 256
|
||||
|
||||
/* Register offsets */
|
||||
#define MG_BUFF_OFFSET 0x8000
|
||||
#define MG_STORAGE_BUFFER_SIZE 0x200
|
||||
#define MG_REG_OFFSET 0xC000
|
||||
#define MG_REG_FEATURE (MG_REG_OFFSET + 2) /* write case */
|
||||
#define MG_REG_ERROR (MG_REG_OFFSET + 2) /* read case */
|
||||
#define MG_REG_SECT_CNT (MG_REG_OFFSET + 4)
|
||||
#define MG_REG_SECT_NUM (MG_REG_OFFSET + 6)
|
||||
#define MG_REG_CYL_LOW (MG_REG_OFFSET + 8)
|
||||
#define MG_REG_CYL_HIGH (MG_REG_OFFSET + 0xA)
|
||||
#define MG_REG_DRV_HEAD (MG_REG_OFFSET + 0xC)
|
||||
#define MG_REG_COMMAND (MG_REG_OFFSET + 0xE) /* write case */
|
||||
#define MG_REG_STATUS (MG_REG_OFFSET + 0xE) /* read case */
|
||||
#define MG_REG_DRV_CTRL (MG_REG_OFFSET + 0x10)
|
||||
#define MG_REG_BURST_CTRL (MG_REG_OFFSET + 0x12)
|
||||
|
||||
/* "Drive Select/Head Register" bit values */
|
||||
#define MG_REG_HEAD_MUST_BE_ON 0xA0 /* These 2 bits are always on */
|
||||
#define MG_REG_HEAD_DRIVE_MASTER (0x00 | MG_REG_HEAD_MUST_BE_ON)
|
||||
#define MG_REG_HEAD_DRIVE_SLAVE (0x10 | MG_REG_HEAD_MUST_BE_ON)
|
||||
#define MG_REG_HEAD_LBA_MODE (0x40 | MG_REG_HEAD_MUST_BE_ON)
|
||||
|
||||
|
||||
/* "Device Control Register" bit values */
|
||||
#define MG_REG_CTRL_INTR_ENABLE 0x0
|
||||
#define MG_REG_CTRL_INTR_DISABLE (0x1<<1)
|
||||
#define MG_REG_CTRL_RESET (0x1<<2)
|
||||
#define MG_REG_CTRL_INTR_POLA_ACTIVE_HIGH 0x0
|
||||
#define MG_REG_CTRL_INTR_POLA_ACTIVE_LOW (0x1<<4)
|
||||
#define MG_REG_CTRL_DPD_POLA_ACTIVE_LOW 0x0
|
||||
#define MG_REG_CTRL_DPD_POLA_ACTIVE_HIGH (0x1<<5)
|
||||
#define MG_REG_CTRL_DPD_DISABLE 0x0
|
||||
#define MG_REG_CTRL_DPD_ENABLE (0x1<<6)
|
||||
|
||||
/* Status register bit */
|
||||
/* error bit in status register */
|
||||
#define MG_REG_STATUS_BIT_ERROR 0x01
|
||||
/* corrected error in status register */
|
||||
#define MG_REG_STATUS_BIT_CORRECTED_ERROR 0x04
|
||||
/* data request bit in status register */
|
||||
#define MG_REG_STATUS_BIT_DATA_REQ 0x08
|
||||
/* DSC - Drive Seek Complete */
|
||||
#define MG_REG_STATUS_BIT_SEEK_DONE 0x10
|
||||
/* DWF - Drive Write Fault */
|
||||
#define MG_REG_STATUS_BIT_WRITE_FAULT 0x20
|
||||
#define MG_REG_STATUS_BIT_READY 0x40
|
||||
#define MG_REG_STATUS_BIT_BUSY 0x80
|
||||
|
||||
/* handy status */
|
||||
#define MG_STAT_READY (MG_REG_STATUS_BIT_READY | MG_REG_STATUS_BIT_SEEK_DONE)
|
||||
#define MG_READY_OK(s) (((s) & (MG_STAT_READY | \
|
||||
(MG_REG_STATUS_BIT_BUSY | \
|
||||
MG_REG_STATUS_BIT_WRITE_FAULT | \
|
||||
MG_REG_STATUS_BIT_ERROR))) == MG_STAT_READY)
|
||||
|
||||
/* Error register */
|
||||
#define MG_REG_ERR_AMNF 0x01
|
||||
#define MG_REG_ERR_ABRT 0x04
|
||||
#define MG_REG_ERR_IDNF 0x10
|
||||
#define MG_REG_ERR_UNC 0x40
|
||||
#define MG_REG_ERR_BBK 0x80
|
||||
|
||||
/* error code for others */
|
||||
#define MG_ERR_NONE 0
|
||||
#define MG_ERR_TIMEOUT 0x100
|
||||
#define MG_ERR_INIT_STAT 0x101
|
||||
#define MG_ERR_TRANSLATION 0x102
|
||||
#define MG_ERR_CTRL_RST 0x103
|
||||
#define MG_ERR_INV_STAT 0x104
|
||||
#define MG_ERR_RSTOUT 0x105
|
||||
|
||||
#define MG_MAX_ERRORS 6 /* Max read/write errors */
|
||||
|
||||
/* command */
|
||||
#define MG_CMD_RD 0x20
|
||||
#define MG_CMD_WR 0x30
|
||||
#define MG_CMD_SLEEP 0x99
|
||||
#define MG_CMD_WAKEUP 0xC3
|
||||
#define MG_CMD_ID 0xEC
|
||||
#define MG_CMD_WR_CONF 0x3C
|
||||
#define MG_CMD_RD_CONF 0x40
|
||||
|
||||
/* operation mode */
|
||||
#define MG_OP_CASCADE (1 << 0)
|
||||
#define MG_OP_CASCADE_SYNC_RD (1 << 1)
|
||||
#define MG_OP_CASCADE_SYNC_WR (1 << 2)
|
||||
#define MG_OP_INTERLEAVE (1 << 3)
|
||||
|
||||
/* synchronous */
|
||||
#define MG_BURST_LAT_4 (3 << 4)
|
||||
#define MG_BURST_LAT_5 (4 << 4)
|
||||
#define MG_BURST_LAT_6 (5 << 4)
|
||||
#define MG_BURST_LAT_7 (6 << 4)
|
||||
#define MG_BURST_LAT_8 (7 << 4)
|
||||
#define MG_BURST_LEN_4 (1 << 1)
|
||||
#define MG_BURST_LEN_8 (2 << 1)
|
||||
#define MG_BURST_LEN_16 (3 << 1)
|
||||
#define MG_BURST_LEN_32 (4 << 1)
|
||||
#define MG_BURST_LEN_CONT (0 << 1)
|
||||
|
||||
/* timeout value (unit: ms) */
|
||||
#define MG_TMAX_CONF_TO_CMD 1
|
||||
#define MG_TMAX_WAIT_RD_DRQ 10
|
||||
#define MG_TMAX_WAIT_WR_DRQ 500
|
||||
#define MG_TMAX_RST_TO_BUSY 10
|
||||
#define MG_TMAX_HDRST_TO_RDY 500
|
||||
#define MG_TMAX_SWRST_TO_RDY 500
|
||||
#define MG_TMAX_RSTOUT 3000
|
||||
|
||||
/* device attribution */
|
||||
/* use mflash as boot device */
|
||||
#define MG_BOOT_DEV (1 << 0)
|
||||
/* use mflash as storage device */
|
||||
#define MG_STORAGE_DEV (1 << 1)
|
||||
/* same as MG_STORAGE_DEV, but bootloader already done reset sequence */
|
||||
#define MG_STORAGE_DEV_SKIP_RST (1 << 2)
|
||||
|
||||
#define MG_DEV_MASK (MG_BOOT_DEV | MG_STORAGE_DEV | MG_STORAGE_DEV_SKIP_RST)
|
||||
|
||||
/* names of GPIO resource */
|
||||
#define MG_RST_PIN "mg_rst"
|
||||
/* except MG_BOOT_DEV, reset-out pin should be assigned */
|
||||
#define MG_RSTOUT_PIN "mg_rstout"
|
||||
|
||||
/* private driver data */
|
||||
struct mg_drv_data {
|
||||
/* disk resource */
|
||||
u32 use_polling;
|
||||
|
||||
/* device attribution */
|
||||
u32 dev_attr;
|
||||
|
||||
/* internally used */
|
||||
struct mg_host *host;
|
||||
};
|
||||
|
||||
/* main structure for mflash driver */
|
||||
struct mg_host {
|
||||
struct device *dev;
|
||||
|
||||
struct request_queue *breq;
|
||||
spinlock_t lock;
|
||||
struct gendisk *gd;
|
||||
|
||||
struct timer_list timer;
|
||||
void (*mg_do_intr) (struct mg_host *);
|
||||
|
||||
u16 id[ATA_ID_WORDS];
|
||||
|
||||
u16 cyls;
|
||||
u16 heads;
|
||||
u16 sectors;
|
||||
u32 n_sectors;
|
||||
u32 nres_sectors;
|
||||
|
||||
void __iomem *dev_base;
|
||||
unsigned int irq;
|
||||
unsigned int rst;
|
||||
unsigned int rstout;
|
||||
|
||||
u32 major;
|
||||
u32 error;
|
||||
};
|
||||
|
||||
/*
|
||||
* Debugging macro and defines
|
||||
*/
|
||||
#undef DO_MG_DEBUG
|
||||
#ifdef DO_MG_DEBUG
|
||||
# define MG_DBG(fmt, args...) \
|
||||
printk(KERN_DEBUG "%s:%d "fmt, __func__, __LINE__, ##args)
|
||||
#else /* CONFIG_MG_DEBUG */
|
||||
# define MG_DBG(fmt, args...) do { } while (0)
|
||||
#endif /* CONFIG_MG_DEBUG */
|
||||
|
||||
#endif
|
||||
801
include/linux/nilfs2_fs.h
Normal file
801
include/linux/nilfs2_fs.h
Normal file
|
|
@ -0,0 +1,801 @@
|
|||
/*
|
||||
* nilfs2_fs.h - NILFS2 on-disk structures and common declarations.
|
||||
*
|
||||
* Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Written by Koji Sato <koji@osrg.net>
|
||||
* Ryusuke Konishi <ryusuke@osrg.net>
|
||||
*/
|
||||
/*
|
||||
* linux/include/linux/ext2_fs.h
|
||||
*
|
||||
* Copyright (C) 1992, 1993, 1994, 1995
|
||||
* Remy Card (card@masi.ibp.fr)
|
||||
* Laboratoire MASI - Institut Blaise Pascal
|
||||
* Universite Pierre et Marie Curie (Paris VI)
|
||||
*
|
||||
* from
|
||||
*
|
||||
* linux/include/linux/minix_fs.h
|
||||
*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_NILFS_FS_H
|
||||
#define _LINUX_NILFS_FS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
/*
|
||||
* Inode flags stored in nilfs_inode and on-memory nilfs inode
|
||||
*
|
||||
* We define these flags based on ext2-fs because of the
|
||||
* compatibility reason; to avoid problems in chattr(1)
|
||||
*/
|
||||
#define NILFS_SECRM_FL 0x00000001 /* Secure deletion */
|
||||
#define NILFS_UNRM_FL 0x00000002 /* Undelete */
|
||||
#define NILFS_SYNC_FL 0x00000008 /* Synchronous updates */
|
||||
#define NILFS_IMMUTABLE_FL 0x00000010 /* Immutable file */
|
||||
#define NILFS_APPEND_FL 0x00000020 /* writes to file may only append */
|
||||
#define NILFS_NODUMP_FL 0x00000040 /* do not dump file */
|
||||
#define NILFS_NOATIME_FL 0x00000080 /* do not update atime */
|
||||
/* Reserved for compression usage... */
|
||||
#define NILFS_NOTAIL_FL 0x00008000 /* file tail should not be merged */
|
||||
#define NILFS_DIRSYNC_FL 0x00010000 /* dirsync behaviour */
|
||||
|
||||
#define NILFS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
|
||||
#define NILFS_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
|
||||
|
||||
|
||||
#define NILFS_INODE_BMAP_SIZE 7
|
||||
/**
|
||||
* struct nilfs_inode - structure of an inode on disk
|
||||
* @i_blocks: blocks count
|
||||
* @i_size: size in bytes
|
||||
* @i_ctime: creation time (seconds)
|
||||
* @i_mtime: modification time (seconds)
|
||||
* @i_ctime_nsec: creation time (nano seconds)
|
||||
* @i_mtime_nsec: modification time (nano seconds)
|
||||
* @i_uid: user id
|
||||
* @i_gid: group id
|
||||
* @i_mode: file mode
|
||||
* @i_links_count: links count
|
||||
* @i_flags: file flags
|
||||
* @i_bmap: block mapping
|
||||
* @i_xattr: extended attributes
|
||||
* @i_generation: file generation (for NFS)
|
||||
* @i_pad: padding
|
||||
*/
|
||||
struct nilfs_inode {
|
||||
__le64 i_blocks;
|
||||
__le64 i_size;
|
||||
__le64 i_ctime;
|
||||
__le64 i_mtime;
|
||||
__le32 i_ctime_nsec;
|
||||
__le32 i_mtime_nsec;
|
||||
__le32 i_uid;
|
||||
__le32 i_gid;
|
||||
__le16 i_mode;
|
||||
__le16 i_links_count;
|
||||
__le32 i_flags;
|
||||
__le64 i_bmap[NILFS_INODE_BMAP_SIZE];
|
||||
#define i_device_code i_bmap[0]
|
||||
__le64 i_xattr;
|
||||
__le32 i_generation;
|
||||
__le32 i_pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_super_root - structure of super root
|
||||
* @sr_sum: check sum
|
||||
* @sr_bytes: byte count of the structure
|
||||
* @sr_flags: flags (reserved)
|
||||
* @sr_nongc_ctime: write time of the last segment not for cleaner operation
|
||||
* @sr_dat: DAT file inode
|
||||
* @sr_cpfile: checkpoint file inode
|
||||
* @sr_sufile: segment usage file inode
|
||||
*/
|
||||
struct nilfs_super_root {
|
||||
__le32 sr_sum;
|
||||
__le16 sr_bytes;
|
||||
__le16 sr_flags;
|
||||
__le64 sr_nongc_ctime;
|
||||
struct nilfs_inode sr_dat;
|
||||
struct nilfs_inode sr_cpfile;
|
||||
struct nilfs_inode sr_sufile;
|
||||
};
|
||||
|
||||
#define NILFS_SR_MDT_OFFSET(inode_size, i) \
|
||||
((unsigned long)&((struct nilfs_super_root *)0)->sr_dat + \
|
||||
(inode_size) * (i))
|
||||
#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))
|
||||
|
||||
/*
|
||||
* Maximal mount counts
|
||||
*/
|
||||
#define NILFS_DFL_MAX_MNT_COUNT 50 /* 50 mounts */
|
||||
|
||||
/*
|
||||
* File system states (sbp->s_state, nilfs->ns_mount_state)
|
||||
*/
|
||||
#define NILFS_VALID_FS 0x0001 /* Unmounted cleanly */
|
||||
#define NILFS_ERROR_FS 0x0002 /* Errors detected */
|
||||
#define NILFS_RESIZE_FS 0x0004 /* Resize required */
|
||||
|
||||
/*
|
||||
* Mount flags (sbi->s_mount_opt)
|
||||
*/
|
||||
#define NILFS_MOUNT_ERROR_MODE 0x0070 /* Error mode mask */
|
||||
#define NILFS_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
|
||||
#define NILFS_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
|
||||
#define NILFS_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
|
||||
#define NILFS_MOUNT_SNAPSHOT 0x0080 /* Snapshot flag */
|
||||
#define NILFS_MOUNT_BARRIER 0x1000 /* Use block barriers */
|
||||
#define NILFS_MOUNT_STRICT_ORDER 0x2000 /* Apply strict in-order
|
||||
semantics also for data */
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_super_block - structure of super block on disk
|
||||
*/
|
||||
struct nilfs_super_block {
|
||||
__le32 s_rev_level; /* Revision level */
|
||||
__le16 s_minor_rev_level; /* minor revision level */
|
||||
__le16 s_magic; /* Magic signature */
|
||||
|
||||
__le16 s_bytes; /* Bytes count of CRC calculation
|
||||
for this structure. s_reserved
|
||||
is excluded. */
|
||||
__le16 s_flags; /* flags */
|
||||
__le32 s_crc_seed; /* Seed value of CRC calculation */
|
||||
__le32 s_sum; /* Check sum of super block */
|
||||
|
||||
__le32 s_log_block_size; /* Block size represented as follows
|
||||
blocksize =
|
||||
1 << (s_log_block_size + 10) */
|
||||
__le64 s_nsegments; /* Number of segments in filesystem */
|
||||
__le64 s_dev_size; /* block device size in bytes */
|
||||
__le64 s_first_data_block; /* 1st seg disk block number */
|
||||
__le32 s_blocks_per_segment; /* number of blocks per full segment */
|
||||
__le32 s_r_segments_percentage; /* Reserved segments percentage */
|
||||
|
||||
__le64 s_last_cno; /* Last checkpoint number */
|
||||
__le64 s_last_pseg; /* disk block addr pseg written last */
|
||||
__le64 s_last_seq; /* seq. number of seg written last */
|
||||
__le64 s_free_blocks_count; /* Free blocks count */
|
||||
|
||||
__le64 s_ctime; /* Creation time (execution time of
|
||||
newfs) */
|
||||
__le64 s_mtime; /* Mount time */
|
||||
__le64 s_wtime; /* Write time */
|
||||
__le16 s_mnt_count; /* Mount count */
|
||||
__le16 s_max_mnt_count; /* Maximal mount count */
|
||||
__le16 s_state; /* File system state */
|
||||
__le16 s_errors; /* Behaviour when detecting errors */
|
||||
__le64 s_lastcheck; /* time of last check */
|
||||
|
||||
__le32 s_checkinterval; /* max. time between checks */
|
||||
__le32 s_creator_os; /* OS */
|
||||
__le16 s_def_resuid; /* Default uid for reserved blocks */
|
||||
__le16 s_def_resgid; /* Default gid for reserved blocks */
|
||||
__le32 s_first_ino; /* First non-reserved inode */
|
||||
|
||||
__le16 s_inode_size; /* Size of an inode */
|
||||
__le16 s_dat_entry_size; /* Size of a dat entry */
|
||||
__le16 s_checkpoint_size; /* Size of a checkpoint */
|
||||
__le16 s_segment_usage_size; /* Size of a segment usage */
|
||||
|
||||
__u8 s_uuid[16]; /* 128-bit uuid for volume */
|
||||
char s_volume_name[16]; /* volume name */
|
||||
char s_last_mounted[64]; /* directory where last mounted */
|
||||
|
||||
__le32 s_c_interval; /* Commit interval of segment */
|
||||
__le32 s_c_block_max; /* Threshold of data amount for
|
||||
the segment construction */
|
||||
__u32 s_reserved[192]; /* padding to the end of the block */
|
||||
};
|
||||
|
||||
/*
|
||||
* Codes for operating systems
|
||||
*/
|
||||
#define NILFS_OS_LINUX 0
|
||||
/* Codes from 1 to 4 are reserved to keep compatibility with ext2 creator-OS */
|
||||
|
||||
/*
|
||||
* Revision levels
|
||||
*/
|
||||
#define NILFS_CURRENT_REV 2 /* current major revision */
|
||||
#define NILFS_MINOR_REV 0 /* minor revision */
|
||||
|
||||
/*
|
||||
* Bytes count of super_block for CRC-calculation
|
||||
*/
|
||||
#define NILFS_SB_BYTES \
|
||||
((long)&((struct nilfs_super_block *)0)->s_reserved)
|
||||
|
||||
/*
|
||||
* Special inode number
|
||||
*/
|
||||
#define NILFS_ROOT_INO 2 /* Root file inode */
|
||||
#define NILFS_DAT_INO 3 /* DAT file */
|
||||
#define NILFS_CPFILE_INO 4 /* checkpoint file */
|
||||
#define NILFS_SUFILE_INO 5 /* segment usage file */
|
||||
#define NILFS_IFILE_INO 6 /* ifile */
|
||||
#define NILFS_ATIME_INO 7 /* Atime file (reserved) */
|
||||
#define NILFS_XATTR_INO 8 /* Xattribute file (reserved) */
|
||||
#define NILFS_SKETCH_INO 10 /* Sketch file */
|
||||
#define NILFS_USER_INO 11 /* Fisrt user's file inode number */
|
||||
|
||||
#define NILFS_SB_OFFSET_BYTES 1024 /* byte offset of nilfs superblock */
|
||||
#define NILFS_SUPER_MAGIC 0x3434 /* NILFS filesystem magic number */
|
||||
|
||||
#define NILFS_SEG_MIN_BLOCKS 16 /* Minimum number of blocks in
|
||||
a full segment */
|
||||
#define NILFS_PSEG_MIN_BLOCKS 2 /* Minimum number of blocks in
|
||||
a partial segment */
|
||||
#define NILFS_MIN_NRSVSEGS 8 /* Minimum number of reserved
|
||||
segments */
|
||||
|
||||
/*
|
||||
* bytes offset of secondary super block
|
||||
*/
|
||||
#define NILFS_SB2_OFFSET_BYTES(devsize) ((((devsize) >> 12) - 1) << 12)
|
||||
|
||||
/*
|
||||
* Maximal count of links to a file
|
||||
*/
|
||||
#define NILFS_LINK_MAX 32000
|
||||
|
||||
/*
|
||||
* Structure of a directory entry
|
||||
* (Same as ext2)
|
||||
*/
|
||||
|
||||
#define NILFS_NAME_LEN 255
|
||||
|
||||
/*
|
||||
* The new version of the directory entry. Since V0 structures are
|
||||
* stored in intel byte order, and the name_len field could never be
|
||||
* bigger than 255 chars, it's safe to reclaim the extra byte for the
|
||||
* file_type field.
|
||||
*/
|
||||
struct nilfs_dir_entry {
|
||||
__le64 inode; /* Inode number */
|
||||
__le16 rec_len; /* Directory entry length */
|
||||
__u8 name_len; /* Name length */
|
||||
__u8 file_type;
|
||||
char name[NILFS_NAME_LEN]; /* File name */
|
||||
char pad;
|
||||
};
|
||||
|
||||
/*
|
||||
* NILFS directory file types. Only the low 3 bits are used. The
|
||||
* other bits are reserved for now.
|
||||
*/
|
||||
enum {
|
||||
NILFS_FT_UNKNOWN,
|
||||
NILFS_FT_REG_FILE,
|
||||
NILFS_FT_DIR,
|
||||
NILFS_FT_CHRDEV,
|
||||
NILFS_FT_BLKDEV,
|
||||
NILFS_FT_FIFO,
|
||||
NILFS_FT_SOCK,
|
||||
NILFS_FT_SYMLINK,
|
||||
NILFS_FT_MAX
|
||||
};
|
||||
|
||||
/*
|
||||
* NILFS_DIR_PAD defines the directory entries boundaries
|
||||
*
|
||||
* NOTE: It must be a multiple of 8
|
||||
*/
|
||||
#define NILFS_DIR_PAD 8
|
||||
#define NILFS_DIR_ROUND (NILFS_DIR_PAD - 1)
|
||||
#define NILFS_DIR_REC_LEN(name_len) (((name_len) + 12 + NILFS_DIR_ROUND) & \
|
||||
~NILFS_DIR_ROUND)
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_finfo - file information
|
||||
* @fi_ino: inode number
|
||||
* @fi_cno: checkpoint number
|
||||
* @fi_nblocks: number of blocks (including intermediate blocks)
|
||||
* @fi_ndatablk: number of file data blocks
|
||||
*/
|
||||
struct nilfs_finfo {
|
||||
__le64 fi_ino;
|
||||
__le64 fi_cno;
|
||||
__le32 fi_nblocks;
|
||||
__le32 fi_ndatablk;
|
||||
/* array of virtual block numbers */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_binfo_v - information for the block to which a virtual block number is assigned
|
||||
* @bi_vblocknr: virtual block number
|
||||
* @bi_blkoff: block offset
|
||||
*/
|
||||
struct nilfs_binfo_v {
|
||||
__le64 bi_vblocknr;
|
||||
__le64 bi_blkoff;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_binfo_dat - information for the block which belongs to the DAT file
|
||||
* @bi_blkoff: block offset
|
||||
* @bi_level: level
|
||||
* @bi_pad: padding
|
||||
*/
|
||||
struct nilfs_binfo_dat {
|
||||
__le64 bi_blkoff;
|
||||
__u8 bi_level;
|
||||
__u8 bi_pad[7];
|
||||
};
|
||||
|
||||
/**
|
||||
* union nilfs_binfo: block information
|
||||
* @bi_v: nilfs_binfo_v structure
|
||||
* @bi_dat: nilfs_binfo_dat structure
|
||||
*/
|
||||
union nilfs_binfo {
|
||||
struct nilfs_binfo_v bi_v;
|
||||
struct nilfs_binfo_dat bi_dat;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_segment_summary - segment summary
|
||||
* @ss_datasum: checksum of data
|
||||
* @ss_sumsum: checksum of segment summary
|
||||
* @ss_magic: magic number
|
||||
* @ss_bytes: size of this structure in bytes
|
||||
* @ss_flags: flags
|
||||
* @ss_seq: sequence number
|
||||
* @ss_create: creation timestamp
|
||||
* @ss_next: next segment
|
||||
* @ss_nblocks: number of blocks
|
||||
* @ss_nfinfo: number of finfo structures
|
||||
* @ss_sumbytes: total size of segment summary in bytes
|
||||
* @ss_pad: padding
|
||||
*/
|
||||
struct nilfs_segment_summary {
|
||||
__le32 ss_datasum;
|
||||
__le32 ss_sumsum;
|
||||
__le32 ss_magic;
|
||||
__le16 ss_bytes;
|
||||
__le16 ss_flags;
|
||||
__le64 ss_seq;
|
||||
__le64 ss_create;
|
||||
__le64 ss_next;
|
||||
__le32 ss_nblocks;
|
||||
__le32 ss_nfinfo;
|
||||
__le32 ss_sumbytes;
|
||||
__le32 ss_pad;
|
||||
/* array of finfo structures */
|
||||
};
|
||||
|
||||
#define NILFS_SEGSUM_MAGIC 0x1eaffa11 /* segment summary magic number */
|
||||
|
||||
/*
|
||||
* Segment summary flags
|
||||
*/
|
||||
#define NILFS_SS_LOGBGN 0x0001 /* begins a logical segment */
|
||||
#define NILFS_SS_LOGEND 0x0002 /* ends a logical segment */
|
||||
#define NILFS_SS_SR 0x0004 /* has super root */
|
||||
#define NILFS_SS_SYNDT 0x0008 /* includes data only updates */
|
||||
#define NILFS_SS_GC 0x0010 /* segment written for cleaner operation */
|
||||
|
||||
/**
|
||||
* struct nilfs_palloc_group_desc - block group descriptor
|
||||
* @pg_nfrees: number of free entries in block group
|
||||
*/
|
||||
struct nilfs_palloc_group_desc {
|
||||
__le32 pg_nfrees;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_dat_entry - disk address translation entry
|
||||
* @dt_blocknr: block number
|
||||
* @dt_start: start checkpoint number
|
||||
* @dt_end: end checkpoint number
|
||||
* @dt_rsv: reserved for future use
|
||||
*/
|
||||
struct nilfs_dat_entry {
|
||||
__le64 de_blocknr;
|
||||
__le64 de_start;
|
||||
__le64 de_end;
|
||||
__le64 de_rsv;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_dat_group_desc - block group descriptor
|
||||
* @dg_nfrees: number of free virtual block numbers in block group
|
||||
*/
|
||||
struct nilfs_dat_group_desc {
|
||||
__le32 dg_nfrees;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_snapshot_list - snapshot list
|
||||
* @ssl_next: next checkpoint number on snapshot list
|
||||
* @ssl_prev: previous checkpoint number on snapshot list
|
||||
*/
|
||||
struct nilfs_snapshot_list {
|
||||
__le64 ssl_next;
|
||||
__le64 ssl_prev;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_checkpoint - checkpoint structure
|
||||
* @cp_flags: flags
|
||||
* @cp_checkpoints_count: checkpoints count in a block
|
||||
* @cp_snapshot_list: snapshot list
|
||||
* @cp_cno: checkpoint number
|
||||
* @cp_create: creation timestamp
|
||||
* @cp_nblk_inc: number of blocks incremented by this checkpoint
|
||||
* @cp_inodes_count: inodes count
|
||||
* @cp_blocks_count: blocks count
|
||||
* @cp_ifile_inode: inode of ifile
|
||||
*/
|
||||
struct nilfs_checkpoint {
|
||||
__le32 cp_flags;
|
||||
__le32 cp_checkpoints_count;
|
||||
struct nilfs_snapshot_list cp_snapshot_list;
|
||||
__le64 cp_cno;
|
||||
__le64 cp_create;
|
||||
__le64 cp_nblk_inc;
|
||||
__le64 cp_inodes_count;
|
||||
__le64 cp_blocks_count; /* Reserved (might be deleted) */
|
||||
|
||||
/* Do not change the byte offset of ifile inode.
|
||||
To keep the compatibility of the disk format,
|
||||
additional fields should be added behind cp_ifile_inode. */
|
||||
struct nilfs_inode cp_ifile_inode;
|
||||
};
|
||||
|
||||
/* checkpoint flags */
|
||||
enum {
|
||||
NILFS_CHECKPOINT_SNAPSHOT,
|
||||
NILFS_CHECKPOINT_INVALID,
|
||||
NILFS_CHECKPOINT_SKETCH,
|
||||
NILFS_CHECKPOINT_MINOR,
|
||||
};
|
||||
|
||||
#define NILFS_CHECKPOINT_FNS(flag, name) \
|
||||
static inline void \
|
||||
nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
|
||||
{ \
|
||||
cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
|
||||
(1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
} \
|
||||
static inline void \
|
||||
nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
|
||||
{ \
|
||||
cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
|
||||
~(1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
} \
|
||||
static inline int \
|
||||
nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
|
||||
{ \
|
||||
return !!(le32_to_cpu(cp->cp_flags) & \
|
||||
(1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
}
|
||||
|
||||
NILFS_CHECKPOINT_FNS(SNAPSHOT, snapshot)
|
||||
NILFS_CHECKPOINT_FNS(INVALID, invalid)
|
||||
NILFS_CHECKPOINT_FNS(MINOR, minor)
|
||||
|
||||
/**
|
||||
* struct nilfs_cpinfo - checkpoint information
|
||||
* @ci_flags: flags
|
||||
* @ci_pad: padding
|
||||
* @ci_cno: checkpoint number
|
||||
* @ci_create: creation timestamp
|
||||
* @ci_nblk_inc: number of blocks incremented by this checkpoint
|
||||
* @ci_inodes_count: inodes count
|
||||
* @ci_blocks_count: blocks count
|
||||
* @ci_next: next checkpoint number in snapshot list
|
||||
*/
|
||||
struct nilfs_cpinfo {
|
||||
__u32 ci_flags;
|
||||
__u32 ci_pad;
|
||||
__u64 ci_cno;
|
||||
__u64 ci_create;
|
||||
__u64 ci_nblk_inc;
|
||||
__u64 ci_inodes_count;
|
||||
__u64 ci_blocks_count;
|
||||
__u64 ci_next;
|
||||
};
|
||||
|
||||
#define NILFS_CPINFO_FNS(flag, name) \
|
||||
static inline int \
|
||||
nilfs_cpinfo_##name(const struct nilfs_cpinfo *cpinfo) \
|
||||
{ \
|
||||
return !!(cpinfo->ci_flags & (1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
}
|
||||
|
||||
NILFS_CPINFO_FNS(SNAPSHOT, snapshot)
|
||||
NILFS_CPINFO_FNS(INVALID, invalid)
|
||||
NILFS_CPINFO_FNS(MINOR, minor)
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_cpfile_header - checkpoint file header
|
||||
* @ch_ncheckpoints: number of checkpoints
|
||||
* @ch_nsnapshots: number of snapshots
|
||||
* @ch_snapshot_list: snapshot list
|
||||
*/
|
||||
struct nilfs_cpfile_header {
|
||||
__le64 ch_ncheckpoints;
|
||||
__le64 ch_nsnapshots;
|
||||
struct nilfs_snapshot_list ch_snapshot_list;
|
||||
};
|
||||
|
||||
#define NILFS_CPFILE_FIRST_CHECKPOINT_OFFSET \
|
||||
((sizeof(struct nilfs_cpfile_header) + \
|
||||
sizeof(struct nilfs_checkpoint) - 1) / \
|
||||
sizeof(struct nilfs_checkpoint))
|
||||
|
||||
/**
|
||||
* struct nilfs_segment_usage - segment usage
|
||||
* @su_lastmod: last modified timestamp
|
||||
* @su_nblocks: number of blocks in segment
|
||||
* @su_flags: flags
|
||||
*/
|
||||
struct nilfs_segment_usage {
|
||||
__le64 su_lastmod;
|
||||
__le32 su_nblocks;
|
||||
__le32 su_flags;
|
||||
};
|
||||
|
||||
/* segment usage flag */
|
||||
enum {
|
||||
NILFS_SEGMENT_USAGE_ACTIVE,
|
||||
NILFS_SEGMENT_USAGE_DIRTY,
|
||||
NILFS_SEGMENT_USAGE_ERROR,
|
||||
|
||||
/* ... */
|
||||
};
|
||||
|
||||
#define NILFS_SEGMENT_USAGE_FNS(flag, name) \
|
||||
static inline void \
|
||||
nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
|
||||
{ \
|
||||
su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
|
||||
(1UL << NILFS_SEGMENT_USAGE_##flag));\
|
||||
} \
|
||||
static inline void \
|
||||
nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
|
||||
{ \
|
||||
su->su_flags = \
|
||||
cpu_to_le32(le32_to_cpu(su->su_flags) & \
|
||||
~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
|
||||
} \
|
||||
static inline int \
|
||||
nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
|
||||
{ \
|
||||
return !!(le32_to_cpu(su->su_flags) & \
|
||||
(1UL << NILFS_SEGMENT_USAGE_##flag)); \
|
||||
}
|
||||
|
||||
NILFS_SEGMENT_USAGE_FNS(ACTIVE, active)
|
||||
NILFS_SEGMENT_USAGE_FNS(DIRTY, dirty)
|
||||
NILFS_SEGMENT_USAGE_FNS(ERROR, error)
|
||||
|
||||
static inline void
|
||||
nilfs_segment_usage_set_clean(struct nilfs_segment_usage *su)
|
||||
{
|
||||
su->su_lastmod = cpu_to_le64(0);
|
||||
su->su_nblocks = cpu_to_le32(0);
|
||||
su->su_flags = cpu_to_le32(0);
|
||||
}
|
||||
|
||||
static inline int
|
||||
nilfs_segment_usage_clean(const struct nilfs_segment_usage *su)
|
||||
{
|
||||
return !le32_to_cpu(su->su_flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct nilfs_sufile_header - segment usage file header
|
||||
* @sh_ncleansegs: number of clean segments
|
||||
* @sh_ndirtysegs: number of dirty segments
|
||||
* @sh_last_alloc: last allocated segment number
|
||||
*/
|
||||
struct nilfs_sufile_header {
|
||||
__le64 sh_ncleansegs;
|
||||
__le64 sh_ndirtysegs;
|
||||
__le64 sh_last_alloc;
|
||||
/* ... */
|
||||
};
|
||||
|
||||
#define NILFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET \
|
||||
((sizeof(struct nilfs_sufile_header) + \
|
||||
sizeof(struct nilfs_segment_usage) - 1) / \
|
||||
sizeof(struct nilfs_segment_usage))
|
||||
|
||||
/**
|
||||
* nilfs_suinfo - segment usage information
|
||||
* @sui_lastmod:
|
||||
* @sui_nblocks:
|
||||
* @sui_flags:
|
||||
*/
|
||||
struct nilfs_suinfo {
|
||||
__u64 sui_lastmod;
|
||||
__u32 sui_nblocks;
|
||||
__u32 sui_flags;
|
||||
};
|
||||
|
||||
#define NILFS_SUINFO_FNS(flag, name) \
|
||||
static inline int \
|
||||
nilfs_suinfo_##name(const struct nilfs_suinfo *si) \
|
||||
{ \
|
||||
return si->sui_flags & (1UL << NILFS_SEGMENT_USAGE_##flag); \
|
||||
}
|
||||
|
||||
NILFS_SUINFO_FNS(ACTIVE, active)
|
||||
NILFS_SUINFO_FNS(DIRTY, dirty)
|
||||
NILFS_SUINFO_FNS(ERROR, error)
|
||||
|
||||
static inline int nilfs_suinfo_clean(const struct nilfs_suinfo *si)
|
||||
{
|
||||
return !si->sui_flags;
|
||||
}
|
||||
|
||||
/* ioctl */
|
||||
enum {
|
||||
NILFS_CHECKPOINT,
|
||||
NILFS_SNAPSHOT,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_cpmode -
|
||||
* @cc_cno:
|
||||
* @cc_mode:
|
||||
*/
|
||||
struct nilfs_cpmode {
|
||||
__u64 cm_cno;
|
||||
__u32 cm_mode;
|
||||
__u32 cm_pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_argv - argument vector
|
||||
* @v_base:
|
||||
* @v_nmembs:
|
||||
* @v_size:
|
||||
* @v_flags:
|
||||
* @v_index:
|
||||
*/
|
||||
struct nilfs_argv {
|
||||
__u64 v_base;
|
||||
__u32 v_nmembs; /* number of members */
|
||||
__u16 v_size; /* size of members */
|
||||
__u16 v_flags;
|
||||
__u64 v_index;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_period -
|
||||
* @p_start:
|
||||
* @p_end:
|
||||
*/
|
||||
struct nilfs_period {
|
||||
__u64 p_start;
|
||||
__u64 p_end;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_cpstat -
|
||||
* @cs_cno: checkpoint number
|
||||
* @cs_ncps: number of checkpoints
|
||||
* @cs_nsss: number of snapshots
|
||||
*/
|
||||
struct nilfs_cpstat {
|
||||
__u64 cs_cno;
|
||||
__u64 cs_ncps;
|
||||
__u64 cs_nsss;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_sustat -
|
||||
* @ss_nsegs: number of segments
|
||||
* @ss_ncleansegs: number of clean segments
|
||||
* @ss_ndirtysegs: number of dirty segments
|
||||
* @ss_ctime: creation time of the last segment
|
||||
* @ss_nongc_ctime: creation time of the last segment not for GC
|
||||
* @ss_prot_seq: least sequence number of segments which must not be reclaimed
|
||||
*/
|
||||
struct nilfs_sustat {
|
||||
__u64 ss_nsegs;
|
||||
__u64 ss_ncleansegs;
|
||||
__u64 ss_ndirtysegs;
|
||||
__u64 ss_ctime;
|
||||
__u64 ss_nongc_ctime;
|
||||
__u64 ss_prot_seq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_vinfo - virtual block number information
|
||||
* @vi_vblocknr:
|
||||
* @vi_start:
|
||||
* @vi_end:
|
||||
* @vi_blocknr:
|
||||
*/
|
||||
struct nilfs_vinfo {
|
||||
__u64 vi_vblocknr;
|
||||
__u64 vi_start;
|
||||
__u64 vi_end;
|
||||
__u64 vi_blocknr;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_vdesc -
|
||||
*/
|
||||
struct nilfs_vdesc {
|
||||
__u64 vd_ino;
|
||||
__u64 vd_cno;
|
||||
__u64 vd_vblocknr;
|
||||
struct nilfs_period vd_period;
|
||||
__u64 vd_blocknr;
|
||||
__u64 vd_offset;
|
||||
__u32 vd_flags;
|
||||
__u32 vd_pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_bdesc -
|
||||
*/
|
||||
struct nilfs_bdesc {
|
||||
__u64 bd_ino;
|
||||
__u64 bd_oblocknr;
|
||||
__u64 bd_blocknr;
|
||||
__u64 bd_offset;
|
||||
__u32 bd_level;
|
||||
__u32 bd_pad;
|
||||
};
|
||||
|
||||
#define NILFS_IOCTL_IDENT 'n'
|
||||
|
||||
#define NILFS_IOCTL_CHANGE_CPMODE \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x80, struct nilfs_cpmode)
|
||||
#define NILFS_IOCTL_DELETE_CHECKPOINT \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x81, __u64)
|
||||
#define NILFS_IOCTL_GET_CPINFO \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x82, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_GET_CPSTAT \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x83, struct nilfs_cpstat)
|
||||
#define NILFS_IOCTL_GET_SUINFO \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x84, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_GET_SUSTAT \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x85, struct nilfs_sustat)
|
||||
#define NILFS_IOCTL_GET_VINFO \
|
||||
_IOWR(NILFS_IOCTL_IDENT, 0x86, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_GET_BDESCS \
|
||||
_IOWR(NILFS_IOCTL_IDENT, 0x87, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_CLEAN_SEGMENTS \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x88, struct nilfs_argv[5])
|
||||
#define NILFS_IOCTL_SYNC \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x8A, __u64)
|
||||
#define NILFS_IOCTL_RESIZE \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x8B, __u64)
|
||||
|
||||
#endif /* _LINUX_NILFS_FS_H */
|
||||
|
|
@ -228,10 +228,11 @@ extern void parport_pc_release_resources(struct parport *p);
|
|||
extern int parport_pc_claim_resources(struct parport *p);
|
||||
|
||||
/* PCMCIA code will want to get us to look at a port. Provide a mechanism. */
|
||||
extern struct parport *parport_pc_probe_port (unsigned long base,
|
||||
unsigned long base_hi,
|
||||
int irq, int dma,
|
||||
struct device *dev);
|
||||
extern void parport_pc_unregister_port (struct parport *p);
|
||||
extern struct parport *parport_pc_probe_port(unsigned long base,
|
||||
unsigned long base_hi,
|
||||
int irq, int dma,
|
||||
struct device *dev,
|
||||
int irqflags);
|
||||
extern void parport_pc_unregister_port(struct parport *p);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -674,6 +674,11 @@ int __must_check pci_reenable_device(struct pci_dev *);
|
|||
int __must_check pcim_enable_device(struct pci_dev *pdev);
|
||||
void pcim_pin_device(struct pci_dev *pdev);
|
||||
|
||||
static inline int pci_is_enabled(struct pci_dev *pdev)
|
||||
{
|
||||
return (atomic_read(&pdev->enable_cnt) > 0);
|
||||
}
|
||||
|
||||
static inline int pci_is_managed(struct pci_dev *pdev)
|
||||
{
|
||||
return pdev->is_managed;
|
||||
|
|
|
|||
|
|
@ -2514,6 +2514,8 @@
|
|||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433
|
||||
#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575
|
||||
#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
|
||||
#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c
|
||||
#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e
|
||||
#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580
|
||||
#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582
|
||||
#define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ struct pda_power_pdata {
|
|||
unsigned int wait_for_status; /* msecs, default is 500 */
|
||||
unsigned int wait_for_charger; /* msecs, default is 500 */
|
||||
unsigned int polling_interval; /* msecs, default is 2000 */
|
||||
|
||||
unsigned long ac_max_uA; /* current to draw when on AC */
|
||||
};
|
||||
|
||||
#endif /* __PDA_POWER_H__ */
|
||||
|
|
|
|||
84
include/linux/percpu-defs.h
Normal file
84
include/linux/percpu-defs.h
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
#ifndef _LINUX_PERCPU_DEFS_H
|
||||
#define _LINUX_PERCPU_DEFS_H
|
||||
|
||||
/*
|
||||
* Determine the real variable name from the name visible in the
|
||||
* kernel sources.
|
||||
*/
|
||||
#define per_cpu_var(var) per_cpu__##var
|
||||
|
||||
/*
|
||||
* Base implementations of per-CPU variable declarations and definitions, where
|
||||
* the section in which the variable is to be placed is provided by the
|
||||
* 'section' argument. This may be used to affect the parameters governing the
|
||||
* variable's storage.
|
||||
*
|
||||
* NOTE! The sections for the DECLARE and for the DEFINE must match, lest
|
||||
* linkage errors occur due the compiler generating the wrong code to access
|
||||
* that section.
|
||||
*/
|
||||
#define DECLARE_PER_CPU_SECTION(type, name, section) \
|
||||
extern \
|
||||
__attribute__((__section__(PER_CPU_BASE_SECTION section))) \
|
||||
PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name
|
||||
|
||||
#define DEFINE_PER_CPU_SECTION(type, name, section) \
|
||||
__attribute__((__section__(PER_CPU_BASE_SECTION section))) \
|
||||
PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name
|
||||
|
||||
/*
|
||||
* Variant on the per-CPU variable declaration/definition theme used for
|
||||
* ordinary per-CPU variables.
|
||||
*/
|
||||
#define DECLARE_PER_CPU(type, name) \
|
||||
DECLARE_PER_CPU_SECTION(type, name, "")
|
||||
|
||||
#define DEFINE_PER_CPU(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, "")
|
||||
|
||||
/*
|
||||
* Declaration/definition used for per-CPU variables that must come first in
|
||||
* the set of variables.
|
||||
*/
|
||||
#define DECLARE_PER_CPU_FIRST(type, name) \
|
||||
DECLARE_PER_CPU_SECTION(type, name, PER_CPU_FIRST_SECTION)
|
||||
|
||||
#define DEFINE_PER_CPU_FIRST(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, PER_CPU_FIRST_SECTION)
|
||||
|
||||
/*
|
||||
* Declaration/definition used for per-CPU variables that must be cacheline
|
||||
* aligned under SMP conditions so that, whilst a particular instance of the
|
||||
* data corresponds to a particular CPU, inefficiencies due to direct access by
|
||||
* other CPUs are reduced by preventing the data from unnecessarily spanning
|
||||
* cachelines.
|
||||
*
|
||||
* An example of this would be statistical data, where each CPU's set of data
|
||||
* is updated by that CPU alone, but the data from across all CPUs is collated
|
||||
* by a CPU processing a read from a proc file.
|
||||
*/
|
||||
#define DECLARE_PER_CPU_SHARED_ALIGNED(type, name) \
|
||||
DECLARE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \
|
||||
____cacheline_aligned_in_smp
|
||||
|
||||
#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \
|
||||
____cacheline_aligned_in_smp
|
||||
|
||||
/*
|
||||
* Declaration/definition used for per-CPU variables that must be page aligned.
|
||||
*/
|
||||
#define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \
|
||||
DECLARE_PER_CPU_SECTION(type, name, ".page_aligned")
|
||||
|
||||
#define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, ".page_aligned")
|
||||
|
||||
/*
|
||||
* Intermodule exports for per-CPU variables.
|
||||
*/
|
||||
#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
|
||||
#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
|
||||
|
||||
|
||||
#endif /* _LINUX_PERCPU_DEFS_H */
|
||||
|
|
@ -9,50 +9,6 @@
|
|||
|
||||
#include <asm/percpu.h>
|
||||
|
||||
#ifndef PER_CPU_BASE_SECTION
|
||||
#ifdef CONFIG_SMP
|
||||
#define PER_CPU_BASE_SECTION ".data.percpu"
|
||||
#else
|
||||
#define PER_CPU_BASE_SECTION ".data"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#ifdef MODULE
|
||||
#define PER_CPU_SHARED_ALIGNED_SECTION ""
|
||||
#else
|
||||
#define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned"
|
||||
#endif
|
||||
#define PER_CPU_FIRST_SECTION ".first"
|
||||
|
||||
#else
|
||||
|
||||
#define PER_CPU_SHARED_ALIGNED_SECTION ""
|
||||
#define PER_CPU_FIRST_SECTION ""
|
||||
|
||||
#endif
|
||||
|
||||
#define DEFINE_PER_CPU_SECTION(type, name, section) \
|
||||
__attribute__((__section__(PER_CPU_BASE_SECTION section))) \
|
||||
PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name
|
||||
|
||||
#define DEFINE_PER_CPU(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, "")
|
||||
|
||||
#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \
|
||||
____cacheline_aligned_in_smp
|
||||
|
||||
#define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, ".page_aligned")
|
||||
|
||||
#define DEFINE_PER_CPU_FIRST(type, name) \
|
||||
DEFINE_PER_CPU_SECTION(type, name, PER_CPU_FIRST_SECTION)
|
||||
|
||||
#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
|
||||
#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
|
||||
|
||||
/* enough to cover all DEFINE_PER_CPUs in modules */
|
||||
#ifdef CONFIG_MODULES
|
||||
#define PERCPU_MODULE_RESERVE (8 << 10)
|
||||
|
|
@ -168,4 +124,56 @@ static inline void free_percpu(void *p)
|
|||
#define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \
|
||||
__alignof__(type))
|
||||
|
||||
/*
|
||||
* Optional methods for optimized non-lvalue per-cpu variable access.
|
||||
*
|
||||
* @var can be a percpu variable or a field of it and its size should
|
||||
* equal char, int or long. percpu_read() evaluates to a lvalue and
|
||||
* all others to void.
|
||||
*
|
||||
* These operations are guaranteed to be atomic w.r.t. preemption.
|
||||
* The generic versions use plain get/put_cpu_var(). Archs are
|
||||
* encouraged to implement single-instruction alternatives which don't
|
||||
* require preemption protection.
|
||||
*/
|
||||
#ifndef percpu_read
|
||||
# define percpu_read(var) \
|
||||
({ \
|
||||
typeof(per_cpu_var(var)) __tmp_var__; \
|
||||
__tmp_var__ = get_cpu_var(var); \
|
||||
put_cpu_var(var); \
|
||||
__tmp_var__; \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define __percpu_generic_to_op(var, val, op) \
|
||||
do { \
|
||||
get_cpu_var(var) op val; \
|
||||
put_cpu_var(var); \
|
||||
} while (0)
|
||||
|
||||
#ifndef percpu_write
|
||||
# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_add
|
||||
# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_sub
|
||||
# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_and
|
||||
# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_or
|
||||
# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_xor
|
||||
# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=)
|
||||
#endif
|
||||
|
||||
#endif /* __LINUX_PERCPU_H */
|
||||
|
|
|
|||
|
|
@ -388,6 +388,12 @@ struct phy_driver {
|
|||
/* Enables or disables interrupts */
|
||||
int (*config_intr)(struct phy_device *phydev);
|
||||
|
||||
/*
|
||||
* Checks if the PHY generated an interrupt.
|
||||
* For multi-PHY devices with shared PHY interrupt pin
|
||||
*/
|
||||
int (*did_interrupt)(struct phy_device *phydev);
|
||||
|
||||
/* Clears up any memory if needed */
|
||||
void (*remove)(struct phy_device *phydev);
|
||||
|
||||
|
|
|
|||
|
|
@ -134,6 +134,11 @@ struct pipe_buf_operations {
|
|||
memory allocation, whereas PIPE_BUF makes atomicity guarantees. */
|
||||
#define PIPE_SIZE PAGE_SIZE
|
||||
|
||||
/* Pipe lock and unlock operations */
|
||||
void pipe_lock(struct pipe_inode_info *);
|
||||
void pipe_unlock(struct pipe_inode_info *);
|
||||
void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *);
|
||||
|
||||
/* Drop the inode semaphore and wait for a pipe event, atomically */
|
||||
void pipe_wait(struct pipe_inode_info *pipe);
|
||||
|
||||
|
|
|
|||
|
|
@ -77,4 +77,46 @@ extern int platform_driver_probe(struct platform_driver *driver,
|
|||
#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev)
|
||||
#define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data))
|
||||
|
||||
/* early platform driver interface */
|
||||
struct early_platform_driver {
|
||||
const char *class_str;
|
||||
struct platform_driver *pdrv;
|
||||
struct list_head list;
|
||||
int requested_id;
|
||||
};
|
||||
|
||||
#define EARLY_PLATFORM_ID_UNSET -2
|
||||
#define EARLY_PLATFORM_ID_ERROR -3
|
||||
|
||||
extern int early_platform_driver_register(struct early_platform_driver *epdrv,
|
||||
char *buf);
|
||||
extern void early_platform_add_devices(struct platform_device **devs, int num);
|
||||
|
||||
static inline int is_early_platform_device(struct platform_device *pdev)
|
||||
{
|
||||
return !pdev->dev.driver;
|
||||
}
|
||||
|
||||
extern void early_platform_driver_register_all(char *class_str);
|
||||
extern int early_platform_driver_probe(char *class_str,
|
||||
int nr_probe, int user_only);
|
||||
extern void early_platform_cleanup(void);
|
||||
|
||||
|
||||
#ifndef MODULE
|
||||
#define early_platform_init(class_string, platform_driver) \
|
||||
static __initdata struct early_platform_driver early_driver = { \
|
||||
.class_str = class_string, \
|
||||
.pdrv = platform_driver, \
|
||||
.requested_id = EARLY_PLATFORM_ID_UNSET, \
|
||||
}; \
|
||||
static int __init early_platform_driver_setup_func(char *buf) \
|
||||
{ \
|
||||
return early_platform_driver_register(&early_driver, buf); \
|
||||
} \
|
||||
early_param(class_string, early_platform_driver_setup_func)
|
||||
#else /* MODULE */
|
||||
#define early_platform_init(class_string, platform_driver)
|
||||
#endif /* MODULE */
|
||||
|
||||
#endif /* _PLATFORM_DEVICE_H_ */
|
||||
|
|
|
|||
|
|
@ -161,9 +161,8 @@ struct rcu_data {
|
|||
unsigned long offline_fqs; /* Kicked due to being offline. */
|
||||
unsigned long resched_ipi; /* Sent a resched IPI. */
|
||||
|
||||
/* 5) state to allow this CPU to force_quiescent_state on others */
|
||||
/* 5) For future __rcu_pending statistics. */
|
||||
long n_rcu_pending; /* rcu_pending() calls since boot. */
|
||||
long n_rcu_pending_force_qs; /* when to force quiescent states. */
|
||||
|
||||
int cpu;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ struct reiserfs_journal {
|
|||
atomic_t j_wcount; /* count of writers for current commit */
|
||||
unsigned long j_bcount; /* batch count. allows turning X transactions into 1 */
|
||||
unsigned long j_first_unflushed_offset; /* first unflushed transactions offset */
|
||||
unsigned long j_last_flush_trans_id; /* last fully flushed journal timestamp */
|
||||
unsigned j_last_flush_trans_id; /* last fully flushed journal timestamp */
|
||||
struct buffer_head *j_header_bh;
|
||||
|
||||
time_t j_trans_start_time; /* time this transaction started */
|
||||
|
|
|
|||
13
include/linux/rotary_encoder.h
Normal file
13
include/linux/rotary_encoder.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef __ROTARY_ENCODER_H__
|
||||
#define __ROTARY_ENCODER_H__
|
||||
|
||||
struct rotary_encoder_platform_data {
|
||||
unsigned int steps;
|
||||
unsigned int axis;
|
||||
unsigned int gpio_a;
|
||||
unsigned int gpio_b;
|
||||
unsigned int inverted_a;
|
||||
unsigned int inverted_b;
|
||||
};
|
||||
|
||||
#endif /* __ROTARY_ENCODER_H__ */
|
||||
|
|
@ -205,7 +205,8 @@ extern unsigned long long time_sync_thresh;
|
|||
#define task_is_stopped_or_traced(task) \
|
||||
((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
|
||||
#define task_contributes_to_load(task) \
|
||||
((task->state & TASK_UNINTERRUPTIBLE) != 0)
|
||||
((task->state & TASK_UNINTERRUPTIBLE) != 0 && \
|
||||
(task->flags & PF_FROZEN) == 0)
|
||||
|
||||
#define __set_task_state(tsk, state_value) \
|
||||
do { (tsk)->state = (state_value); } while (0)
|
||||
|
|
@ -300,17 +301,11 @@ extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write,
|
|||
struct file *filp, void __user *buffer,
|
||||
size_t *lenp, loff_t *ppos);
|
||||
extern unsigned int softlockup_panic;
|
||||
extern unsigned long sysctl_hung_task_check_count;
|
||||
extern unsigned long sysctl_hung_task_timeout_secs;
|
||||
extern unsigned long sysctl_hung_task_warnings;
|
||||
extern int softlockup_thresh;
|
||||
#else
|
||||
static inline void softlockup_tick(void)
|
||||
{
|
||||
}
|
||||
static inline void spawn_softlockup_task(void)
|
||||
{
|
||||
}
|
||||
static inline void touch_softlockup_watchdog(void)
|
||||
{
|
||||
}
|
||||
|
|
@ -319,6 +314,15 @@ static inline void touch_all_softlockup_watchdogs(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DETECT_HUNG_TASK
|
||||
extern unsigned int sysctl_hung_task_panic;
|
||||
extern unsigned long sysctl_hung_task_check_count;
|
||||
extern unsigned long sysctl_hung_task_timeout_secs;
|
||||
extern unsigned long sysctl_hung_task_warnings;
|
||||
extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
|
||||
struct file *filp, void __user *buffer,
|
||||
size_t *lenp, loff_t *ppos);
|
||||
#endif
|
||||
|
||||
/* Attach to any functions which should be ignored in wchan output. */
|
||||
#define __sched __attribute__((__section__(".sched.text")))
|
||||
|
|
@ -1248,9 +1252,8 @@ struct task_struct {
|
|||
/* ipc stuff */
|
||||
struct sysv_sem sysvsem;
|
||||
#endif
|
||||
#ifdef CONFIG_DETECT_SOFTLOCKUP
|
||||
#ifdef CONFIG_DETECT_HUNG_TASK
|
||||
/* hung task detection */
|
||||
unsigned long last_switch_timestamp;
|
||||
unsigned long last_switch_count;
|
||||
#endif
|
||||
/* CPU-specific state of this task */
|
||||
|
|
@ -1287,6 +1290,11 @@ struct task_struct {
|
|||
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */
|
||||
spinlock_t alloc_lock;
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
/* IRQ handler threads */
|
||||
struct irqaction *irqaction;
|
||||
#endif
|
||||
|
||||
/* Protection of the PI data structures: */
|
||||
spinlock_t pi_lock;
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ extern long prctl_set_seccomp(unsigned long);
|
|||
|
||||
#else /* CONFIG_SECCOMP */
|
||||
|
||||
#include <linux/errno.h>
|
||||
|
||||
typedef struct { } seccomp_t;
|
||||
|
||||
#define secure_computing(x) do { } while (0)
|
||||
|
|
|
|||
|
|
@ -164,6 +164,9 @@
|
|||
/* NWPSERIAL */
|
||||
#define PORT_NWPSERIAL 85
|
||||
|
||||
/* MAX3100 */
|
||||
#define PORT_MAX3100 86
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
|
|
|||
52
include/linux/serial_max3100.h
Normal file
52
include/linux/serial_max3100.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
*
|
||||
* Copyright (C) 2007 Christian Pellegrin
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _LINUX_SERIAL_MAX3100_H
|
||||
#define _LINUX_SERIAL_MAX3100_H 1
|
||||
|
||||
|
||||
/**
|
||||
* struct plat_max3100 - MAX3100 SPI UART platform data
|
||||
* @loopback: force MAX3100 in loopback
|
||||
* @crystal: 1 for 3.6864 Mhz, 0 for 1.8432
|
||||
* @max3100_hw_suspend: MAX3100 has a shutdown pin. This is a hook
|
||||
* called on suspend and resume to activate it.
|
||||
* @poll_time: poll time for CTS signal in ms, 0 disables (so no hw
|
||||
* flow ctrl is possible but you have less CPU usage)
|
||||
*
|
||||
* You should use this structure in your machine description to specify
|
||||
* how the MAX3100 is connected. Example:
|
||||
*
|
||||
* static struct plat_max3100 max3100_plat_data = {
|
||||
* .loopback = 0,
|
||||
* .crystal = 0,
|
||||
* .poll_time = 100,
|
||||
* };
|
||||
*
|
||||
* static struct spi_board_info spi_board_info[] = {
|
||||
* {
|
||||
* .modalias = "max3100",
|
||||
* .platform_data = &max3100_plat_data,
|
||||
* .irq = IRQ_EINT12,
|
||||
* .max_speed_hz = 5*1000*1000,
|
||||
* .chip_select = 0,
|
||||
* },
|
||||
* };
|
||||
*
|
||||
**/
|
||||
struct plat_max3100 {
|
||||
int loopback;
|
||||
int crystal;
|
||||
void (*max3100_hw_suspend) (int suspend);
|
||||
int poll_time;
|
||||
};
|
||||
|
||||
#endif
|
||||
24
include/linux/sht15.h
Normal file
24
include/linux/sht15.h
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* sht15.h - support for the SHT15 Temperature and Humidity Sensor
|
||||
*
|
||||
* Copyright (c) 2009 Jonathan Cameron
|
||||
*
|
||||
* Copyright (c) 2007 Wouter Horre
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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.
|
||||
**/
|
||||
struct sht15_platform_data {
|
||||
int gpio_data;
|
||||
int gpio_sck;
|
||||
int supply_mv;
|
||||
};
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ static inline void slow_work_init(struct slow_work *work,
|
|||
}
|
||||
|
||||
/**
|
||||
* slow_work_init - Initialise a very slow work item
|
||||
* vslow_work_init - Initialise a very slow work item
|
||||
* @work: The work item to initialise
|
||||
* @ops: The operations to use to handle the slow work item
|
||||
*
|
||||
|
|
|
|||
35
include/linux/spi/ad7879.h
Normal file
35
include/linux/spi/ad7879.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* linux/spi/ad7879.h */
|
||||
|
||||
/* Touchscreen characteristics vary between boards and models. The
|
||||
* platform_data for the device's "struct device" holds this information.
|
||||
*
|
||||
* It's OK if the min/max values are zero.
|
||||
*/
|
||||
struct ad7879_platform_data {
|
||||
u16 model; /* 7879 */
|
||||
u16 x_plate_ohms;
|
||||
u16 x_min, x_max;
|
||||
u16 y_min, y_max;
|
||||
u16 pressure_min, pressure_max;
|
||||
|
||||
/* [0..255] 0=OFF Starts at 1=550us and goes
|
||||
* all the way to 9.440ms in steps of 35us.
|
||||
*/
|
||||
u8 pen_down_acc_interval;
|
||||
/* [0..15] Starts at 0=128us and goes all the
|
||||
* way to 4.096ms in steps of 128us.
|
||||
*/
|
||||
u8 first_conversion_delay;
|
||||
/* [0..3] 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */
|
||||
u8 acquisition_time;
|
||||
/* [0..3] Average X middle samples 0 = 2, 1 = 4, 2 = 8, 3 = 16 */
|
||||
u8 averaging;
|
||||
/* [0..3] Perform X measurements 0 = OFF,
|
||||
* 1 = 4, 2 = 8, 3 = 16 (median > averaging)
|
||||
*/
|
||||
u8 median;
|
||||
/* 1 = AUX/VBAT/GPIO set to GPIO Output */
|
||||
u8 gpio_output;
|
||||
/* Initial GPIO pin state (valid if gpio_output = 1) */
|
||||
u8 gpio_default;
|
||||
};
|
||||
|
|
@ -51,5 +51,6 @@ struct ads7846_platform_data {
|
|||
void **filter_data);
|
||||
int (*filter) (void *filter_data, int data_idx, int *val);
|
||||
void (*filter_cleanup)(void *filter_data);
|
||||
void (*wait_for_sync)(void);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
|
|||
* SPI slaves, and are numbered from zero to num_chipselects.
|
||||
* each slave has a chipselect signal, but it's common that not
|
||||
* every chipselect is connected to a slave.
|
||||
* @dma_alignment: SPI controller constraint on DMA buffers alignment.
|
||||
* @setup: updates the device mode and clocking records used by a
|
||||
* device's SPI controller; protocol code may call this. This
|
||||
* must fail if an unrecognized or unsupported mode is requested.
|
||||
|
|
@ -239,7 +240,17 @@ struct spi_master {
|
|||
*/
|
||||
u16 num_chipselect;
|
||||
|
||||
/* setup mode and clock, etc (spi driver may call many times) */
|
||||
/* some SPI controllers pose alignment requirements on DMAable
|
||||
* buffers; let protocol drivers know about these requirements.
|
||||
*/
|
||||
u16 dma_alignment;
|
||||
|
||||
/* Setup mode and clock, etc (spi driver may call many times).
|
||||
*
|
||||
* IMPORTANT: this may be called when transfers to another
|
||||
* device are active. DO NOT UPDATE SHARED REGISTERS in ways
|
||||
* which could break those transfers.
|
||||
*/
|
||||
int (*setup)(struct spi_device *spi);
|
||||
|
||||
/* bidirectional bulk transfers
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ struct splice_desc {
|
|||
void *data; /* cookie */
|
||||
} u;
|
||||
loff_t pos; /* file position */
|
||||
size_t num_spliced; /* number of bytes already spliced */
|
||||
bool need_wakeup; /* need to wake up writer */
|
||||
};
|
||||
|
||||
struct partial_page {
|
||||
|
|
@ -66,6 +68,16 @@ extern ssize_t splice_from_pipe(struct pipe_inode_info *, struct file *,
|
|||
splice_actor *);
|
||||
extern ssize_t __splice_from_pipe(struct pipe_inode_info *,
|
||||
struct splice_desc *, splice_actor *);
|
||||
extern int splice_from_pipe_feed(struct pipe_inode_info *, struct splice_desc *,
|
||||
splice_actor *);
|
||||
extern int splice_from_pipe_next(struct pipe_inode_info *,
|
||||
struct splice_desc *);
|
||||
extern void splice_from_pipe_begin(struct splice_desc *);
|
||||
extern void splice_from_pipe_end(struct pipe_inode_info *,
|
||||
struct splice_desc *);
|
||||
extern int pipe_to_file(struct pipe_inode_info *, struct pipe_buffer *,
|
||||
struct splice_desc *);
|
||||
|
||||
extern ssize_t splice_to_pipe(struct pipe_inode_info *,
|
||||
struct splice_pipe_desc *);
|
||||
extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
* converts to "bar".
|
||||
*/
|
||||
|
||||
#define __stringify_1(x) #x
|
||||
#define __stringify(x) __stringify_1(x)
|
||||
#define __stringify_1(x...) #x
|
||||
#define __stringify(x...) __stringify_1(x)
|
||||
|
||||
#endif /* !__LINUX_STRINGIFY_H */
|
||||
|
|
|
|||
|
|
@ -58,10 +58,17 @@ typedef int __bitwise suspend_state_t;
|
|||
* by @begin().
|
||||
* @prepare() is called right after devices have been suspended (ie. the
|
||||
* appropriate .suspend() method has been executed for each device) and
|
||||
* before the nonboot CPUs are disabled (it is executed with IRQs enabled).
|
||||
* This callback is optional. It returns 0 on success or a negative
|
||||
* error code otherwise, in which case the system cannot enter the desired
|
||||
* sleep state (@enter() and @finish() will not be called in that case).
|
||||
* before device drivers' late suspend callbacks are executed. It returns
|
||||
* 0 on success or a negative error code otherwise, in which case the
|
||||
* system cannot enter the desired sleep state (@prepare_late(), @enter(),
|
||||
* @wake(), and @finish() will not be called in that case).
|
||||
*
|
||||
* @prepare_late: Finish preparing the platform for entering the system sleep
|
||||
* state indicated by @begin().
|
||||
* @prepare_late is called before disabling nonboot CPUs and after
|
||||
* device drivers' late suspend callbacks have been executed. It returns
|
||||
* 0 on success or a negative error code otherwise, in which case the
|
||||
* system cannot enter the desired sleep state (@enter() and @wake()).
|
||||
*
|
||||
* @enter: Enter the system sleep state indicated by @begin() or represented by
|
||||
* the argument if @begin() is not implemented.
|
||||
|
|
@ -69,19 +76,26 @@ typedef int __bitwise suspend_state_t;
|
|||
* error code otherwise, in which case the system cannot enter the desired
|
||||
* sleep state.
|
||||
*
|
||||
* @finish: Called when the system has just left a sleep state, right after
|
||||
* the nonboot CPUs have been enabled and before devices are resumed (it is
|
||||
* executed with IRQs enabled).
|
||||
* @wake: Called when the system has just left a sleep state, right after
|
||||
* the nonboot CPUs have been enabled and before device drivers' early
|
||||
* resume callbacks are executed.
|
||||
* This callback is optional, but should be implemented by the platforms
|
||||
* that implement @prepare_late(). If implemented, it is always called
|
||||
* after @enter(), even if @enter() fails.
|
||||
*
|
||||
* @finish: Finish wake-up of the platform.
|
||||
* @finish is called right prior to calling device drivers' regular suspend
|
||||
* callbacks.
|
||||
* This callback is optional, but should be implemented by the platforms
|
||||
* that implement @prepare(). If implemented, it is always called after
|
||||
* @enter() (even if @enter() fails).
|
||||
* @enter() and @wake(), if implemented, even if any of them fails.
|
||||
*
|
||||
* @end: Called by the PM core right after resuming devices, to indicate to
|
||||
* the platform that the system has returned to the working state or
|
||||
* the transition to the sleep state has been aborted.
|
||||
* This callback is optional, but should be implemented by the platforms
|
||||
* that implement @begin(), but platforms implementing @begin() should
|
||||
* also provide a @end() which cleans up transitions aborted before
|
||||
* that implement @begin(). Accordingly, platforms implementing @begin()
|
||||
* should also provide a @end() which cleans up transitions aborted before
|
||||
* @enter().
|
||||
*
|
||||
* @recover: Recover the platform from a suspend failure.
|
||||
|
|
@ -93,7 +107,9 @@ struct platform_suspend_ops {
|
|||
int (*valid)(suspend_state_t state);
|
||||
int (*begin)(suspend_state_t state);
|
||||
int (*prepare)(void);
|
||||
int (*prepare_late)(void);
|
||||
int (*enter)(suspend_state_t state);
|
||||
void (*wake)(void);
|
||||
void (*finish)(void);
|
||||
void (*end)(void);
|
||||
void (*recover)(void);
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ struct old_linux_dirent;
|
|||
#include <asm/signal.h>
|
||||
#include <linux/quota.h>
|
||||
#include <linux/key.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <trace/syscall.h>
|
||||
|
||||
#define __SC_DECL1(t1, a1) t1 a1
|
||||
#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__)
|
||||
|
|
@ -148,7 +148,7 @@ struct old_linux_dirent;
|
|||
asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n" \
|
||||
"\t.globl ." #alias "\n\t.set ." #alias ", ." #name)
|
||||
#else
|
||||
#ifdef CONFIG_ALPHA
|
||||
#if defined(CONFIG_ALPHA) || defined(CONFIG_MIPS)
|
||||
#define SYSCALL_ALIAS(alias, name) \
|
||||
asm ( #alias " = " #name "\n\t.globl " #alias)
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -309,7 +309,8 @@ extern void tty_set_operations(struct tty_driver *driver,
|
|||
extern struct tty_driver *tty_find_polling_driver(char *name, int *line);
|
||||
|
||||
extern void tty_driver_kref_put(struct tty_driver *driver);
|
||||
extern inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)
|
||||
|
||||
static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)
|
||||
{
|
||||
kref_get(&d->kref);
|
||||
return d;
|
||||
|
|
|
|||
|
|
@ -1387,6 +1387,7 @@ extern int usb_string(struct usb_device *dev, int index,
|
|||
extern int usb_clear_halt(struct usb_device *dev, int pipe);
|
||||
extern int usb_reset_configuration(struct usb_device *dev);
|
||||
extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
|
||||
extern void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr);
|
||||
|
||||
/* this request isn't really synchronous, but it belongs with the others */
|
||||
extern int usb_driver_set_configuration(struct usb_device *udev, int config);
|
||||
|
|
@ -1491,14 +1492,6 @@ void usb_sg_wait(struct usb_sg_request *io);
|
|||
#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
|
||||
#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
|
||||
|
||||
/* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */
|
||||
#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1)
|
||||
#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep)))
|
||||
#define usb_settoggle(dev, ep, out, bit) \
|
||||
((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \
|
||||
((bit) << (ep)))
|
||||
|
||||
|
||||
static inline unsigned int __create_pipe(struct usb_device *dev,
|
||||
unsigned int endpoint)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
/**
|
||||
* usb_serial_port: structure for the specific ports of a device.
|
||||
* @serial: pointer back to the struct usb_serial owner of this port.
|
||||
* @tty: pointer to the corresponding tty for this port.
|
||||
* @port: pointer to the corresponding tty_port for this port.
|
||||
* @lock: spinlock to grab when updating portions of this structure.
|
||||
* @mutex: mutex used to synchronize serial_open() and serial_close()
|
||||
* access for this port.
|
||||
|
|
@ -44,19 +44,22 @@
|
|||
* @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe
|
||||
* for this port.
|
||||
* @bulk_in_buffer: pointer to the bulk in buffer for this port.
|
||||
* @bulk_in_size: the size of the bulk_in_buffer, in bytes.
|
||||
* @read_urb: pointer to the bulk in struct urb for this port.
|
||||
* @bulk_in_endpointAddress: endpoint address for the bulk in pipe for this
|
||||
* port.
|
||||
* @bulk_out_buffer: pointer to the bulk out buffer for this port.
|
||||
* @bulk_out_size: the size of the bulk_out_buffer, in bytes.
|
||||
* @write_urb: pointer to the bulk out struct urb for this port.
|
||||
* @write_urb_busy: port`s writing status
|
||||
* @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this
|
||||
* port.
|
||||
* @write_wait: a wait_queue_head_t used by the port.
|
||||
* @work: work queue entry for the line discipline waking up.
|
||||
* @open_count: number of times this port has been opened.
|
||||
* @throttled: nonzero if the read urb is inactive to throttle the device
|
||||
* @throttle_req: nonzero if the tty wants to throttle us
|
||||
* @console: attached usb serial console
|
||||
* @dev: pointer to the serial device
|
||||
*
|
||||
* This structure is used by the usb-serial core and drivers for the specific
|
||||
* ports of a device.
|
||||
|
|
|
|||
|
|
@ -737,6 +737,11 @@ struct v4l2_input {
|
|||
#define V4L2_IN_ST_NO_SIGNAL 0x00000002
|
||||
#define V4L2_IN_ST_NO_COLOR 0x00000004
|
||||
|
||||
/* field 'status' - sensor orientation */
|
||||
/* If sensor is mounted upside down set both bits */
|
||||
#define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */
|
||||
#define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */
|
||||
|
||||
/* field 'status' - analog */
|
||||
#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
|
||||
#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
|
||||
|
|
|
|||
|
|
@ -168,6 +168,8 @@ void writeback_set_ratelimit(void);
|
|||
/* pdflush.c */
|
||||
extern int nr_pdflush_threads; /* Global so it can be exported to sysctl
|
||||
read-only. */
|
||||
extern int nr_pdflush_threads_max; /* Global so it can be exported to sysctl */
|
||||
extern int nr_pdflush_threads_min; /* Global so it can be exported to sysctl */
|
||||
|
||||
|
||||
#endif /* WRITEBACK_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue