Merge branch 'upstream'
This commit is contained in:
commit
0825788ff2
5476 changed files with 318141 additions and 155299 deletions
|
@ -94,26 +94,27 @@ struct kiocb {
|
|||
ssize_t (*ki_retry)(struct kiocb *);
|
||||
void (*ki_dtor)(struct kiocb *);
|
||||
|
||||
struct list_head ki_list; /* the aio core uses this
|
||||
* for cancellation */
|
||||
|
||||
union {
|
||||
void __user *user;
|
||||
struct task_struct *tsk;
|
||||
} ki_obj;
|
||||
|
||||
__u64 ki_user_data; /* user's data for completion */
|
||||
wait_queue_t ki_wait;
|
||||
loff_t ki_pos;
|
||||
|
||||
void *private;
|
||||
/* State that we remember to be able to restart/retry */
|
||||
unsigned short ki_opcode;
|
||||
size_t ki_nbytes; /* copy of iocb->aio_nbytes */
|
||||
char __user *ki_buf; /* remaining iocb->aio_buf */
|
||||
size_t ki_left; /* remaining bytes */
|
||||
wait_queue_t ki_wait;
|
||||
long ki_retried; /* just for testing */
|
||||
long ki_kicked; /* just for testing */
|
||||
long ki_queued; /* just for testing */
|
||||
|
||||
void *private;
|
||||
struct list_head ki_list; /* the aio core uses this
|
||||
* for cancellation */
|
||||
};
|
||||
|
||||
#define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY)
|
||||
|
@ -126,6 +127,7 @@ struct kiocb {
|
|||
(x)->ki_filp = (filp); \
|
||||
(x)->ki_ctx = NULL; \
|
||||
(x)->ki_cancel = NULL; \
|
||||
(x)->ki_retry = NULL; \
|
||||
(x)->ki_dtor = NULL; \
|
||||
(x)->ki_obj.tsk = tsk; \
|
||||
(x)->ki_user_data = 0; \
|
||||
|
|
55
include/linux/amba/bus.h
Normal file
55
include/linux/amba/bus.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* linux/include/asm-arm/hardware/amba.h
|
||||
*
|
||||
* Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
|
||||
*
|
||||
* 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 ASMARM_AMBA_H
|
||||
#define ASMARM_AMBA_H
|
||||
|
||||
#define AMBA_NR_IRQS 2
|
||||
|
||||
struct amba_device {
|
||||
struct device dev;
|
||||
struct resource res;
|
||||
u64 dma_mask;
|
||||
unsigned int periphid;
|
||||
unsigned int irq[AMBA_NR_IRQS];
|
||||
};
|
||||
|
||||
struct amba_id {
|
||||
unsigned int id;
|
||||
unsigned int mask;
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct amba_driver {
|
||||
struct device_driver drv;
|
||||
int (*probe)(struct amba_device *, void *);
|
||||
int (*remove)(struct amba_device *);
|
||||
void (*shutdown)(struct amba_device *);
|
||||
int (*suspend)(struct amba_device *, pm_message_t);
|
||||
int (*resume)(struct amba_device *);
|
||||
struct amba_id *id_table;
|
||||
};
|
||||
|
||||
#define amba_get_drvdata(d) dev_get_drvdata(&d->dev)
|
||||
#define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p)
|
||||
|
||||
int amba_driver_register(struct amba_driver *);
|
||||
void amba_driver_unregister(struct amba_driver *);
|
||||
int amba_device_register(struct amba_device *, struct resource *);
|
||||
void amba_device_unregister(struct amba_device *);
|
||||
struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int);
|
||||
int amba_request_regions(struct amba_device *, const char *);
|
||||
void amba_release_regions(struct amba_device *);
|
||||
|
||||
#define amba_config(d) (((d)->periphid >> 24) & 0xff)
|
||||
#define amba_rev(d) (((d)->periphid >> 20) & 0x0f)
|
||||
#define amba_manf(d) (((d)->periphid >> 12) & 0xff)
|
||||
#define amba_part(d) ((d)->periphid & 0xfff)
|
||||
|
||||
#endif
|
271
include/linux/amba/clcd.h
Normal file
271
include/linux/amba/clcd.h
Normal file
|
@ -0,0 +1,271 @@
|
|||
/*
|
||||
* linux/include/asm-arm/hardware/amba_clcd.h -- Integrator LCD panel.
|
||||
*
|
||||
* David A Rusling
|
||||
*
|
||||
* Copyright (C) 2001 ARM Limited
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#include <linux/config.h>
|
||||
#include <linux/fb.h>
|
||||
|
||||
/*
|
||||
* CLCD Controller Internal Register addresses
|
||||
*/
|
||||
#define CLCD_TIM0 0x00000000
|
||||
#define CLCD_TIM1 0x00000004
|
||||
#define CLCD_TIM2 0x00000008
|
||||
#define CLCD_TIM3 0x0000000c
|
||||
#define CLCD_UBAS 0x00000010
|
||||
#define CLCD_LBAS 0x00000014
|
||||
|
||||
#if !defined(CONFIG_ARCH_VERSATILE) && !defined(CONFIG_ARCH_REALVIEW)
|
||||
#define CLCD_IENB 0x00000018
|
||||
#define CLCD_CNTL 0x0000001c
|
||||
#else
|
||||
/*
|
||||
* Someone rearranged these two registers on the Versatile
|
||||
* platform...
|
||||
*/
|
||||
#define CLCD_IENB 0x0000001c
|
||||
#define CLCD_CNTL 0x00000018
|
||||
#endif
|
||||
|
||||
#define CLCD_STAT 0x00000020
|
||||
#define CLCD_INTR 0x00000024
|
||||
#define CLCD_UCUR 0x00000028
|
||||
#define CLCD_LCUR 0x0000002C
|
||||
#define CLCD_PALL 0x00000200
|
||||
#define CLCD_PALETTE 0x00000200
|
||||
|
||||
#define TIM2_CLKSEL (1 << 5)
|
||||
#define TIM2_IVS (1 << 11)
|
||||
#define TIM2_IHS (1 << 12)
|
||||
#define TIM2_IPC (1 << 13)
|
||||
#define TIM2_IOE (1 << 14)
|
||||
#define TIM2_BCD (1 << 26)
|
||||
|
||||
#define CNTL_LCDEN (1 << 0)
|
||||
#define CNTL_LCDBPP1 (0 << 1)
|
||||
#define CNTL_LCDBPP2 (1 << 1)
|
||||
#define CNTL_LCDBPP4 (2 << 1)
|
||||
#define CNTL_LCDBPP8 (3 << 1)
|
||||
#define CNTL_LCDBPP16 (4 << 1)
|
||||
#define CNTL_LCDBPP24 (5 << 1)
|
||||
#define CNTL_LCDBW (1 << 4)
|
||||
#define CNTL_LCDTFT (1 << 5)
|
||||
#define CNTL_LCDMONO8 (1 << 6)
|
||||
#define CNTL_LCDDUAL (1 << 7)
|
||||
#define CNTL_BGR (1 << 8)
|
||||
#define CNTL_BEBO (1 << 9)
|
||||
#define CNTL_BEPO (1 << 10)
|
||||
#define CNTL_LCDPWR (1 << 11)
|
||||
#define CNTL_LCDVCOMP(x) ((x) << 12)
|
||||
#define CNTL_LDMAFIFOTIME (1 << 15)
|
||||
#define CNTL_WATERMARK (1 << 16)
|
||||
|
||||
struct clcd_panel {
|
||||
struct fb_videomode mode;
|
||||
signed short width; /* width in mm */
|
||||
signed short height; /* height in mm */
|
||||
u32 tim2;
|
||||
u32 tim3;
|
||||
u32 cntl;
|
||||
unsigned int bpp:8,
|
||||
fixedtimings:1,
|
||||
grayscale:1;
|
||||
unsigned int connector;
|
||||
};
|
||||
|
||||
struct clcd_regs {
|
||||
u32 tim0;
|
||||
u32 tim1;
|
||||
u32 tim2;
|
||||
u32 tim3;
|
||||
u32 cntl;
|
||||
unsigned long pixclock;
|
||||
};
|
||||
|
||||
struct clcd_fb;
|
||||
|
||||
/*
|
||||
* the board-type specific routines
|
||||
*/
|
||||
struct clcd_board {
|
||||
const char *name;
|
||||
|
||||
/*
|
||||
* Optional. Check whether the var structure is acceptable
|
||||
* for this display.
|
||||
*/
|
||||
int (*check)(struct clcd_fb *fb, struct fb_var_screeninfo *var);
|
||||
|
||||
/*
|
||||
* Compulsary. Decode fb->fb.var into regs->*. In the case of
|
||||
* fixed timing, set regs->* to the register values required.
|
||||
*/
|
||||
void (*decode)(struct clcd_fb *fb, struct clcd_regs *regs);
|
||||
|
||||
/*
|
||||
* Optional. Disable any extra display hardware.
|
||||
*/
|
||||
void (*disable)(struct clcd_fb *);
|
||||
|
||||
/*
|
||||
* Optional. Enable any extra display hardware.
|
||||
*/
|
||||
void (*enable)(struct clcd_fb *);
|
||||
|
||||
/*
|
||||
* Setup platform specific parts of CLCD driver
|
||||
*/
|
||||
int (*setup)(struct clcd_fb *);
|
||||
|
||||
/*
|
||||
* mmap the framebuffer memory
|
||||
*/
|
||||
int (*mmap)(struct clcd_fb *, struct vm_area_struct *);
|
||||
|
||||
/*
|
||||
* Remove platform specific parts of CLCD driver
|
||||
*/
|
||||
void (*remove)(struct clcd_fb *);
|
||||
};
|
||||
|
||||
struct amba_device;
|
||||
struct clk;
|
||||
|
||||
/* this data structure describes each frame buffer device we find */
|
||||
struct clcd_fb {
|
||||
struct fb_info fb;
|
||||
struct amba_device *dev;
|
||||
struct clk *clk;
|
||||
struct clcd_panel *panel;
|
||||
struct clcd_board *board;
|
||||
void *board_data;
|
||||
void __iomem *regs;
|
||||
u32 clcd_cntl;
|
||||
u32 cmap[16];
|
||||
};
|
||||
|
||||
static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||
{
|
||||
u32 val, cpl;
|
||||
|
||||
/*
|
||||
* Program the CLCD controller registers and start the CLCD
|
||||
*/
|
||||
val = ((fb->fb.var.xres / 16) - 1) << 2;
|
||||
val |= (fb->fb.var.hsync_len - 1) << 8;
|
||||
val |= (fb->fb.var.right_margin - 1) << 16;
|
||||
val |= (fb->fb.var.left_margin - 1) << 24;
|
||||
regs->tim0 = val;
|
||||
|
||||
val = fb->fb.var.yres;
|
||||
if (fb->panel->cntl & CNTL_LCDDUAL)
|
||||
val /= 2;
|
||||
val -= 1;
|
||||
val |= (fb->fb.var.vsync_len - 1) << 10;
|
||||
val |= fb->fb.var.lower_margin << 16;
|
||||
val |= fb->fb.var.upper_margin << 24;
|
||||
regs->tim1 = val;
|
||||
|
||||
val = fb->panel->tim2;
|
||||
val |= fb->fb.var.sync & FB_SYNC_HOR_HIGH_ACT ? 0 : TIM2_IHS;
|
||||
val |= fb->fb.var.sync & FB_SYNC_VERT_HIGH_ACT ? 0 : TIM2_IVS;
|
||||
|
||||
cpl = fb->fb.var.xres_virtual;
|
||||
if (fb->panel->cntl & CNTL_LCDTFT) /* TFT */
|
||||
/* / 1 */;
|
||||
else if (!fb->fb.var.grayscale) /* STN color */
|
||||
cpl = cpl * 8 / 3;
|
||||
else if (fb->panel->cntl & CNTL_LCDMONO8) /* STN monochrome, 8bit */
|
||||
cpl /= 8;
|
||||
else /* STN monochrome, 4bit */
|
||||
cpl /= 4;
|
||||
|
||||
regs->tim2 = val | ((cpl - 1) << 16);
|
||||
|
||||
regs->tim3 = fb->panel->tim3;
|
||||
|
||||
val = fb->panel->cntl;
|
||||
if (fb->fb.var.grayscale)
|
||||
val |= CNTL_LCDBW;
|
||||
|
||||
switch (fb->fb.var.bits_per_pixel) {
|
||||
case 1:
|
||||
val |= CNTL_LCDBPP1;
|
||||
break;
|
||||
case 2:
|
||||
val |= CNTL_LCDBPP2;
|
||||
break;
|
||||
case 4:
|
||||
val |= CNTL_LCDBPP4;
|
||||
break;
|
||||
case 8:
|
||||
val |= CNTL_LCDBPP8;
|
||||
break;
|
||||
case 16:
|
||||
val |= CNTL_LCDBPP16;
|
||||
break;
|
||||
case 32:
|
||||
val |= CNTL_LCDBPP24;
|
||||
break;
|
||||
}
|
||||
|
||||
regs->cntl = val;
|
||||
regs->pixclock = fb->fb.var.pixclock;
|
||||
}
|
||||
|
||||
static inline int clcdfb_check(struct clcd_fb *fb, struct fb_var_screeninfo *var)
|
||||
{
|
||||
var->xres_virtual = var->xres = (var->xres + 15) & ~15;
|
||||
var->yres_virtual = var->yres = (var->yres + 1) & ~1;
|
||||
|
||||
#define CHECK(e,l,h) (var->e < l || var->e > h)
|
||||
if (CHECK(right_margin, (5+1), 256) || /* back porch */
|
||||
CHECK(left_margin, (5+1), 256) || /* front porch */
|
||||
CHECK(hsync_len, (5+1), 256) ||
|
||||
var->xres > 4096 ||
|
||||
var->lower_margin > 255 || /* back porch */
|
||||
var->upper_margin > 255 || /* front porch */
|
||||
var->vsync_len > 32 ||
|
||||
var->yres > 1024)
|
||||
return -EINVAL;
|
||||
#undef CHECK
|
||||
|
||||
/* single panel mode: PCD = max(PCD, 1) */
|
||||
/* dual panel mode: PCD = max(PCD, 5) */
|
||||
|
||||
/*
|
||||
* You can't change the grayscale setting, and
|
||||
* we can only do non-interlaced video.
|
||||
*/
|
||||
if (var->grayscale != fb->fb.var.grayscale ||
|
||||
(var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
|
||||
return -EINVAL;
|
||||
|
||||
#define CHECK(e) (var->e != fb->fb.var.e)
|
||||
if (fb->panel->fixedtimings &&
|
||||
(CHECK(xres) ||
|
||||
CHECK(yres) ||
|
||||
CHECK(bits_per_pixel) ||
|
||||
CHECK(pixclock) ||
|
||||
CHECK(left_margin) ||
|
||||
CHECK(right_margin) ||
|
||||
CHECK(upper_margin) ||
|
||||
CHECK(lower_margin) ||
|
||||
CHECK(hsync_len) ||
|
||||
CHECK(vsync_len) ||
|
||||
CHECK(sync)))
|
||||
return -EINVAL;
|
||||
#undef CHECK
|
||||
|
||||
var->nonstd = 0;
|
||||
var->accel_flags = 0;
|
||||
|
||||
return 0;
|
||||
}
|
92
include/linux/amba/kmi.h
Normal file
92
include/linux/amba/kmi.h
Normal file
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
* linux/include/asm-arm/hardware/amba_kmi.h
|
||||
*
|
||||
* Internal header file for AMBA KMI ports
|
||||
*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd.
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* ---------------------------------------------------------------------------
|
||||
* From ARM PrimeCell(tm) PS2 Keyboard/Mouse Interface (PL050) Technical
|
||||
* Reference Manual - ARM DDI 0143B - see http://www.arm.com/
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef ASM_ARM_HARDWARE_AMBA_KMI_H
|
||||
#define ASM_ARM_HARDWARE_AMBA_KMI_H
|
||||
|
||||
/*
|
||||
* KMI control register:
|
||||
* KMICR_TYPE 0 = PS2/AT mode, 1 = No line control bit mode
|
||||
* KMICR_RXINTREN 1 = enable RX interrupts
|
||||
* KMICR_TXINTREN 1 = enable TX interrupts
|
||||
* KMICR_EN 1 = enable KMI
|
||||
* KMICR_FD 1 = force KMI data low
|
||||
* KMICR_FC 1 = force KMI clock low
|
||||
*/
|
||||
#define KMICR (KMI_BASE + 0x00)
|
||||
#define KMICR_TYPE (1 << 5)
|
||||
#define KMICR_RXINTREN (1 << 4)
|
||||
#define KMICR_TXINTREN (1 << 3)
|
||||
#define KMICR_EN (1 << 2)
|
||||
#define KMICR_FD (1 << 1)
|
||||
#define KMICR_FC (1 << 0)
|
||||
|
||||
/*
|
||||
* KMI status register:
|
||||
* KMISTAT_TXEMPTY 1 = transmitter register empty
|
||||
* KMISTAT_TXBUSY 1 = currently sending data
|
||||
* KMISTAT_RXFULL 1 = receiver register ready to be read
|
||||
* KMISTAT_RXBUSY 1 = currently receiving data
|
||||
* KMISTAT_RXPARITY parity of last databyte received
|
||||
* KMISTAT_IC current level of KMI clock input
|
||||
* KMISTAT_ID current level of KMI data input
|
||||
*/
|
||||
#define KMISTAT (KMI_BASE + 0x04)
|
||||
#define KMISTAT_TXEMPTY (1 << 6)
|
||||
#define KMISTAT_TXBUSY (1 << 5)
|
||||
#define KMISTAT_RXFULL (1 << 4)
|
||||
#define KMISTAT_RXBUSY (1 << 3)
|
||||
#define KMISTAT_RXPARITY (1 << 2)
|
||||
#define KMISTAT_IC (1 << 1)
|
||||
#define KMISTAT_ID (1 << 0)
|
||||
|
||||
/*
|
||||
* KMI data register
|
||||
*/
|
||||
#define KMIDATA (KMI_BASE + 0x08)
|
||||
|
||||
/*
|
||||
* KMI clock divisor: to generate 8MHz internal clock
|
||||
* div = (ref / 8MHz) - 1; 0 <= div <= 15
|
||||
*/
|
||||
#define KMICLKDIV (KMI_BASE + 0x0c)
|
||||
|
||||
/*
|
||||
* KMI interrupt register:
|
||||
* KMIIR_TXINTR 1 = transmit interrupt asserted
|
||||
* KMIIR_RXINTR 1 = receive interrupt asserted
|
||||
*/
|
||||
#define KMIIR (KMI_BASE + 0x10)
|
||||
#define KMIIR_TXINTR (1 << 1)
|
||||
#define KMIIR_RXINTR (1 << 0)
|
||||
|
||||
/*
|
||||
* The size of the KMI primecell
|
||||
*/
|
||||
#define KMI_SIZE (0x100)
|
||||
|
||||
#endif
|
161
include/linux/amba/serial.h
Normal file
161
include/linux/amba/serial.h
Normal file
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* linux/include/asm-arm/hardware/serial_amba.h
|
||||
*
|
||||
* Internal header file for AMBA serial ports
|
||||
*
|
||||
* Copyright (C) ARM Limited
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd.
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef ASM_ARM_HARDWARE_SERIAL_AMBA_H
|
||||
#define ASM_ARM_HARDWARE_SERIAL_AMBA_H
|
||||
|
||||
/* -------------------------------------------------------------------------------
|
||||
* From AMBA UART (PL010) Block Specification
|
||||
* -------------------------------------------------------------------------------
|
||||
* UART Register Offsets.
|
||||
*/
|
||||
#define UART01x_DR 0x00 /* Data read or written from the interface. */
|
||||
#define UART01x_RSR 0x04 /* Receive status register (Read). */
|
||||
#define UART01x_ECR 0x04 /* Error clear register (Write). */
|
||||
#define UART010_LCRH 0x08 /* Line control register, high byte. */
|
||||
#define UART010_LCRM 0x0C /* Line control register, middle byte. */
|
||||
#define UART010_LCRL 0x10 /* Line control register, low byte. */
|
||||
#define UART010_CR 0x14 /* Control register. */
|
||||
#define UART01x_FR 0x18 /* Flag register (Read only). */
|
||||
#define UART010_IIR 0x1C /* Interrupt indentification register (Read). */
|
||||
#define UART010_ICR 0x1C /* Interrupt clear register (Write). */
|
||||
#define UART01x_ILPR 0x20 /* IrDA low power counter register. */
|
||||
#define UART011_IBRD 0x24 /* Integer baud rate divisor register. */
|
||||
#define UART011_FBRD 0x28 /* Fractional baud rate divisor register. */
|
||||
#define UART011_LCRH 0x2c /* Line control register. */
|
||||
#define UART011_CR 0x30 /* Control register. */
|
||||
#define UART011_IFLS 0x34 /* Interrupt fifo level select. */
|
||||
#define UART011_IMSC 0x38 /* Interrupt mask. */
|
||||
#define UART011_RIS 0x3c /* Raw interrupt status. */
|
||||
#define UART011_MIS 0x40 /* Masked interrupt status. */
|
||||
#define UART011_ICR 0x44 /* Interrupt clear register. */
|
||||
#define UART011_DMACR 0x48 /* DMA control register. */
|
||||
|
||||
#define UART011_DR_OE (1 << 11)
|
||||
#define UART011_DR_BE (1 << 10)
|
||||
#define UART011_DR_PE (1 << 9)
|
||||
#define UART011_DR_FE (1 << 8)
|
||||
|
||||
#define UART01x_RSR_OE 0x08
|
||||
#define UART01x_RSR_BE 0x04
|
||||
#define UART01x_RSR_PE 0x02
|
||||
#define UART01x_RSR_FE 0x01
|
||||
|
||||
#define UART011_FR_RI 0x100
|
||||
#define UART011_FR_TXFE 0x080
|
||||
#define UART011_FR_RXFF 0x040
|
||||
#define UART01x_FR_TXFF 0x020
|
||||
#define UART01x_FR_RXFE 0x010
|
||||
#define UART01x_FR_BUSY 0x008
|
||||
#define UART01x_FR_DCD 0x004
|
||||
#define UART01x_FR_DSR 0x002
|
||||
#define UART01x_FR_CTS 0x001
|
||||
#define UART01x_FR_TMSK (UART01x_FR_TXFF + UART01x_FR_BUSY)
|
||||
|
||||
#define UART011_CR_CTSEN 0x8000 /* CTS hardware flow control */
|
||||
#define UART011_CR_RTSEN 0x4000 /* RTS hardware flow control */
|
||||
#define UART011_CR_OUT2 0x2000 /* OUT2 */
|
||||
#define UART011_CR_OUT1 0x1000 /* OUT1 */
|
||||
#define UART011_CR_RTS 0x0800 /* RTS */
|
||||
#define UART011_CR_DTR 0x0400 /* DTR */
|
||||
#define UART011_CR_RXE 0x0200 /* receive enable */
|
||||
#define UART011_CR_TXE 0x0100 /* transmit enable */
|
||||
#define UART011_CR_LBE 0x0080 /* loopback enable */
|
||||
#define UART010_CR_RTIE 0x0040
|
||||
#define UART010_CR_TIE 0x0020
|
||||
#define UART010_CR_RIE 0x0010
|
||||
#define UART010_CR_MSIE 0x0008
|
||||
#define UART01x_CR_IIRLP 0x0004 /* SIR low power mode */
|
||||
#define UART01x_CR_SIREN 0x0002 /* SIR enable */
|
||||
#define UART01x_CR_UARTEN 0x0001 /* UART enable */
|
||||
|
||||
#define UART011_LCRH_SPS 0x80
|
||||
#define UART01x_LCRH_WLEN_8 0x60
|
||||
#define UART01x_LCRH_WLEN_7 0x40
|
||||
#define UART01x_LCRH_WLEN_6 0x20
|
||||
#define UART01x_LCRH_WLEN_5 0x00
|
||||
#define UART01x_LCRH_FEN 0x10
|
||||
#define UART01x_LCRH_STP2 0x08
|
||||
#define UART01x_LCRH_EPS 0x04
|
||||
#define UART01x_LCRH_PEN 0x02
|
||||
#define UART01x_LCRH_BRK 0x01
|
||||
|
||||
#define UART010_IIR_RTIS 0x08
|
||||
#define UART010_IIR_TIS 0x04
|
||||
#define UART010_IIR_RIS 0x02
|
||||
#define UART010_IIR_MIS 0x01
|
||||
|
||||
#define UART011_IFLS_RX1_8 (0 << 3)
|
||||
#define UART011_IFLS_RX2_8 (1 << 3)
|
||||
#define UART011_IFLS_RX4_8 (2 << 3)
|
||||
#define UART011_IFLS_RX6_8 (3 << 3)
|
||||
#define UART011_IFLS_RX7_8 (4 << 3)
|
||||
#define UART011_IFLS_TX1_8 (0 << 0)
|
||||
#define UART011_IFLS_TX2_8 (1 << 0)
|
||||
#define UART011_IFLS_TX4_8 (2 << 0)
|
||||
#define UART011_IFLS_TX6_8 (3 << 0)
|
||||
#define UART011_IFLS_TX7_8 (4 << 0)
|
||||
|
||||
#define UART011_OEIM (1 << 10) /* overrun error interrupt mask */
|
||||
#define UART011_BEIM (1 << 9) /* break error interrupt mask */
|
||||
#define UART011_PEIM (1 << 8) /* parity error interrupt mask */
|
||||
#define UART011_FEIM (1 << 7) /* framing error interrupt mask */
|
||||
#define UART011_RTIM (1 << 6) /* receive timeout interrupt mask */
|
||||
#define UART011_TXIM (1 << 5) /* transmit interrupt mask */
|
||||
#define UART011_RXIM (1 << 4) /* receive interrupt mask */
|
||||
#define UART011_DSRMIM (1 << 3) /* DSR interrupt mask */
|
||||
#define UART011_DCDMIM (1 << 2) /* DCD interrupt mask */
|
||||
#define UART011_CTSMIM (1 << 1) /* CTS interrupt mask */
|
||||
#define UART011_RIMIM (1 << 0) /* RI interrupt mask */
|
||||
|
||||
#define UART011_OEIS (1 << 10) /* overrun error interrupt status */
|
||||
#define UART011_BEIS (1 << 9) /* break error interrupt status */
|
||||
#define UART011_PEIS (1 << 8) /* parity error interrupt status */
|
||||
#define UART011_FEIS (1 << 7) /* framing error interrupt status */
|
||||
#define UART011_RTIS (1 << 6) /* receive timeout interrupt status */
|
||||
#define UART011_TXIS (1 << 5) /* transmit interrupt status */
|
||||
#define UART011_RXIS (1 << 4) /* receive interrupt status */
|
||||
#define UART011_DSRMIS (1 << 3) /* DSR interrupt status */
|
||||
#define UART011_DCDMIS (1 << 2) /* DCD interrupt status */
|
||||
#define UART011_CTSMIS (1 << 1) /* CTS interrupt status */
|
||||
#define UART011_RIMIS (1 << 0) /* RI interrupt status */
|
||||
|
||||
#define UART011_OEIC (1 << 10) /* overrun error interrupt clear */
|
||||
#define UART011_BEIC (1 << 9) /* break error interrupt clear */
|
||||
#define UART011_PEIC (1 << 8) /* parity error interrupt clear */
|
||||
#define UART011_FEIC (1 << 7) /* framing error interrupt clear */
|
||||
#define UART011_RTIC (1 << 6) /* receive timeout interrupt clear */
|
||||
#define UART011_TXIC (1 << 5) /* transmit interrupt clear */
|
||||
#define UART011_RXIC (1 << 4) /* receive interrupt clear */
|
||||
#define UART011_DSRMIC (1 << 3) /* DSR interrupt clear */
|
||||
#define UART011_DCDMIC (1 << 2) /* DCD interrupt clear */
|
||||
#define UART011_CTSMIC (1 << 1) /* CTS interrupt clear */
|
||||
#define UART011_RIMIC (1 << 0) /* RI interrupt clear */
|
||||
|
||||
#define UART011_DMAONERR (1 << 2) /* disable dma on error */
|
||||
#define UART011_TXDMAE (1 << 1) /* enable transmit dma */
|
||||
#define UART011_RXDMAE (1 << 0) /* enable receive dma */
|
||||
|
||||
#define UART01x_RSR_ANY (UART01x_RSR_OE|UART01x_RSR_BE|UART01x_RSR_PE|UART01x_RSR_FE)
|
||||
#define UART01x_FR_MODEM_ANY (UART01x_FR_DCD|UART01x_FR_DSR|UART01x_FR_CTS)
|
||||
|
||||
#endif
|
|
@ -129,6 +129,7 @@ enum {
|
|||
ATA_CMD_READ_EXT = 0x25,
|
||||
ATA_CMD_WRITE = 0xCA,
|
||||
ATA_CMD_WRITE_EXT = 0x35,
|
||||
ATA_CMD_WRITE_FUA_EXT = 0x3D,
|
||||
ATA_CMD_PIO_READ = 0x20,
|
||||
ATA_CMD_PIO_READ_EXT = 0x24,
|
||||
ATA_CMD_PIO_WRITE = 0x30,
|
||||
|
@ -137,10 +138,13 @@ enum {
|
|||
ATA_CMD_READ_MULTI_EXT = 0x29,
|
||||
ATA_CMD_WRITE_MULTI = 0xC5,
|
||||
ATA_CMD_WRITE_MULTI_EXT = 0x39,
|
||||
ATA_CMD_WRITE_MULTI_FUA_EXT = 0xCE,
|
||||
ATA_CMD_SET_FEATURES = 0xEF,
|
||||
ATA_CMD_PACKET = 0xA0,
|
||||
ATA_CMD_VERIFY = 0x40,
|
||||
ATA_CMD_VERIFY_EXT = 0x42,
|
||||
ATA_CMD_STANDBYNOW1 = 0xE0,
|
||||
ATA_CMD_IDLEIMMEDIATE = 0xE1,
|
||||
ATA_CMD_INIT_DEV_PARAMS = 0x91,
|
||||
|
||||
/* SETFEATURES stuff */
|
||||
|
@ -192,6 +196,7 @@ enum {
|
|||
ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */
|
||||
ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */
|
||||
ATA_TFLAG_LBA = (1 << 4), /* enable LBA */
|
||||
ATA_TFLAG_FUA = (1 << 5), /* enable FUA */
|
||||
};
|
||||
|
||||
enum ata_tf_protocols {
|
||||
|
@ -245,7 +250,8 @@ struct ata_taskfile {
|
|||
#define ata_id_is_sata(id) ((id)[93] == 0)
|
||||
#define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6))
|
||||
#define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5))
|
||||
#define ata_id_has_flush(id) ((id)[83] & (1 << 12))
|
||||
#define ata_id_has_fua(id) ((id)[84] & (1 << 6))
|
||||
#define ata_id_has_flush(id) ((id)[83] & (1 << 12))
|
||||
#define ata_id_has_flush_ext(id) ((id)[83] & (1 << 13))
|
||||
#define ata_id_has_lba48(id) ((id)[83] & (1 << 10))
|
||||
#define ata_id_has_wcache(id) ((id)[82] & (1 << 5))
|
||||
|
|
|
@ -155,15 +155,15 @@ struct elapaarp {
|
|||
#define AARP_REQUEST 1
|
||||
#define AARP_REPLY 2
|
||||
#define AARP_PROBE 3
|
||||
__u8 hw_src[ETH_ALEN] __attribute__ ((packed));
|
||||
__u8 pa_src_zero __attribute__ ((packed));
|
||||
__be16 pa_src_net __attribute__ ((packed));
|
||||
__u8 pa_src_node __attribute__ ((packed));
|
||||
__u8 hw_dst[ETH_ALEN] __attribute__ ((packed));
|
||||
__u8 pa_dst_zero __attribute__ ((packed));
|
||||
__be16 pa_dst_net __attribute__ ((packed));
|
||||
__u8 pa_dst_node __attribute__ ((packed));
|
||||
};
|
||||
__u8 hw_src[ETH_ALEN];
|
||||
__u8 pa_src_zero;
|
||||
__be16 pa_src_net;
|
||||
__u8 pa_src_node;
|
||||
__u8 hw_dst[ETH_ALEN];
|
||||
__u8 pa_dst_zero;
|
||||
__be16 pa_dst_net;
|
||||
__u8 pa_dst_node;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb)
|
||||
{
|
||||
|
|
|
@ -26,6 +26,6 @@
|
|||
|
||||
#define AT_SECURE 23 /* secure mode boolean */
|
||||
|
||||
#define AT_VECTOR_SIZE 42 /* Size of auxiliary table. */
|
||||
#define AT_VECTOR_SIZE 44 /* Size of auxiliary table. */
|
||||
|
||||
#endif /* _LINUX_AUXVEC_H */
|
||||
|
|
|
@ -292,6 +292,8 @@ extern struct bio *bio_clone(struct bio *, gfp_t);
|
|||
extern void bio_init(struct bio *);
|
||||
|
||||
extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
|
||||
extern int bio_add_pc_page(struct request_queue *, struct bio *, struct page *,
|
||||
unsigned int, unsigned int);
|
||||
extern int bio_get_nr_vecs(struct block_device *);
|
||||
extern struct bio *bio_map_user(struct request_queue *, struct block_device *,
|
||||
unsigned long, unsigned int, int);
|
||||
|
|
|
@ -76,6 +76,15 @@ static __inline__ int generic_fls(int x)
|
|||
*/
|
||||
#include <asm/bitops.h>
|
||||
|
||||
|
||||
static inline int generic_fls64(__u64 x)
|
||||
{
|
||||
__u32 h = x >> 32;
|
||||
if (h)
|
||||
return fls(x) + 32;
|
||||
return fls(x);
|
||||
}
|
||||
|
||||
static __inline__ int get_bitmask_order(unsigned int count)
|
||||
{
|
||||
int order;
|
||||
|
|
|
@ -102,7 +102,7 @@ void copy_io_context(struct io_context **pdst, struct io_context **psrc);
|
|||
void swap_io_context(struct io_context **ioc1, struct io_context **ioc2);
|
||||
|
||||
struct request;
|
||||
typedef void (rq_end_io_fn)(struct request *);
|
||||
typedef void (rq_end_io_fn)(struct request *, int);
|
||||
|
||||
struct request_list {
|
||||
int count[2];
|
||||
|
@ -118,9 +118,9 @@ struct request_list {
|
|||
* try to put the fields that are referenced together in the same cacheline
|
||||
*/
|
||||
struct request {
|
||||
struct list_head queuelist; /* looking for ->queue? you must _not_
|
||||
* access it directly, use
|
||||
* blkdev_dequeue_request! */
|
||||
struct list_head queuelist;
|
||||
struct list_head donelist;
|
||||
|
||||
unsigned long flags; /* see REQ_ bits below */
|
||||
|
||||
/* Maintain bio traversal state for part by part I/O submission.
|
||||
|
@ -141,6 +141,7 @@ struct request {
|
|||
struct bio *biotail;
|
||||
|
||||
void *elevator_private;
|
||||
void *completion_data;
|
||||
|
||||
unsigned short ioprio;
|
||||
|
||||
|
@ -184,6 +185,7 @@ struct request {
|
|||
void *sense;
|
||||
|
||||
unsigned int timeout;
|
||||
int retries;
|
||||
|
||||
/*
|
||||
* For Power Management requests
|
||||
|
@ -206,6 +208,7 @@ enum rq_flag_bits {
|
|||
__REQ_SORTED, /* elevator knows about this request */
|
||||
__REQ_SOFTBARRIER, /* may not be passed by ioscheduler */
|
||||
__REQ_HARDBARRIER, /* may not be passed by drive either */
|
||||
__REQ_FUA, /* forced unit access */
|
||||
__REQ_CMD, /* is a regular fs rw request */
|
||||
__REQ_NOMERGE, /* don't touch this for merging */
|
||||
__REQ_STARTED, /* drive already may have started this one */
|
||||
|
@ -229,9 +232,7 @@ enum rq_flag_bits {
|
|||
__REQ_PM_SUSPEND, /* suspend request */
|
||||
__REQ_PM_RESUME, /* resume request */
|
||||
__REQ_PM_SHUTDOWN, /* shutdown request */
|
||||
__REQ_BAR_PREFLUSH, /* barrier pre-flush done */
|
||||
__REQ_BAR_POSTFLUSH, /* barrier post-flush */
|
||||
__REQ_BAR_FLUSH, /* rq is the flush request */
|
||||
__REQ_ORDERED_COLOR, /* is before or after barrier */
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
||||
|
@ -240,6 +241,7 @@ enum rq_flag_bits {
|
|||
#define REQ_SORTED (1 << __REQ_SORTED)
|
||||
#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER)
|
||||
#define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER)
|
||||
#define REQ_FUA (1 << __REQ_FUA)
|
||||
#define REQ_CMD (1 << __REQ_CMD)
|
||||
#define REQ_NOMERGE (1 << __REQ_NOMERGE)
|
||||
#define REQ_STARTED (1 << __REQ_STARTED)
|
||||
|
@ -259,9 +261,7 @@ enum rq_flag_bits {
|
|||
#define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND)
|
||||
#define REQ_PM_RESUME (1 << __REQ_PM_RESUME)
|
||||
#define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN)
|
||||
#define REQ_BAR_PREFLUSH (1 << __REQ_BAR_PREFLUSH)
|
||||
#define REQ_BAR_POSTFLUSH (1 << __REQ_BAR_POSTFLUSH)
|
||||
#define REQ_BAR_FLUSH (1 << __REQ_BAR_FLUSH)
|
||||
#define REQ_ORDERED_COLOR (1 << __REQ_ORDERED_COLOR)
|
||||
|
||||
/*
|
||||
* State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME
|
||||
|
@ -291,8 +291,8 @@ struct bio_vec;
|
|||
typedef int (merge_bvec_fn) (request_queue_t *, struct bio *, struct bio_vec *);
|
||||
typedef void (activity_fn) (void *data, int rw);
|
||||
typedef int (issue_flush_fn) (request_queue_t *, struct gendisk *, sector_t *);
|
||||
typedef int (prepare_flush_fn) (request_queue_t *, struct request *);
|
||||
typedef void (end_flush_fn) (request_queue_t *, struct request *);
|
||||
typedef void (prepare_flush_fn) (request_queue_t *, struct request *);
|
||||
typedef void (softirq_done_fn)(struct request *);
|
||||
|
||||
enum blk_queue_state {
|
||||
Queue_down,
|
||||
|
@ -334,7 +334,7 @@ struct request_queue
|
|||
activity_fn *activity_fn;
|
||||
issue_flush_fn *issue_flush_fn;
|
||||
prepare_flush_fn *prepare_flush_fn;
|
||||
end_flush_fn *end_flush_fn;
|
||||
softirq_done_fn *softirq_done_fn;
|
||||
|
||||
/*
|
||||
* Dispatch queue sorting
|
||||
|
@ -419,14 +419,11 @@ struct request_queue
|
|||
/*
|
||||
* reserved for flush operations
|
||||
*/
|
||||
struct request *flush_rq;
|
||||
unsigned char ordered;
|
||||
};
|
||||
|
||||
enum {
|
||||
QUEUE_ORDERED_NONE,
|
||||
QUEUE_ORDERED_TAG,
|
||||
QUEUE_ORDERED_FLUSH,
|
||||
unsigned int ordered, next_ordered, ordseq;
|
||||
int orderr, ordcolor;
|
||||
struct request pre_flush_rq, bar_rq, post_flush_rq;
|
||||
struct request *orig_bar_rq;
|
||||
unsigned int bi_size;
|
||||
};
|
||||
|
||||
#define RQ_INACTIVE (-1)
|
||||
|
@ -444,12 +441,51 @@ enum {
|
|||
#define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */
|
||||
#define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */
|
||||
#define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */
|
||||
#define QUEUE_FLAG_FLUSH 9 /* doing barrier flush sequence */
|
||||
|
||||
enum {
|
||||
/*
|
||||
* Hardbarrier is supported with one of the following methods.
|
||||
*
|
||||
* NONE : hardbarrier unsupported
|
||||
* DRAIN : ordering by draining is enough
|
||||
* DRAIN_FLUSH : ordering by draining w/ pre and post flushes
|
||||
* DRAIN_FUA : ordering by draining w/ pre flush and FUA write
|
||||
* TAG : ordering by tag is enough
|
||||
* TAG_FLUSH : ordering by tag w/ pre and post flushes
|
||||
* TAG_FUA : ordering by tag w/ pre flush and FUA write
|
||||
*/
|
||||
QUEUE_ORDERED_NONE = 0x00,
|
||||
QUEUE_ORDERED_DRAIN = 0x01,
|
||||
QUEUE_ORDERED_TAG = 0x02,
|
||||
|
||||
QUEUE_ORDERED_PREFLUSH = 0x10,
|
||||
QUEUE_ORDERED_POSTFLUSH = 0x20,
|
||||
QUEUE_ORDERED_FUA = 0x40,
|
||||
|
||||
QUEUE_ORDERED_DRAIN_FLUSH = QUEUE_ORDERED_DRAIN |
|
||||
QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_POSTFLUSH,
|
||||
QUEUE_ORDERED_DRAIN_FUA = QUEUE_ORDERED_DRAIN |
|
||||
QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_FUA,
|
||||
QUEUE_ORDERED_TAG_FLUSH = QUEUE_ORDERED_TAG |
|
||||
QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_POSTFLUSH,
|
||||
QUEUE_ORDERED_TAG_FUA = QUEUE_ORDERED_TAG |
|
||||
QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_FUA,
|
||||
|
||||
/*
|
||||
* Ordered operation sequence
|
||||
*/
|
||||
QUEUE_ORDSEQ_STARTED = 0x01, /* flushing in progress */
|
||||
QUEUE_ORDSEQ_DRAIN = 0x02, /* waiting for the queue to be drained */
|
||||
QUEUE_ORDSEQ_PREFLUSH = 0x04, /* pre-flushing in progress */
|
||||
QUEUE_ORDSEQ_BAR = 0x08, /* original barrier req in progress */
|
||||
QUEUE_ORDSEQ_POSTFLUSH = 0x10, /* post-flushing in progress */
|
||||
QUEUE_ORDSEQ_DONE = 0x20,
|
||||
};
|
||||
|
||||
#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags)
|
||||
#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
|
||||
#define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
|
||||
#define blk_queue_flushing(q) test_bit(QUEUE_FLAG_FLUSH, &(q)->queue_flags)
|
||||
#define blk_queue_flushing(q) ((q)->ordseq)
|
||||
|
||||
#define blk_fs_request(rq) ((rq)->flags & REQ_CMD)
|
||||
#define blk_pc_request(rq) ((rq)->flags & REQ_BLOCK_PC)
|
||||
|
@ -465,8 +501,7 @@ enum {
|
|||
|
||||
#define blk_sorted_rq(rq) ((rq)->flags & REQ_SORTED)
|
||||
#define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER)
|
||||
#define blk_barrier_preflush(rq) ((rq)->flags & REQ_BAR_PREFLUSH)
|
||||
#define blk_barrier_postflush(rq) ((rq)->flags & REQ_BAR_POSTFLUSH)
|
||||
#define blk_fua_rq(rq) ((rq)->flags & REQ_FUA)
|
||||
|
||||
#define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist)
|
||||
|
||||
|
@ -558,8 +593,8 @@ extern void blk_unregister_queue(struct gendisk *disk);
|
|||
extern void register_disk(struct gendisk *dev);
|
||||
extern void generic_make_request(struct bio *bio);
|
||||
extern void blk_put_request(struct request *);
|
||||
extern void blk_end_sync_rq(struct request *rq);
|
||||
extern void blk_attempt_remerge(request_queue_t *, struct request *);
|
||||
extern void __blk_put_request(request_queue_t *, struct request *);
|
||||
extern void blk_end_sync_rq(struct request *rq, int error);
|
||||
extern struct request *blk_get_request(request_queue_t *, int, gfp_t);
|
||||
extern void blk_insert_request(request_queue_t *, struct request *, int, void *);
|
||||
extern void blk_requeue_request(request_queue_t *, struct request *);
|
||||
|
@ -579,6 +614,9 @@ extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned
|
|||
extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int);
|
||||
extern int blk_execute_rq(request_queue_t *, struct gendisk *,
|
||||
struct request *, int);
|
||||
extern void blk_execute_rq_nowait(request_queue_t *, struct gendisk *,
|
||||
struct request *, int, rq_end_io_fn *);
|
||||
|
||||
static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
|
||||
{
|
||||
return bdev->bd_disk->queue;
|
||||
|
@ -608,8 +646,19 @@ static inline void blk_run_address_space(struct address_space *mapping)
|
|||
*/
|
||||
extern int end_that_request_first(struct request *, int, int);
|
||||
extern int end_that_request_chunk(struct request *, int, int);
|
||||
extern void end_that_request_last(struct request *);
|
||||
extern void end_that_request_last(struct request *, int);
|
||||
extern void end_request(struct request *req, int uptodate);
|
||||
extern void blk_complete_request(struct request *);
|
||||
|
||||
static inline int rq_all_done(struct request *rq, unsigned int nr_bytes)
|
||||
{
|
||||
if (blk_fs_request(rq))
|
||||
return (nr_bytes >= (rq->hard_nr_sectors << 9));
|
||||
else if (blk_pc_request(rq))
|
||||
return nr_bytes >= rq->data_len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* end_that_request_first/chunk() takes an uptodate argument. we account
|
||||
|
@ -658,12 +707,14 @@ extern void blk_queue_segment_boundary(request_queue_t *, unsigned long);
|
|||
extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn);
|
||||
extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *);
|
||||
extern void blk_queue_dma_alignment(request_queue_t *, int);
|
||||
extern void blk_queue_softirq_done(request_queue_t *, softirq_done_fn *);
|
||||
extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
|
||||
extern void blk_queue_ordered(request_queue_t *, int);
|
||||
extern int blk_queue_ordered(request_queue_t *, unsigned, prepare_flush_fn *);
|
||||
extern void blk_queue_issue_flush_fn(request_queue_t *, issue_flush_fn *);
|
||||
extern struct request *blk_start_pre_flush(request_queue_t *,struct request *);
|
||||
extern int blk_complete_barrier_rq(request_queue_t *, struct request *, int);
|
||||
extern int blk_complete_barrier_rq_locked(request_queue_t *, struct request *, int);
|
||||
extern int blk_do_ordered(request_queue_t *, struct request **);
|
||||
extern unsigned blk_ordered_cur_seq(request_queue_t *);
|
||||
extern unsigned blk_ordered_req_seq(struct request *);
|
||||
extern void blk_ordered_complete_seq(request_queue_t *, unsigned, int);
|
||||
|
||||
extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *);
|
||||
extern void blk_dump_rq_flags(struct request *, char *);
|
||||
|
@ -696,7 +747,8 @@ extern int blkdev_issue_flush(struct block_device *, sector_t *);
|
|||
|
||||
#define MAX_PHYS_SEGMENTS 128
|
||||
#define MAX_HW_SEGMENTS 128
|
||||
#define MAX_SECTORS 255
|
||||
#define SAFE_MAX_SECTORS 255
|
||||
#define BLK_DEF_MAX_SECTORS 1024
|
||||
|
||||
#define MAX_SEGMENT_SIZE 65536
|
||||
|
||||
|
|
|
@ -43,50 +43,38 @@ typedef struct bootmem_data {
|
|||
extern unsigned long __init bootmem_bootmap_pages (unsigned long);
|
||||
extern unsigned long __init init_bootmem (unsigned long addr, unsigned long memend);
|
||||
extern void __init free_bootmem (unsigned long addr, unsigned long size);
|
||||
extern void * __init __alloc_bootmem_limit (unsigned long size, unsigned long align, unsigned long goal, unsigned long limit);
|
||||
extern void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal);
|
||||
extern void * __init __alloc_bootmem_low(unsigned long size,
|
||||
unsigned long align,
|
||||
unsigned long goal);
|
||||
extern void * __init __alloc_bootmem_low_node(pg_data_t *pgdat,
|
||||
unsigned long size,
|
||||
unsigned long align,
|
||||
unsigned long goal);
|
||||
#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
|
||||
extern void __init reserve_bootmem (unsigned long addr, unsigned long size);
|
||||
#define alloc_bootmem(x) \
|
||||
__alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_low(x) \
|
||||
__alloc_bootmem((x), SMP_CACHE_BYTES, 0)
|
||||
__alloc_bootmem_low((x), SMP_CACHE_BYTES, 0)
|
||||
#define alloc_bootmem_pages(x) \
|
||||
__alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_low_pages(x) \
|
||||
__alloc_bootmem((x), PAGE_SIZE, 0)
|
||||
|
||||
#define alloc_bootmem_limit(x, limit) \
|
||||
__alloc_bootmem_limit((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS), (limit))
|
||||
#define alloc_bootmem_low_limit(x, limit) \
|
||||
__alloc_bootmem_limit((x), SMP_CACHE_BYTES, 0, (limit))
|
||||
#define alloc_bootmem_pages_limit(x, limit) \
|
||||
__alloc_bootmem_limit((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS), (limit))
|
||||
#define alloc_bootmem_low_pages_limit(x, limit) \
|
||||
__alloc_bootmem_limit((x), PAGE_SIZE, 0, (limit))
|
||||
|
||||
__alloc_bootmem_low((x), PAGE_SIZE, 0)
|
||||
#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */
|
||||
extern unsigned long __init free_all_bootmem (void);
|
||||
|
||||
extern void * __init __alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsigned long align, unsigned long goal);
|
||||
extern unsigned long __init init_bootmem_node (pg_data_t *pgdat, unsigned long freepfn, unsigned long startpfn, unsigned long endpfn);
|
||||
extern void __init reserve_bootmem_node (pg_data_t *pgdat, unsigned long physaddr, unsigned long size);
|
||||
extern void __init free_bootmem_node (pg_data_t *pgdat, unsigned long addr, unsigned long size);
|
||||
extern unsigned long __init free_all_bootmem_node (pg_data_t *pgdat);
|
||||
extern void * __init __alloc_bootmem_node_limit (pg_data_t *pgdat, unsigned long size, unsigned long align, unsigned long goal, unsigned long limit);
|
||||
#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
|
||||
#define alloc_bootmem_node(pgdat, x) \
|
||||
__alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_pages_node(pgdat, x) \
|
||||
__alloc_bootmem_node((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
|
||||
#define alloc_bootmem_low_pages_node(pgdat, x) \
|
||||
__alloc_bootmem_node((pgdat), (x), PAGE_SIZE, 0)
|
||||
|
||||
#define alloc_bootmem_node_limit(pgdat, x, limit) \
|
||||
__alloc_bootmem_node_limit((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS), (limit))
|
||||
#define alloc_bootmem_pages_node_limit(pgdat, x, limit) \
|
||||
__alloc_bootmem_node_limit((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS), (limit))
|
||||
#define alloc_bootmem_low_pages_node_limit(pgdat, x, limit) \
|
||||
__alloc_bootmem_node_limit((pgdat), (x), PAGE_SIZE, 0, (limit))
|
||||
|
||||
__alloc_bootmem_low_node((pgdat), (x), PAGE_SIZE, 0)
|
||||
#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP
|
||||
|
@ -123,15 +111,5 @@ extern void *__init alloc_large_system_hash(const char *tablename,
|
|||
#endif
|
||||
extern int __initdata hashdist; /* Distribute hashes across NUMA nodes? */
|
||||
|
||||
static inline void *__alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal)
|
||||
{
|
||||
return __alloc_bootmem_limit(size, align, goal, 0);
|
||||
}
|
||||
|
||||
static inline void *__alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsigned long align,
|
||||
unsigned long goal)
|
||||
{
|
||||
return __alloc_bootmem_node_limit(pgdat, size, align, goal, 0);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_BOOTMEM_H */
|
||||
|
|
|
@ -197,7 +197,8 @@ int block_read_full_page(struct page*, get_block_t*);
|
|||
int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*);
|
||||
int cont_prepare_write(struct page*, unsigned, unsigned, get_block_t*,
|
||||
loff_t *);
|
||||
int generic_cont_expand(struct inode *inode, loff_t size) ;
|
||||
int generic_cont_expand(struct inode *inode, loff_t size);
|
||||
int generic_cont_expand_simple(struct inode *inode, loff_t size);
|
||||
int block_commit_write(struct page *page, unsigned from, unsigned to);
|
||||
int block_sync_page(struct page *);
|
||||
sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *);
|
||||
|
|
|
@ -156,7 +156,7 @@ extern __be32 htonl(__u32);
|
|||
extern __u16 ntohs(__be16);
|
||||
extern __be16 htons(__u16);
|
||||
|
||||
#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__)
|
||||
#if defined(__GNUC__) && defined(__OPTIMIZE__)
|
||||
|
||||
#define ___htonl(x) __cpu_to_be32(x)
|
||||
#define ___htons(x) __cpu_to_be16(x)
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
/*
|
||||
* Allow constant folding
|
||||
*/
|
||||
#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__)
|
||||
#if defined(__GNUC__) && defined(__OPTIMIZE__)
|
||||
# define __swab16(x) \
|
||||
(__builtin_constant_p((__u16)(x)) ? \
|
||||
___swab16((x)) : \
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
/*
|
||||
* Allow constant folding
|
||||
*/
|
||||
#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__)
|
||||
#if defined(__GNUC__) && defined(__OPTIMIZE__)
|
||||
# define __swahw32(x) \
|
||||
(__builtin_constant_p((__u32)(x)) ? \
|
||||
___swahw32((x)) : \
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#define SMP_CACHE_BYTES L1_CACHE_BYTES
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_IA64)
|
||||
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
|
||||
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
|
||||
#else
|
||||
#define __read_mostly
|
||||
|
@ -45,12 +45,21 @@
|
|||
#endif /* CONFIG_SMP */
|
||||
#endif
|
||||
|
||||
#if !defined(____cacheline_maxaligned_in_smp)
|
||||
/*
|
||||
* The maximum alignment needed for some critical structures
|
||||
* These could be inter-node cacheline sizes/L3 cacheline
|
||||
* size etc. Define this in asm/cache.h for your arch
|
||||
*/
|
||||
#ifndef INTERNODE_CACHE_SHIFT
|
||||
#define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT
|
||||
#endif
|
||||
|
||||
#if !defined(____cacheline_internodealigned_in_smp)
|
||||
#if defined(CONFIG_SMP)
|
||||
#define ____cacheline_maxaligned_in_smp \
|
||||
__attribute__((__aligned__(1 << (L1_CACHE_SHIFT_MAX))))
|
||||
#define ____cacheline_internodealigned_in_smp \
|
||||
__attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
|
||||
#else
|
||||
#define ____cacheline_maxaligned_in_smp
|
||||
#define ____cacheline_internodealigned_in_smp
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
49
include/linux/calc64.h
Normal file
49
include/linux/calc64.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
#ifndef _LINUX_CALC64_H
|
||||
#define _LINUX_CALC64_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/div64.h>
|
||||
|
||||
/*
|
||||
* This is a generic macro which is used when the architecture
|
||||
* specific div64.h does not provide a optimized one.
|
||||
*
|
||||
* The 64bit dividend is divided by the divisor (data type long), the
|
||||
* result is returned and the remainder stored in the variable
|
||||
* referenced by remainder (data type long *). In contrast to the
|
||||
* do_div macro the dividend is kept intact.
|
||||
*/
|
||||
#ifndef div_long_long_rem
|
||||
#define div_long_long_rem(dividend, divisor, remainder) \
|
||||
do_div_llr((dividend), divisor, remainder)
|
||||
|
||||
static inline unsigned long do_div_llr(const long long dividend,
|
||||
const long divisor, long *remainder)
|
||||
{
|
||||
u64 result = dividend;
|
||||
|
||||
*(remainder) = do_div(result, divisor);
|
||||
return (unsigned long) result;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Sign aware variation of the above. On some architectures a
|
||||
* negative dividend leads to an divide overflow exception, which
|
||||
* is avoided by the sign check.
|
||||
*/
|
||||
static inline long div_long_long_rem_signed(const long long dividend,
|
||||
const long divisor, long *remainder)
|
||||
{
|
||||
long res;
|
||||
|
||||
if (unlikely(dividend < 0)) {
|
||||
res = -div_long_long_rem(-dividend, divisor, remainder);
|
||||
*remainder = -(*remainder);
|
||||
} else
|
||||
res = div_long_long_rem(dividend, divisor, remainder);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -43,6 +43,7 @@ typedef struct __user_cap_data_struct {
|
|||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/current.h>
|
||||
|
||||
/* #define STRICT_CAP_T_TYPECHECKS */
|
||||
|
||||
|
@ -356,6 +357,8 @@ static inline kernel_cap_t cap_invert(kernel_cap_t c)
|
|||
|
||||
#define cap_is_fs_cap(c) (CAP_TO_MASK(c) & CAP_FS_MASK)
|
||||
|
||||
extern int capable(int cap);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* !_LINUX_CAPABILITY_H */
|
||||
|
|
124
include/linux/clk.h
Normal file
124
include/linux/clk.h
Normal file
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
* linux/include/linux/clk.h
|
||||
*
|
||||
* Copyright (C) 2004 ARM Limited.
|
||||
* Written by Deep Blue Solutions Limited.
|
||||
*
|
||||
* 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 ASMARM_CLOCK_H
|
||||
#define ASMARM_CLOCK_H
|
||||
|
||||
struct device;
|
||||
|
||||
/*
|
||||
* The base API.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* struct clk - an machine class defined object / cookie.
|
||||
*/
|
||||
struct clk;
|
||||
|
||||
/**
|
||||
* clk_get - lookup and obtain a reference to a clock producer.
|
||||
* @dev: device for clock "consumer"
|
||||
* @id: clock comsumer ID
|
||||
*
|
||||
* Returns a struct clk corresponding to the clock producer, or
|
||||
* valid IS_ERR() condition containing errno. The implementation
|
||||
* uses @dev and @id to determine the clock consumer, and thereby
|
||||
* the clock producer. (IOW, @id may be identical strings, but
|
||||
* clk_get may return different clock producers depending on @dev.)
|
||||
*
|
||||
* Drivers must assume that the clock source is not enabled.
|
||||
*/
|
||||
struct clk *clk_get(struct device *dev, const char *id);
|
||||
|
||||
/**
|
||||
* clk_enable - inform the system when the clock source should be running.
|
||||
* @clk: clock source
|
||||
*
|
||||
* If the clock can not be enabled/disabled, this should return success.
|
||||
*
|
||||
* Returns success (0) or negative errno.
|
||||
*/
|
||||
int clk_enable(struct clk *clk);
|
||||
|
||||
/**
|
||||
* clk_disable - inform the system when the clock source is no longer required.
|
||||
* @clk: clock source
|
||||
*
|
||||
* Inform the system that a clock source is no longer required by
|
||||
* a driver and may be shut down.
|
||||
*
|
||||
* Implementation detail: if the clock source is shared between
|
||||
* multiple drivers, clk_enable() calls must be balanced by the
|
||||
* same number of clk_disable() calls for the clock source to be
|
||||
* disabled.
|
||||
*/
|
||||
void clk_disable(struct clk *clk);
|
||||
|
||||
/**
|
||||
* clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
|
||||
* This is only valid once the clock source has been enabled.
|
||||
* @clk: clock source
|
||||
*/
|
||||
unsigned long clk_get_rate(struct clk *clk);
|
||||
|
||||
/**
|
||||
* clk_put - "free" the clock source
|
||||
* @clk: clock source
|
||||
*
|
||||
* Note: drivers must ensure that all clk_enable calls made on this
|
||||
* clock source are balanced by clk_disable calls prior to calling
|
||||
* this function.
|
||||
*/
|
||||
void clk_put(struct clk *clk);
|
||||
|
||||
|
||||
/*
|
||||
* The remaining APIs are optional for machine class support.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* clk_round_rate - adjust a rate to the exact rate a clock can provide
|
||||
* @clk: clock source
|
||||
* @rate: desired clock rate in Hz
|
||||
*
|
||||
* Returns rounded clock rate in Hz, or negative errno.
|
||||
*/
|
||||
long clk_round_rate(struct clk *clk, unsigned long rate);
|
||||
|
||||
/**
|
||||
* clk_set_rate - set the clock rate for a clock source
|
||||
* @clk: clock source
|
||||
* @rate: desired clock rate in Hz
|
||||
*
|
||||
* Returns success (0) or negative errno.
|
||||
*/
|
||||
int clk_set_rate(struct clk *clk, unsigned long rate);
|
||||
|
||||
/**
|
||||
* clk_set_parent - set the parent clock source for this clock
|
||||
* @clk: clock source
|
||||
* @parent: parent clock source
|
||||
*
|
||||
* Returns success (0) or negative errno.
|
||||
*/
|
||||
int clk_set_parent(struct clk *clk, struct clk *parent);
|
||||
|
||||
/**
|
||||
* clk_get_parent - get the parent clock source for this clock
|
||||
* @clk: clock source
|
||||
*
|
||||
* Returns struct clk corresponding to parent clock source, or
|
||||
* valid IS_ERR() condition containing errno.
|
||||
*/
|
||||
struct clk *clk_get_parent(struct clk *clk);
|
||||
|
||||
#endif
|
|
@ -2,14 +2,6 @@
|
|||
* compatible types passed or none at all... Please include
|
||||
* only stuff that is compatible on *all architectures*.
|
||||
*/
|
||||
#ifndef COMPATIBLE_IOCTL /* pointer to compatible structure or no argument */
|
||||
#define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL((cmd),(ioctl_trans_handler_t)sys_ioctl)
|
||||
#endif
|
||||
|
||||
#ifndef ULONG_IOCTL /* argument is an unsigned long integer, not a pointer */
|
||||
#define ULONG_IOCTL(cmd) HANDLE_IOCTL((cmd),(ioctl_trans_handler_t)sys_ioctl)
|
||||
#endif
|
||||
|
||||
|
||||
COMPATIBLE_IOCTL(0x4B50) /* KDGHWCLK - not in the kernel, but don't complain */
|
||||
COMPATIBLE_IOCTL(0x4B51) /* KDSHWCLK - not in the kernel, but don't complain */
|
||||
|
@ -218,32 +210,6 @@ COMPATIBLE_IOCTL(VT_RESIZE)
|
|||
COMPATIBLE_IOCTL(VT_RESIZEX)
|
||||
COMPATIBLE_IOCTL(VT_LOCKSWITCH)
|
||||
COMPATIBLE_IOCTL(VT_UNLOCKSWITCH)
|
||||
/* Little v */
|
||||
/* Little v, the video4linux ioctls (conflict?) */
|
||||
COMPATIBLE_IOCTL(VIDIOCGCAP)
|
||||
COMPATIBLE_IOCTL(VIDIOCGCHAN)
|
||||
COMPATIBLE_IOCTL(VIDIOCSCHAN)
|
||||
COMPATIBLE_IOCTL(VIDIOCGPICT)
|
||||
COMPATIBLE_IOCTL(VIDIOCSPICT)
|
||||
COMPATIBLE_IOCTL(VIDIOCCAPTURE)
|
||||
COMPATIBLE_IOCTL(VIDIOCKEY)
|
||||
COMPATIBLE_IOCTL(VIDIOCGAUDIO)
|
||||
COMPATIBLE_IOCTL(VIDIOCSAUDIO)
|
||||
COMPATIBLE_IOCTL(VIDIOCSYNC)
|
||||
COMPATIBLE_IOCTL(VIDIOCMCAPTURE)
|
||||
COMPATIBLE_IOCTL(VIDIOCGMBUF)
|
||||
COMPATIBLE_IOCTL(VIDIOCGUNIT)
|
||||
COMPATIBLE_IOCTL(VIDIOCGCAPTURE)
|
||||
COMPATIBLE_IOCTL(VIDIOCSCAPTURE)
|
||||
/* BTTV specific... */
|
||||
COMPATIBLE_IOCTL(_IOW('v', BASE_VIDIOCPRIVATE+0, char [256]))
|
||||
COMPATIBLE_IOCTL(_IOR('v', BASE_VIDIOCPRIVATE+1, char [256]))
|
||||
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+2, unsigned int))
|
||||
COMPATIBLE_IOCTL(_IOW('v' , BASE_VIDIOCPRIVATE+3, char [16])) /* struct bttv_pll_info */
|
||||
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+4, int))
|
||||
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+5, int))
|
||||
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+6, int))
|
||||
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+7, int))
|
||||
/* Little p (/dev/rtc, /dev/envctrl, etc.) */
|
||||
COMPATIBLE_IOCTL(RTC_AIE_ON)
|
||||
COMPATIBLE_IOCTL(RTC_AIE_OFF)
|
||||
|
|
|
@ -11,7 +11,22 @@
|
|||
|
||||
/* This macro obfuscates arithmetic on a variable address so that gcc
|
||||
shouldn't recognize the original var, and make assumptions about it */
|
||||
/*
|
||||
* Versions of the ppc64 compiler before 4.1 had a bug where use of
|
||||
* RELOC_HIDE could trash r30. The bug can be worked around by changing
|
||||
* the inline assembly constraint from =g to =r, in this particular
|
||||
* case either is valid.
|
||||
*/
|
||||
#define RELOC_HIDE(ptr, off) \
|
||||
({ unsigned long __ptr; \
|
||||
__asm__ ("" : "=g"(__ptr) : "0"(ptr)); \
|
||||
__asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
|
||||
(typeof(ptr)) (__ptr + (off)); })
|
||||
|
||||
|
||||
#define inline inline __attribute__((always_inline))
|
||||
#define __inline__ __inline__ __attribute__((always_inline))
|
||||
#define __inline __inline __attribute__((always_inline))
|
||||
#define __deprecated __attribute__((deprecated))
|
||||
#define noinline __attribute__((noinline))
|
||||
#define __attribute_pure__ __attribute__((pure))
|
||||
#define __attribute_const__ __attribute__((__const__))
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
/* Never include this file directly. Include <linux/compiler.h> instead. */
|
||||
|
||||
/* These definitions are for GCC v2.x. */
|
||||
|
||||
/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
|
||||
a mechanism by which the user can annotate likely branch directions and
|
||||
expect the blocks to be reordered appropriately. Define __builtin_expect
|
||||
to nothing for earlier compilers. */
|
||||
#include <linux/compiler-gcc.h>
|
||||
|
||||
#if __GNUC_MINOR__ < 96
|
||||
# define __builtin_expect(x, expected_value) (x)
|
||||
#endif
|
||||
|
||||
#define __attribute_used__ __attribute__((__unused__))
|
||||
|
||||
/*
|
||||
* The attribute `pure' is not implemented in GCC versions earlier
|
||||
* than 2.96.
|
||||
*/
|
||||
#if __GNUC_MINOR__ >= 96
|
||||
# define __attribute_pure__ __attribute__((pure))
|
||||
# define __attribute_const__ __attribute__((__const__))
|
||||
#endif
|
||||
|
||||
/* GCC 2.95.x/2.96 recognize __va_copy, but not va_copy. Actually later GCC's
|
||||
* define both va_copy and __va_copy, but the latter may go away, so limit this
|
||||
* to this header */
|
||||
#define va_copy __va_copy
|
|
@ -3,30 +3,14 @@
|
|||
/* These definitions are for GCC v3.x. */
|
||||
#include <linux/compiler-gcc.h>
|
||||
|
||||
#if __GNUC_MINOR__ >= 1
|
||||
# define inline inline __attribute__((always_inline))
|
||||
# define __inline__ __inline__ __attribute__((always_inline))
|
||||
# define __inline __inline __attribute__((always_inline))
|
||||
#endif
|
||||
|
||||
#if __GNUC_MINOR__ > 0
|
||||
# define __deprecated __attribute__((deprecated))
|
||||
#endif
|
||||
|
||||
#if __GNUC_MINOR__ >= 3
|
||||
# define __attribute_used__ __attribute__((__used__))
|
||||
#else
|
||||
# define __attribute_used__ __attribute__((__unused__))
|
||||
#endif
|
||||
|
||||
#define __attribute_pure__ __attribute__((pure))
|
||||
#define __attribute_const__ __attribute__((__const__))
|
||||
|
||||
#if __GNUC_MINOR__ >= 1
|
||||
#define noinline __attribute__((noinline))
|
||||
#endif
|
||||
|
||||
#if __GNUC_MINOR__ >= 4
|
||||
#define __must_check __attribute__((warn_unused_result))
|
||||
#endif
|
||||
|
||||
#define __always_inline inline __attribute__((always_inline))
|
||||
|
|
|
@ -3,14 +3,16 @@
|
|||
/* These definitions are for GCC v4.x. */
|
||||
#include <linux/compiler-gcc.h>
|
||||
|
||||
#define inline inline __attribute__((always_inline))
|
||||
#define __inline__ __inline__ __attribute__((always_inline))
|
||||
#define __inline __inline __attribute__((always_inline))
|
||||
#define __deprecated __attribute__((deprecated))
|
||||
#ifdef CONFIG_FORCED_INLINING
|
||||
# undef inline
|
||||
# undef __inline__
|
||||
# undef __inline
|
||||
# define inline inline __attribute__((always_inline))
|
||||
# define __inline__ __inline__ __attribute__((always_inline))
|
||||
# define __inline __inline __attribute__((always_inline))
|
||||
#endif
|
||||
|
||||
#define __attribute_used__ __attribute__((__used__))
|
||||
#define __attribute_pure__ __attribute__((pure))
|
||||
#define __attribute_const__ __attribute__((__const__))
|
||||
#define noinline __attribute__((noinline))
|
||||
#define __must_check __attribute__((warn_unused_result))
|
||||
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
|
||||
|
||||
#define __always_inline inline __attribute__((always_inline))
|
||||
|
|
|
@ -42,8 +42,6 @@ extern void __chk_io_ptr(void __iomem *);
|
|||
# include <linux/compiler-gcc4.h>
|
||||
#elif __GNUC__ == 3
|
||||
# include <linux/compiler-gcc3.h>
|
||||
#elif __GNUC__ == 2
|
||||
# include <linux/compiler-gcc2.h>
|
||||
#else
|
||||
# error Sorry, your compiler is too old/not recognized.
|
||||
#endif
|
||||
|
|
205
include/linux/configfs.h
Normal file
205
include/linux/configfs.h
Normal file
|
@ -0,0 +1,205 @@
|
|||
/* -*- mode: c; c-basic-offset: 8; -*-
|
||||
* vim: noexpandtab sw=8 ts=8 sts=0:
|
||||
*
|
||||
* configfs.h - definitions for the device driver filesystem
|
||||
*
|
||||
* 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., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 021110-1307, USA.
|
||||
*
|
||||
* Based on sysfs:
|
||||
* sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel
|
||||
*
|
||||
* Based on kobject.h:
|
||||
* Copyright (c) 2002-2003 Patrick Mochel
|
||||
* Copyright (c) 2002-2003 Open Source Development Labs
|
||||
*
|
||||
* configfs Copyright (C) 2005 Oracle. All rights reserved.
|
||||
*
|
||||
* Please read Documentation/filesystems/configfs.txt before using the
|
||||
* configfs interface, ESPECIALLY the parts about reference counts and
|
||||
* item destructors.
|
||||
*/
|
||||
|
||||
#ifndef _CONFIGFS_H_
|
||||
#define _CONFIGFS_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/kref.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/semaphore.h>
|
||||
|
||||
#define CONFIGFS_ITEM_NAME_LEN 20
|
||||
|
||||
struct module;
|
||||
|
||||
struct configfs_item_operations;
|
||||
struct configfs_group_operations;
|
||||
struct configfs_attribute;
|
||||
struct configfs_subsystem;
|
||||
|
||||
struct config_item {
|
||||
char *ci_name;
|
||||
char ci_namebuf[CONFIGFS_ITEM_NAME_LEN];
|
||||
struct kref ci_kref;
|
||||
struct list_head ci_entry;
|
||||
struct config_item *ci_parent;
|
||||
struct config_group *ci_group;
|
||||
struct config_item_type *ci_type;
|
||||
struct dentry *ci_dentry;
|
||||
};
|
||||
|
||||
extern int config_item_set_name(struct config_item *, const char *, ...);
|
||||
|
||||
static inline char *config_item_name(struct config_item * item)
|
||||
{
|
||||
return item->ci_name;
|
||||
}
|
||||
|
||||
extern void config_item_init(struct config_item *);
|
||||
extern void config_item_init_type_name(struct config_item *item,
|
||||
const char *name,
|
||||
struct config_item_type *type);
|
||||
extern void config_item_cleanup(struct config_item *);
|
||||
|
||||
extern struct config_item * config_item_get(struct config_item *);
|
||||
extern void config_item_put(struct config_item *);
|
||||
|
||||
struct config_item_type {
|
||||
struct module *ct_owner;
|
||||
struct configfs_item_operations *ct_item_ops;
|
||||
struct configfs_group_operations *ct_group_ops;
|
||||
struct configfs_attribute **ct_attrs;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* group - a group of config_items of a specific type, belonging
|
||||
* to a specific subsystem.
|
||||
*/
|
||||
|
||||
struct config_group {
|
||||
struct config_item cg_item;
|
||||
struct list_head cg_children;
|
||||
struct configfs_subsystem *cg_subsys;
|
||||
struct config_group **default_groups;
|
||||
};
|
||||
|
||||
|
||||
extern void config_group_init(struct config_group *group);
|
||||
extern void config_group_init_type_name(struct config_group *group,
|
||||
const char *name,
|
||||
struct config_item_type *type);
|
||||
|
||||
|
||||
static inline struct config_group *to_config_group(struct config_item *item)
|
||||
{
|
||||
return item ? container_of(item,struct config_group,cg_item) : NULL;
|
||||
}
|
||||
|
||||
static inline struct config_group *config_group_get(struct config_group *group)
|
||||
{
|
||||
return group ? to_config_group(config_item_get(&group->cg_item)) : NULL;
|
||||
}
|
||||
|
||||
static inline void config_group_put(struct config_group *group)
|
||||
{
|
||||
config_item_put(&group->cg_item);
|
||||
}
|
||||
|
||||
extern struct config_item *config_group_find_obj(struct config_group *, const char *);
|
||||
|
||||
|
||||
struct configfs_attribute {
|
||||
char *ca_name;
|
||||
struct module *ca_owner;
|
||||
mode_t ca_mode;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* If allow_link() exists, the item can symlink(2) out to other
|
||||
* items. If the item is a group, it may support mkdir(2).
|
||||
* Groups supply one of make_group() and make_item(). If the
|
||||
* group supports make_group(), one can create group children. If it
|
||||
* supports make_item(), one can create config_item children. If it has
|
||||
* default_groups on group->default_groups, it has automatically created
|
||||
* group children. default_groups may coexist alongsize make_group() or
|
||||
* make_item(), but if the group wishes to have only default_groups
|
||||
* children (disallowing mkdir(2)), it need not provide either function.
|
||||
* If the group has commit(), it supports pending and commited (active)
|
||||
* items.
|
||||
*/
|
||||
struct configfs_item_operations {
|
||||
void (*release)(struct config_item *);
|
||||
ssize_t (*show_attribute)(struct config_item *, struct configfs_attribute *,char *);
|
||||
ssize_t (*store_attribute)(struct config_item *,struct configfs_attribute *,const char *, size_t);
|
||||
int (*allow_link)(struct config_item *src, struct config_item *target);
|
||||
int (*drop_link)(struct config_item *src, struct config_item *target);
|
||||
};
|
||||
|
||||
struct configfs_group_operations {
|
||||
struct config_item *(*make_item)(struct config_group *group, const char *name);
|
||||
struct config_group *(*make_group)(struct config_group *group, const char *name);
|
||||
int (*commit_item)(struct config_item *item);
|
||||
void (*drop_item)(struct config_group *group, struct config_item *item);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Use these macros to make defining attributes easier. See include/linux/device.h
|
||||
* for examples..
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#define __ATTR(_name,_mode,_show,_store) { \
|
||||
.attr = {.ca_name = __stringify(_name), .ca_mode = _mode, .ca_owner = THIS_MODULE }, \
|
||||
.show = _show, \
|
||||
.store = _store, \
|
||||
}
|
||||
|
||||
#define __ATTR_RO(_name) { \
|
||||
.attr = { .ca_name = __stringify(_name), .ca_mode = 0444, .ca_owner = THIS_MODULE }, \
|
||||
.show = _name##_show, \
|
||||
}
|
||||
|
||||
#define __ATTR_NULL { .attr = { .name = NULL } }
|
||||
|
||||
#define attr_name(_attr) (_attr).attr.name
|
||||
#endif
|
||||
|
||||
|
||||
struct configfs_subsystem {
|
||||
struct config_group su_group;
|
||||
struct semaphore su_sem;
|
||||
};
|
||||
|
||||
static inline struct configfs_subsystem *to_configfs_subsystem(struct config_group *group)
|
||||
{
|
||||
return group ?
|
||||
container_of(group, struct configfs_subsystem, su_group) :
|
||||
NULL;
|
||||
}
|
||||
|
||||
int configfs_register_subsystem(struct configfs_subsystem *subsys);
|
||||
void configfs_unregister_subsystem(struct configfs_subsystem *subsys);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _CONFIGFS_H_ */
|
|
@ -256,6 +256,16 @@ int cpufreq_update_policy(unsigned int cpu);
|
|||
/* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */
|
||||
unsigned int cpufreq_get(unsigned int cpu);
|
||||
|
||||
/* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
unsigned int cpufreq_quick_get(unsigned int cpu);
|
||||
#else
|
||||
static inline unsigned int cpufreq_quick_get(unsigned int cpu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* CPUFREQ DEFAULT GOVERNOR *
|
||||
|
|
|
@ -14,22 +14,46 @@
|
|||
|
||||
#ifdef CONFIG_CPUSETS
|
||||
|
||||
extern int number_of_cpusets; /* How many cpusets are defined in system? */
|
||||
|
||||
extern int cpuset_init_early(void);
|
||||
extern int cpuset_init(void);
|
||||
extern void cpuset_init_smp(void);
|
||||
extern void cpuset_fork(struct task_struct *p);
|
||||
extern void cpuset_exit(struct task_struct *p);
|
||||
extern cpumask_t cpuset_cpus_allowed(const struct task_struct *p);
|
||||
extern cpumask_t cpuset_cpus_allowed(struct task_struct *p);
|
||||
extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
|
||||
void cpuset_init_current_mems_allowed(void);
|
||||
void cpuset_update_current_mems_allowed(void);
|
||||
void cpuset_restrict_to_mems_allowed(unsigned long *nodes);
|
||||
void cpuset_update_task_memory_state(void);
|
||||
#define cpuset_nodes_subset_current_mems_allowed(nodes) \
|
||||
nodes_subset((nodes), current->mems_allowed)
|
||||
int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl);
|
||||
extern int cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask);
|
||||
|
||||
extern int __cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask);
|
||||
static int inline cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask)
|
||||
{
|
||||
return number_of_cpusets <= 1 || __cpuset_zone_allowed(z, gfp_mask);
|
||||
}
|
||||
|
||||
extern int cpuset_excl_nodes_overlap(const struct task_struct *p);
|
||||
|
||||
#define cpuset_memory_pressure_bump() \
|
||||
do { \
|
||||
if (cpuset_memory_pressure_enabled) \
|
||||
__cpuset_memory_pressure_bump(); \
|
||||
} while (0)
|
||||
extern int cpuset_memory_pressure_enabled;
|
||||
extern void __cpuset_memory_pressure_bump(void);
|
||||
|
||||
extern struct file_operations proc_cpuset_operations;
|
||||
extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer);
|
||||
|
||||
extern void cpuset_lock(void);
|
||||
extern void cpuset_unlock(void);
|
||||
|
||||
#else /* !CONFIG_CPUSETS */
|
||||
|
||||
static inline int cpuset_init_early(void) { return 0; }
|
||||
static inline int cpuset_init(void) { return 0; }
|
||||
static inline void cpuset_init_smp(void) {}
|
||||
static inline void cpuset_fork(struct task_struct *p) {}
|
||||
|
@ -40,9 +64,14 @@ static inline cpumask_t cpuset_cpus_allowed(struct task_struct *p)
|
|||
return cpu_possible_map;
|
||||
}
|
||||
|
||||
static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)
|
||||
{
|
||||
return node_possible_map;
|
||||
}
|
||||
|
||||
static inline void cpuset_init_current_mems_allowed(void) {}
|
||||
static inline void cpuset_update_current_mems_allowed(void) {}
|
||||
static inline void cpuset_restrict_to_mems_allowed(unsigned long *nodes) {}
|
||||
static inline void cpuset_update_task_memory_state(void) {}
|
||||
#define cpuset_nodes_subset_current_mems_allowed(nodes) (1)
|
||||
|
||||
static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
|
||||
{
|
||||
|
@ -59,12 +88,17 @@ static inline int cpuset_excl_nodes_overlap(const struct task_struct *p)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline void cpuset_memory_pressure_bump(void) {}
|
||||
|
||||
static inline char *cpuset_task_status_allowed(struct task_struct *task,
|
||||
char *buffer)
|
||||
{
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static inline void cpuset_lock(void) {}
|
||||
static inline void cpuset_unlock(void) {}
|
||||
|
||||
#endif /* !CONFIG_CPUSETS */
|
||||
|
||||
#endif /* _LINUX_CPUSET_H */
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
*
|
||||
* Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
|
||||
* Copyright (c) 2002 David S. Miller (davem@redhat.com)
|
||||
* Copyright (c) 2005 Herbert Xu <herbert@gondor.apana.org.au>
|
||||
*
|
||||
* Portions derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no>
|
||||
* and Nettle, by Niels Möller.
|
||||
|
@ -126,7 +127,11 @@ struct crypto_alg {
|
|||
unsigned int cra_blocksize;
|
||||
unsigned int cra_ctxsize;
|
||||
unsigned int cra_alignmask;
|
||||
|
||||
int cra_priority;
|
||||
|
||||
const char cra_name[CRYPTO_MAX_ALG_NAME];
|
||||
const char cra_driver_name[CRYPTO_MAX_ALG_NAME];
|
||||
|
||||
union {
|
||||
struct cipher_alg cipher;
|
||||
|
|
|
@ -38,11 +38,11 @@ extern unsigned int cycx_debug;
|
|||
/* Data Structures */
|
||||
/* X.25 Command Block. */
|
||||
struct cycx_x25_cmd {
|
||||
u16 command PACKED;
|
||||
u16 link PACKED; /* values: 0 or 1 */
|
||||
u16 len PACKED; /* values: 0 thru 0x205 (517) */
|
||||
u32 buf PACKED;
|
||||
};
|
||||
u16 command;
|
||||
u16 link; /* values: 0 or 1 */
|
||||
u16 len; /* values: 0 thru 0x205 (517) */
|
||||
u32 buf;
|
||||
} PACKED;
|
||||
|
||||
/* Defines for the 'command' field. */
|
||||
#define X25_CONNECT_REQUEST 0x4401
|
||||
|
@ -92,34 +92,34 @@ struct cycx_x25_cmd {
|
|||
* @flags - see dosx25.doc, in portuguese, for details
|
||||
*/
|
||||
struct cycx_x25_config {
|
||||
u8 link PACKED;
|
||||
u8 speed PACKED;
|
||||
u8 clock PACKED;
|
||||
u8 n2 PACKED;
|
||||
u8 n2win PACKED;
|
||||
u8 n3win PACKED;
|
||||
u8 nvc PACKED;
|
||||
u8 pktlen PACKED;
|
||||
u8 locaddr PACKED;
|
||||
u8 remaddr PACKED;
|
||||
u16 t1 PACKED;
|
||||
u16 t2 PACKED;
|
||||
u8 t21 PACKED;
|
||||
u8 npvc PACKED;
|
||||
u8 t23 PACKED;
|
||||
u8 flags PACKED;
|
||||
};
|
||||
u8 link;
|
||||
u8 speed;
|
||||
u8 clock;
|
||||
u8 n2;
|
||||
u8 n2win;
|
||||
u8 n3win;
|
||||
u8 nvc;
|
||||
u8 pktlen;
|
||||
u8 locaddr;
|
||||
u8 remaddr;
|
||||
u16 t1;
|
||||
u16 t2;
|
||||
u8 t21;
|
||||
u8 npvc;
|
||||
u8 t23;
|
||||
u8 flags;
|
||||
} PACKED;
|
||||
|
||||
struct cycx_x25_stats {
|
||||
u16 rx_crc_errors PACKED;
|
||||
u16 rx_over_errors PACKED;
|
||||
u16 n2_tx_frames PACKED;
|
||||
u16 n2_rx_frames PACKED;
|
||||
u16 tx_timeouts PACKED;
|
||||
u16 rx_timeouts PACKED;
|
||||
u16 n3_tx_packets PACKED;
|
||||
u16 n3_rx_packets PACKED;
|
||||
u16 tx_aborts PACKED;
|
||||
u16 rx_aborts PACKED;
|
||||
};
|
||||
u16 rx_crc_errors;
|
||||
u16 rx_over_errors;
|
||||
u16 n2_tx_frames;
|
||||
u16 n2_rx_frames;
|
||||
u16 tx_timeouts;
|
||||
u16 rx_timeouts;
|
||||
u16 n3_tx_packets;
|
||||
u16 n3_rx_packets;
|
||||
u16 tx_aborts;
|
||||
u16 rx_aborts;
|
||||
} PACKED;
|
||||
#endif /* _CYCX_X25_H */
|
||||
|
|
|
@ -95,14 +95,19 @@ struct dentry {
|
|||
struct qstr d_name;
|
||||
|
||||
struct list_head d_lru; /* LRU list */
|
||||
struct list_head d_child; /* child of parent list */
|
||||
/*
|
||||
* d_child and d_rcu can share memory
|
||||
*/
|
||||
union {
|
||||
struct list_head d_child; /* child of parent list */
|
||||
struct rcu_head d_rcu;
|
||||
} d_u;
|
||||
struct list_head d_subdirs; /* our children */
|
||||
struct list_head d_alias; /* inode alias list */
|
||||
unsigned long d_time; /* used by d_revalidate */
|
||||
struct dentry_operations *d_op;
|
||||
struct super_block *d_sb; /* The root of the dentry tree */
|
||||
void *d_fsdata; /* fs-specific data */
|
||||
struct rcu_head d_rcu;
|
||||
struct dcookie_struct *d_cookie; /* cookie, if any */
|
||||
int d_mounted;
|
||||
unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */
|
||||
|
|
|
@ -192,10 +192,9 @@ enum {
|
|||
#include <linux/workqueue.h>
|
||||
|
||||
#include <net/inet_connection_sock.h>
|
||||
#include <net/inet_sock.h>
|
||||
#include <net/inet_timewait_sock.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/tcp_states.h>
|
||||
#include <net/tcp.h>
|
||||
|
||||
enum dccp_state {
|
||||
DCCP_OPEN = TCP_ESTABLISHED,
|
||||
|
@ -408,8 +407,6 @@ struct dccp_ackvec;
|
|||
* @dccps_gar - greatest valid ack number received on a non-Sync; initialized to %dccps_iss
|
||||
* @dccps_timestamp_time - time of latest TIMESTAMP option
|
||||
* @dccps_timestamp_echo - latest timestamp received on a TIMESTAMP option
|
||||
* @dccps_ext_header_len - network protocol overhead (IP/IPv6 options)
|
||||
* @dccps_pmtu_cookie - Last pmtu seen by socket
|
||||
* @dccps_packet_size - Set thru setsockopt
|
||||
* @dccps_role - Role of this sock, one of %dccp_role
|
||||
* @dccps_ndp_count - number of Non Data Packets since last data packet
|
||||
|
@ -434,8 +431,6 @@ struct dccp_sock {
|
|||
__u32 dccps_timestamp_echo;
|
||||
__u32 dccps_packet_size;
|
||||
unsigned long dccps_ndp_count;
|
||||
__u16 dccps_ext_header_len;
|
||||
__u32 dccps_pmtu_cookie;
|
||||
__u32 dccps_mss_cache;
|
||||
struct dccp_options dccps_options;
|
||||
struct dccp_ackvec *dccps_hc_rx_ackvec;
|
||||
|
|
|
@ -47,8 +47,11 @@ struct bus_type {
|
|||
struct driver_attribute * drv_attrs;
|
||||
|
||||
int (*match)(struct device * dev, struct device_driver * drv);
|
||||
int (*hotplug) (struct device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
int (*uevent)(struct device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
int (*probe)(struct device * dev);
|
||||
int (*remove)(struct device * dev);
|
||||
void (*shutdown)(struct device * dev);
|
||||
int (*suspend)(struct device * dev, pm_message_t state);
|
||||
int (*resume)(struct device * dev);
|
||||
};
|
||||
|
@ -151,7 +154,7 @@ struct class {
|
|||
struct class_attribute * class_attrs;
|
||||
struct class_device_attribute * class_dev_attrs;
|
||||
|
||||
int (*hotplug)(struct class_device *dev, char **envp,
|
||||
int (*uevent)(struct class_device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
|
||||
void (*release)(struct class_device *dev);
|
||||
|
@ -209,9 +212,9 @@ extern int class_device_create_file(struct class_device *,
|
|||
* set, this will be called instead of the class specific release function.
|
||||
* Only use this if you want to override the default release function, like
|
||||
* when you are nesting class_device structures.
|
||||
* @hotplug: pointer to a hotplug function for this struct class_device. If
|
||||
* set, this will be called instead of the class specific hotplug function.
|
||||
* Only use this if you want to override the default hotplug function, like
|
||||
* @uevent: pointer to a uevent function for this struct class_device. If
|
||||
* set, this will be called instead of the class specific uevent function.
|
||||
* Only use this if you want to override the default uevent function, like
|
||||
* when you are nesting class_device structures.
|
||||
*/
|
||||
struct class_device {
|
||||
|
@ -227,7 +230,7 @@ struct class_device {
|
|||
struct class_device *parent; /* parent of this child device, if there is one */
|
||||
|
||||
void (*release)(struct class_device *dev);
|
||||
int (*hotplug)(struct class_device *dev, char **envp,
|
||||
int (*uevent)(struct class_device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
char class_id[BUS_ID_SIZE]; /* unique to this class */
|
||||
};
|
||||
|
|
|
@ -272,9 +272,9 @@ typedef char ioctl_struct[308];
|
|||
#define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl)
|
||||
|
||||
#define DM_VERSION_MAJOR 4
|
||||
#define DM_VERSION_MINOR 4
|
||||
#define DM_VERSION_MINOR 5
|
||||
#define DM_VERSION_PATCHLEVEL 0
|
||||
#define DM_VERSION_EXTRA "-ioctl (2005-01-12)"
|
||||
#define DM_VERSION_EXTRA "-ioctl (2005-10-04)"
|
||||
|
||||
/* Status bits */
|
||||
#define DM_READONLY_FLAG (1 << 0) /* In/Out */
|
||||
|
@ -301,8 +301,13 @@ typedef char ioctl_struct[308];
|
|||
#define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */
|
||||
|
||||
/*
|
||||
* Set this to improve performance when you aren't going to use open_count
|
||||
* Set this to improve performance when you aren't going to use open_count.
|
||||
*/
|
||||
#define DM_SKIP_BDGET_FLAG (1 << 9) /* In */
|
||||
|
||||
/*
|
||||
* Set this to avoid attempting to freeze any filesystem when suspending.
|
||||
*/
|
||||
#define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */
|
||||
|
||||
#endif /* _LINUX_DM_IOCTL_H */
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define __DMI_H__
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/config.h>
|
||||
|
||||
enum dmi_field {
|
||||
DMI_NONE,
|
||||
|
@ -60,12 +61,14 @@ struct dmi_device {
|
|||
void *device_data; /* Type specific data */
|
||||
};
|
||||
|
||||
#if defined(CONFIG_X86_32)
|
||||
#ifdef CONFIG_DMI
|
||||
|
||||
extern int dmi_check_system(struct dmi_system_id *list);
|
||||
extern char * dmi_get_system_info(int field);
|
||||
extern struct dmi_device * dmi_find_device(int type, const char *name,
|
||||
struct dmi_device *from);
|
||||
extern void dmi_scan_machine(void);
|
||||
|
||||
#else
|
||||
|
||||
static inline int dmi_check_system(struct dmi_system_id *list) { return 0; }
|
||||
|
|
|
@ -240,6 +240,15 @@ struct dvb_frontend_event {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* When set, this flag will disable any zigzagging or other "normal" tuning
|
||||
* behaviour. Additionally, there will be no automatic monitoring of the lock
|
||||
* status, and hence no frontend events will be generated. If a frontend device
|
||||
* is closed, this flag will be automatically turned off when the device is
|
||||
* reopened read-write.
|
||||
*/
|
||||
#define FE_TUNE_MODE_ONESHOT 0x01
|
||||
|
||||
|
||||
#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
|
||||
|
||||
|
@ -260,6 +269,7 @@ struct dvb_frontend_event {
|
|||
|
||||
#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters)
|
||||
#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)
|
||||
#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */
|
||||
#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event)
|
||||
|
||||
#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
|
||||
|
|
|
@ -66,7 +66,7 @@ struct elevator_type
|
|||
};
|
||||
|
||||
/*
|
||||
* each queue has an elevator_queue assoicated with it
|
||||
* each queue has an elevator_queue associated with it
|
||||
*/
|
||||
struct elevator_queue
|
||||
{
|
||||
|
@ -114,8 +114,6 @@ extern ssize_t elv_iosched_store(request_queue_t *, const char *, size_t);
|
|||
extern int elevator_init(request_queue_t *, char *);
|
||||
extern void elevator_exit(elevator_t *);
|
||||
extern int elv_rq_merge_ok(struct request *, struct bio *);
|
||||
extern int elv_try_merge(struct request *, struct bio *);
|
||||
extern int elv_try_last_merge(request_queue_t *, struct bio *);
|
||||
|
||||
/*
|
||||
* Return values from elevator merger
|
||||
|
@ -130,6 +128,7 @@ extern int elv_try_last_merge(request_queue_t *, struct bio *);
|
|||
#define ELEVATOR_INSERT_FRONT 1
|
||||
#define ELEVATOR_INSERT_BACK 2
|
||||
#define ELEVATOR_INSERT_SORT 3
|
||||
#define ELEVATOR_INSERT_REQUEUE 4
|
||||
|
||||
/*
|
||||
* return values from elevator_may_queue_fn
|
||||
|
|
|
@ -151,6 +151,8 @@ typedef __s64 Elf64_Sxword;
|
|||
#define STT_FUNC 2
|
||||
#define STT_SECTION 3
|
||||
#define STT_FILE 4
|
||||
#define STT_COMMON 5
|
||||
#define STT_TLS 6
|
||||
|
||||
#define ELF_ST_BIND(x) ((x) >> 4)
|
||||
#define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf)
|
||||
|
|
|
@ -63,10 +63,11 @@ static inline int is_zero_ether_addr(const u8 *addr)
|
|||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
*
|
||||
* Return true if the address is a multicast address.
|
||||
* By definition the broadcast address is also a multicast address.
|
||||
*/
|
||||
static inline int is_multicast_ether_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] != 0xff) && (0x01 & addr[0]));
|
||||
return (0x01 & addr[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -87,7 +87,7 @@ struct ext3_inode_info {
|
|||
#ifdef CONFIG_EXT3_FS_XATTR
|
||||
/*
|
||||
* Extended attributes can be read independently of the main file
|
||||
* data. Taking i_sem even when reading would cause contention
|
||||
* data. Taking i_mutex even when reading would cause contention
|
||||
* between readers of EAs and writers of regular file data, so
|
||||
* instead we synchronize on xattr_sem when reading or changing
|
||||
* EAs.
|
||||
|
|
|
@ -608,15 +608,15 @@ struct fb_ops {
|
|||
int (*fb_sync)(struct fb_info *info);
|
||||
|
||||
/* perform fb specific ioctl (optional) */
|
||||
int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
|
||||
unsigned long arg, struct fb_info *info);
|
||||
int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
/* Handle 32bit compat ioctl (optional) */
|
||||
long (*fb_compat_ioctl)(struct file *f, unsigned cmd, unsigned long arg,
|
||||
struct fb_info *info);
|
||||
int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
|
||||
unsigned long arg);
|
||||
|
||||
/* perform fb specific mmap */
|
||||
int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
|
||||
int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);
|
||||
|
||||
/* save current hardware state */
|
||||
void (*fb_save_state)(struct fb_info *info);
|
||||
|
|
|
@ -143,7 +143,7 @@ static inline unsigned int sk_filter_len(struct sk_filter *fp)
|
|||
struct sk_buff;
|
||||
struct sock;
|
||||
|
||||
extern int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
|
||||
extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
|
||||
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
|
||||
extern int sk_chk_filter(struct sock_filter *filter, int flen);
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -14,7 +14,7 @@ struct device;
|
|||
int request_firmware(const struct firmware **fw, const char *name,
|
||||
struct device *device);
|
||||
int request_firmware_nowait(
|
||||
struct module *module, int hotplug,
|
||||
struct module *module, int uevent,
|
||||
const char *name, struct device *device, void *context,
|
||||
void (*cont)(const struct firmware *fw, void *context));
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#include <linux/config.h>
|
||||
#include <linux/limits.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/rcuref.h>
|
||||
|
||||
/*
|
||||
* It's silly to have NR_OPEN bigger than NR_FILE, but you can change
|
||||
|
@ -104,19 +103,18 @@ extern int dir_notify_enable;
|
|||
#define MS_MOVE 8192
|
||||
#define MS_REC 16384
|
||||
#define MS_VERBOSE 32768
|
||||
#define MS_POSIXACL (1<<16) /* VFS does not apply the umask */
|
||||
#define MS_UNBINDABLE (1<<17) /* change to unbindable */
|
||||
#define MS_PRIVATE (1<<18) /* change to private */
|
||||
#define MS_SLAVE (1<<19) /* change to slave */
|
||||
#define MS_SHARED (1<<20) /* change to shared */
|
||||
#define MS_POSIXACL (1<<16) /* VFS does not apply the umask */
|
||||
#define MS_ACTIVE (1<<30)
|
||||
#define MS_NOUSER (1<<31)
|
||||
|
||||
/*
|
||||
* Superblock flags that can be altered by MS_REMOUNT
|
||||
*/
|
||||
#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_NOATIME|\
|
||||
MS_NODIRATIME)
|
||||
#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK)
|
||||
|
||||
/*
|
||||
* Old magic mount flag and mask
|
||||
|
@ -162,8 +160,6 @@ extern int dir_notify_enable;
|
|||
#define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
|
||||
#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
|
||||
#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
|
||||
#define IS_NOATIME(inode) (__IS_FLG(inode, MS_NOATIME) || ((inode)->i_flags & S_NOATIME))
|
||||
#define IS_NODIRATIME(inode) __IS_FLG(inode, MS_NODIRATIME)
|
||||
#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
|
||||
|
||||
#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
|
||||
|
@ -220,11 +216,13 @@ extern int dir_notify_enable;
|
|||
#include <linux/prio_tree.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
struct hd_geometry;
|
||||
struct iovec;
|
||||
struct nameidata;
|
||||
struct kiocb;
|
||||
|
@ -234,9 +232,6 @@ struct kstatfs;
|
|||
struct vm_area_struct;
|
||||
struct vfsmount;
|
||||
|
||||
/* Used to be a macro which just called the function, now just a function */
|
||||
extern void update_atime (struct inode *);
|
||||
|
||||
extern void __init inode_init(unsigned long);
|
||||
extern void __init inode_init_early(void);
|
||||
extern void __init mnt_init(unsigned long);
|
||||
|
@ -302,6 +297,37 @@ struct iattr {
|
|||
*/
|
||||
#include <linux/quota.h>
|
||||
|
||||
/**
|
||||
* enum positive_aop_returns - aop return codes with specific semantics
|
||||
*
|
||||
* @AOP_WRITEPAGE_ACTIVATE: Informs the caller that page writeback has
|
||||
* completed, that the page is still locked, and
|
||||
* should be considered active. The VM uses this hint
|
||||
* to return the page to the active list -- it won't
|
||||
* be a candidate for writeback again in the near
|
||||
* future. Other callers must be careful to unlock
|
||||
* the page if they get this return. Returned by
|
||||
* writepage();
|
||||
*
|
||||
* @AOP_TRUNCATED_PAGE: The AOP method that was handed a locked page has
|
||||
* unlocked it and the page might have been truncated.
|
||||
* The caller should back up to acquiring a new page and
|
||||
* trying again. The aop will be taking reasonable
|
||||
* precautions not to livelock. If the caller held a page
|
||||
* reference, it should drop it before retrying. Returned
|
||||
* by readpage(), prepare_write(), and commit_write().
|
||||
*
|
||||
* address_space_operation functions return these large constants to indicate
|
||||
* special semantics to the caller. These are much larger than the bytes in a
|
||||
* page to allow for functions that return the number of bytes operated on in a
|
||||
* given page.
|
||||
*/
|
||||
|
||||
enum positive_aop_returns {
|
||||
AOP_WRITEPAGE_ACTIVATE = 0x80000,
|
||||
AOP_TRUNCATED_PAGE = 0x80001,
|
||||
};
|
||||
|
||||
/*
|
||||
* oh the beauties of C type declarations.
|
||||
*/
|
||||
|
@ -453,7 +479,7 @@ struct inode {
|
|||
unsigned long i_blocks;
|
||||
unsigned short i_bytes;
|
||||
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
|
||||
struct semaphore i_sem;
|
||||
struct mutex i_mutex;
|
||||
struct rw_semaphore i_alloc_sem;
|
||||
struct inode_operations *i_op;
|
||||
struct file_operations *i_fop; /* former ->i_op->default_file_ops */
|
||||
|
@ -622,7 +648,7 @@ extern spinlock_t files_lock;
|
|||
#define file_list_lock() spin_lock(&files_lock);
|
||||
#define file_list_unlock() spin_unlock(&files_lock);
|
||||
|
||||
#define get_file(x) rcuref_inc(&(x)->f_count)
|
||||
#define get_file(x) atomic_inc(&(x)->f_count)
|
||||
#define file_count(x) atomic_read(&(x)->f_count)
|
||||
|
||||
#define MAX_NON_LFS ((1UL<<31) - 1)
|
||||
|
@ -729,7 +755,7 @@ extern struct file_lock *posix_test_lock(struct file *, struct file_lock *);
|
|||
extern int posix_lock_file(struct file *, struct file_lock *);
|
||||
extern int posix_lock_file_wait(struct file *, struct file_lock *);
|
||||
extern void posix_block_lock(struct file_lock *, struct file_lock *);
|
||||
extern void posix_unblock_lock(struct file *, struct file_lock *);
|
||||
extern int posix_unblock_lock(struct file *, struct file_lock *);
|
||||
extern int posix_locks_deadlock(struct file_lock *, struct file_lock *);
|
||||
extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl);
|
||||
extern int __break_lease(struct inode *inode, unsigned int flags);
|
||||
|
@ -777,7 +803,6 @@ struct super_block {
|
|||
struct list_head s_list; /* Keep this first */
|
||||
dev_t s_dev; /* search index; _not_ kdev_t */
|
||||
unsigned long s_blocksize;
|
||||
unsigned long s_old_blocksize;
|
||||
unsigned char s_blocksize_bits;
|
||||
unsigned char s_dirt;
|
||||
unsigned long long s_maxbytes; /* Max file size */
|
||||
|
@ -790,7 +815,7 @@ struct super_block {
|
|||
unsigned long s_magic;
|
||||
struct dentry *s_root;
|
||||
struct rw_semaphore s_umount;
|
||||
struct semaphore s_lock;
|
||||
struct mutex s_lock;
|
||||
int s_count;
|
||||
int s_syncing;
|
||||
int s_need_sync_fs;
|
||||
|
@ -862,13 +887,13 @@ static inline int has_fs_excl(void)
|
|||
static inline void lock_super(struct super_block * sb)
|
||||
{
|
||||
get_fs_excl();
|
||||
down(&sb->s_lock);
|
||||
mutex_lock(&sb->s_lock);
|
||||
}
|
||||
|
||||
static inline void unlock_super(struct super_block * sb)
|
||||
{
|
||||
put_fs_excl();
|
||||
up(&sb->s_lock);
|
||||
mutex_unlock(&sb->s_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -932,6 +957,7 @@ struct block_device_operations {
|
|||
int (*direct_access) (struct block_device *, sector_t, unsigned long *);
|
||||
int (*media_changed) (struct gendisk *);
|
||||
int (*revalidate_disk) (struct gendisk *);
|
||||
int (*getgeo)(struct block_device *, struct hd_geometry *);
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
|
@ -1019,6 +1045,7 @@ struct inode_operations {
|
|||
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||
int (*removexattr) (struct dentry *, const char *);
|
||||
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
||||
};
|
||||
|
||||
struct seq_file;
|
||||
|
@ -1085,12 +1112,7 @@ static inline void mark_inode_dirty_sync(struct inode *inode)
|
|||
__mark_inode_dirty(inode, I_DIRTY_SYNC);
|
||||
}
|
||||
|
||||
static inline void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
|
||||
{
|
||||
/* per-mountpoint checks will go here */
|
||||
update_atime(dentry->d_inode);
|
||||
}
|
||||
|
||||
extern void touch_atime(struct vfsmount *mnt, struct dentry *dentry);
|
||||
static inline void file_accessed(struct file *file)
|
||||
{
|
||||
if (!(file->f_flags & O_NOATIME))
|
||||
|
@ -1159,7 +1181,7 @@ int sync_inode(struct inode *inode, struct writeback_control *wbc);
|
|||
* directory. The name should be stored in the @name (with the
|
||||
* understanding that it is already pointing to a a %NAME_MAX+1 sized
|
||||
* buffer. get_name() should return %0 on success, a negative error code
|
||||
* or error. @get_name will be called without @parent->i_sem held.
|
||||
* or error. @get_name will be called without @parent->i_mutex held.
|
||||
*
|
||||
* get_parent:
|
||||
* @get_parent should find the parent directory for the given @child which
|
||||
|
@ -1181,7 +1203,7 @@ int sync_inode(struct inode *inode, struct writeback_control *wbc);
|
|||
* nfsd_find_fh_dentry() in either the @obj or @parent parameters.
|
||||
*
|
||||
* Locking rules:
|
||||
* get_parent is called with child->d_inode->i_sem down
|
||||
* get_parent is called with child->d_inode->i_mutex down
|
||||
* get_name is not (which is possibly inconsistent)
|
||||
*/
|
||||
|
||||
|
@ -1268,6 +1290,9 @@ extern void mnt_set_mountpoint(struct vfsmount *, struct dentry *,
|
|||
|
||||
extern int vfs_statfs(struct super_block *, struct kstatfs *);
|
||||
|
||||
/* /sys/fs */
|
||||
extern struct subsystem fs_subsys;
|
||||
|
||||
#define FLOCK_VERIFY_READ 1
|
||||
#define FLOCK_VERIFY_WRITE 2
|
||||
|
||||
|
@ -1313,7 +1338,8 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
|
|||
|
||||
/* fs/open.c */
|
||||
|
||||
extern int do_truncate(struct dentry *, loff_t start, struct file *filp);
|
||||
extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
|
||||
struct file *filp);
|
||||
extern long do_sys_open(const char __user *filename, int flags, int mode);
|
||||
extern struct file *filp_open(const char *, int, int);
|
||||
extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
|
||||
|
@ -1360,6 +1386,12 @@ extern int register_chrdev(unsigned int, const char *,
|
|||
extern int unregister_chrdev(unsigned int, const char *);
|
||||
extern void unregister_chrdev_region(dev_t, unsigned);
|
||||
extern int chrdev_open(struct inode *, struct file *);
|
||||
extern int get_chrdev_list(char *);
|
||||
extern void *acquire_chrdev_list(void);
|
||||
extern int count_chrdev_list(void);
|
||||
extern void *get_next_chrdev(void *);
|
||||
extern int get_chrdev_info(void *, int *, char **);
|
||||
extern void release_chrdev_list(void *);
|
||||
|
||||
/* fs/block_dev.c */
|
||||
#define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */
|
||||
|
@ -1368,6 +1400,11 @@ extern const char *bdevname(struct block_device *bdev, char *buffer);
|
|||
extern struct block_device *lookup_bdev(const char *);
|
||||
extern struct block_device *open_bdev_excl(const char *, int, void *);
|
||||
extern void close_bdev_excl(struct block_device *);
|
||||
extern void *acquire_blkdev_list(void);
|
||||
extern int count_blkdev_list(void);
|
||||
extern void *get_next_blkdev(void *);
|
||||
extern int get_blkdev_info(void *, int *, char **);
|
||||
extern void release_blkdev_list(void *);
|
||||
|
||||
extern void init_special_inode(struct inode *, umode_t, dev_t);
|
||||
|
||||
|
@ -1682,7 +1719,7 @@ extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const vo
|
|||
extern int inode_change_ok(struct inode *, struct iattr *);
|
||||
extern int __must_check inode_setattr(struct inode *, struct iattr *);
|
||||
|
||||
extern void inode_update_time(struct inode *inode, int ctime_too);
|
||||
extern void file_update_time(struct file *file);
|
||||
|
||||
static inline ino_t parent_ino(struct dentry *dentry)
|
||||
{
|
||||
|
|
|
@ -50,14 +50,12 @@ struct gianfar_platform_data {
|
|||
|
||||
/* board specific information */
|
||||
u32 board_flags;
|
||||
const char *bus_id;
|
||||
u32 bus_id;
|
||||
u32 phy_id;
|
||||
u8 mac_addr[6];
|
||||
};
|
||||
|
||||
struct gianfar_mdio_data {
|
||||
/* device specific information */
|
||||
u32 paddr;
|
||||
|
||||
/* board specific information */
|
||||
int irq[32];
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#define FUSE_KERNEL_VERSION 7
|
||||
|
||||
/** Minor version number of this interface */
|
||||
#define FUSE_KERNEL_MINOR_VERSION 3
|
||||
#define FUSE_KERNEL_MINOR_VERSION 5
|
||||
|
||||
/** The node ID of the root inode */
|
||||
#define FUSE_ROOT_ID 1
|
||||
|
@ -53,6 +53,9 @@ struct fuse_kstatfs {
|
|||
__u64 ffree;
|
||||
__u32 bsize;
|
||||
__u32 namelen;
|
||||
__u32 frsize;
|
||||
__u32 padding;
|
||||
__u32 spare[6];
|
||||
};
|
||||
|
||||
#define FATTR_MODE (1 << 0)
|
||||
|
@ -105,12 +108,8 @@ enum fuse_opcode {
|
|||
FUSE_CREATE = 35
|
||||
};
|
||||
|
||||
/* Conservative buffer size for the client */
|
||||
#define FUSE_MAX_IN 8192
|
||||
|
||||
#define FUSE_NAME_MAX 1024
|
||||
#define FUSE_SYMLINK_MAX 4096
|
||||
#define FUSE_XATTR_SIZE_MAX 4096
|
||||
/* The read buffer is required to be at least 8k, but may be much larger */
|
||||
#define FUSE_MIN_READ_BUFFER 8192
|
||||
|
||||
struct fuse_entry_out {
|
||||
__u64 nodeid; /* Inode ID */
|
||||
|
@ -213,6 +212,8 @@ struct fuse_write_out {
|
|||
__u32 padding;
|
||||
};
|
||||
|
||||
#define FUSE_COMPAT_STATFS_SIZE 48
|
||||
|
||||
struct fuse_statfs_out {
|
||||
struct fuse_kstatfs st;
|
||||
};
|
||||
|
@ -243,11 +244,18 @@ struct fuse_access_in {
|
|||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_init_in_out {
|
||||
struct fuse_init_in {
|
||||
__u32 major;
|
||||
__u32 minor;
|
||||
};
|
||||
|
||||
struct fuse_init_out {
|
||||
__u32 major;
|
||||
__u32 minor;
|
||||
__u32 unused[3];
|
||||
__u32 max_write;
|
||||
};
|
||||
|
||||
struct fuse_in_header {
|
||||
__u32 len;
|
||||
__u32 opcode;
|
||||
|
|
|
@ -57,6 +57,7 @@ struct vm_area_struct;
|
|||
__GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \
|
||||
__GFP_NOMEMALLOC|__GFP_HARDWALL)
|
||||
|
||||
/* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */
|
||||
#define GFP_ATOMIC (__GFP_HIGH)
|
||||
#define GFP_NOIO (__GFP_WAIT)
|
||||
#define GFP_NOFS (__GFP_WAIT | __GFP_IO)
|
||||
|
@ -109,6 +110,10 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
|
|||
if (unlikely(order >= MAX_ORDER))
|
||||
return NULL;
|
||||
|
||||
/* Unknown node is current node */
|
||||
if (nid < 0)
|
||||
nid = numa_node_id();
|
||||
|
||||
return __alloc_pages(gfp_mask, order,
|
||||
NODE_DATA(nid)->node_zonelists + gfp_zone(gfp_mask));
|
||||
}
|
||||
|
|
|
@ -93,10 +93,6 @@ extern void synchronize_irq(unsigned int irq);
|
|||
struct task_struct;
|
||||
|
||||
#ifndef CONFIG_VIRT_CPU_ACCOUNTING
|
||||
static inline void account_user_vtime(struct task_struct *tsk)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void account_system_vtime(struct task_struct *tsk)
|
||||
{
|
||||
}
|
||||
|
|
139
include/linux/hrtimer.h
Normal file
139
include/linux/hrtimer.h
Normal file
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* include/linux/hrtimer.h
|
||||
*
|
||||
* hrtimers - High-resolution kernel timers
|
||||
*
|
||||
* Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de>
|
||||
* Copyright(C) 2005, Red Hat, Inc., Ingo Molnar
|
||||
*
|
||||
* data type definitions, declarations, prototypes
|
||||
*
|
||||
* Started by: Thomas Gleixner and Ingo Molnar
|
||||
*
|
||||
* For licencing details see kernel-base/COPYING
|
||||
*/
|
||||
#ifndef _LINUX_HRTIMER_H
|
||||
#define _LINUX_HRTIMER_H
|
||||
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/wait.h>
|
||||
|
||||
/*
|
||||
* Mode arguments of xxx_hrtimer functions:
|
||||
*/
|
||||
enum hrtimer_mode {
|
||||
HRTIMER_ABS, /* Time value is absolute */
|
||||
HRTIMER_REL, /* Time value is relative to now */
|
||||
};
|
||||
|
||||
enum hrtimer_restart {
|
||||
HRTIMER_NORESTART,
|
||||
HRTIMER_RESTART,
|
||||
};
|
||||
|
||||
/*
|
||||
* Timer states:
|
||||
*/
|
||||
enum hrtimer_state {
|
||||
HRTIMER_INACTIVE, /* Timer is inactive */
|
||||
HRTIMER_EXPIRED, /* Timer is expired */
|
||||
HRTIMER_PENDING, /* Timer is pending */
|
||||
};
|
||||
|
||||
struct hrtimer_base;
|
||||
|
||||
/**
|
||||
* struct hrtimer - the basic hrtimer structure
|
||||
*
|
||||
* @node: red black tree node for time ordered insertion
|
||||
* @expires: the absolute expiry time in the hrtimers internal
|
||||
* representation. The time is related to the clock on
|
||||
* which the timer is based.
|
||||
* @state: state of the timer
|
||||
* @function: timer expiry callback function
|
||||
* @data: argument for the callback function
|
||||
* @base: pointer to the timer base (per cpu and per clock)
|
||||
*
|
||||
* The hrtimer structure must be initialized by init_hrtimer_#CLOCKTYPE()
|
||||
*/
|
||||
struct hrtimer {
|
||||
struct rb_node node;
|
||||
ktime_t expires;
|
||||
enum hrtimer_state state;
|
||||
int (*function)(void *);
|
||||
void *data;
|
||||
struct hrtimer_base *base;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct hrtimer_base - the timer base for a specific clock
|
||||
*
|
||||
* @index: clock type index for per_cpu support when moving a timer
|
||||
* to a base on another cpu.
|
||||
* @lock: lock protecting the base and associated timers
|
||||
* @active: red black tree root node for the active timers
|
||||
* @first: pointer to the timer node which expires first
|
||||
* @resolution: the resolution of the clock, in nanoseconds
|
||||
* @get_time: function to retrieve the current time of the clock
|
||||
* @curr_timer: the timer which is executing a callback right now
|
||||
*/
|
||||
struct hrtimer_base {
|
||||
clockid_t index;
|
||||
spinlock_t lock;
|
||||
struct rb_root active;
|
||||
struct rb_node *first;
|
||||
ktime_t resolution;
|
||||
ktime_t (*get_time)(void);
|
||||
struct hrtimer *curr_timer;
|
||||
};
|
||||
|
||||
/*
|
||||
* clock_was_set() is a NOP for non- high-resolution systems. The
|
||||
* time-sorted order guarantees that a timer does not expire early and
|
||||
* is expired in the next softirq when the clock was advanced.
|
||||
*/
|
||||
#define clock_was_set() do { } while (0)
|
||||
|
||||
/* Exported timer functions: */
|
||||
|
||||
/* Initialize timers: */
|
||||
extern void hrtimer_init(struct hrtimer *timer, const clockid_t which_clock);
|
||||
extern void hrtimer_rebase(struct hrtimer *timer, const clockid_t which_clock);
|
||||
|
||||
|
||||
/* Basic timer operations: */
|
||||
extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
|
||||
const enum hrtimer_mode mode);
|
||||
extern int hrtimer_cancel(struct hrtimer *timer);
|
||||
extern int hrtimer_try_to_cancel(struct hrtimer *timer);
|
||||
|
||||
#define hrtimer_restart(timer) hrtimer_start((timer), (timer)->expires, HRTIMER_ABS)
|
||||
|
||||
/* Query timers: */
|
||||
extern ktime_t hrtimer_get_remaining(const struct hrtimer *timer);
|
||||
extern int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp);
|
||||
|
||||
static inline int hrtimer_active(const struct hrtimer *timer)
|
||||
{
|
||||
return timer->state == HRTIMER_PENDING;
|
||||
}
|
||||
|
||||
/* Forward a hrtimer so it expires after now: */
|
||||
extern unsigned long hrtimer_forward(struct hrtimer *timer, ktime_t interval);
|
||||
|
||||
/* Precise sleep: */
|
||||
extern long hrtimer_nanosleep(struct timespec *rqtp,
|
||||
struct timespec __user *rmtp,
|
||||
const enum hrtimer_mode mode,
|
||||
const clockid_t clockid);
|
||||
|
||||
/* Soft interrupt function to run the hrtimer queues: */
|
||||
extern void hrtimer_run_queues(void);
|
||||
|
||||
/* Bootup initialization: */
|
||||
extern void __init hrtimers_init(void);
|
||||
|
||||
#endif
|
|
@ -22,7 +22,7 @@ int hugetlb_report_meminfo(char *);
|
|||
int hugetlb_report_node_meminfo(int, char *);
|
||||
int is_hugepage_mem_enough(size_t);
|
||||
unsigned long hugetlb_total_pages(void);
|
||||
struct page *alloc_huge_page(void);
|
||||
struct page *alloc_huge_page(struct vm_area_struct *, unsigned long);
|
||||
void free_huge_page(struct page *);
|
||||
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
unsigned long address, int write_access);
|
||||
|
@ -97,7 +97,7 @@ static inline unsigned long hugetlb_total_pages(void)
|
|||
#define is_hugepage_only_range(mm, addr, len) 0
|
||||
#define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) \
|
||||
do { } while (0)
|
||||
#define alloc_huge_page() ({ NULL; })
|
||||
#define alloc_huge_page(vma, addr) ({ NULL; })
|
||||
#define free_huge_page(p) ({ (void)(p); BUG(); })
|
||||
#define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; })
|
||||
|
||||
|
|
|
@ -23,14 +23,14 @@
|
|||
#ifndef _LINUX_HWMON_VID_H
|
||||
#define _LINUX_HWMON_VID_H
|
||||
|
||||
int vid_from_reg(int val, int vrm);
|
||||
int vid_which_vrm(void);
|
||||
int vid_from_reg(int val, u8 vrm);
|
||||
u8 vid_which_vrm(void);
|
||||
|
||||
/* vrm is the VRM/VRD document version multiplied by 10.
|
||||
val is in mV to avoid floating point in the kernel.
|
||||
Returned value is the 4-, 5- or 6-bit VID code.
|
||||
Note that only VRM 9.x is supported for now. */
|
||||
static inline int vid_to_reg(int val, int vrm)
|
||||
static inline int vid_to_reg(int val, u8 vrm)
|
||||
{
|
||||
switch (vrm) {
|
||||
case 91: /* VRM 9.1 */
|
||||
|
|
|
@ -25,12 +25,6 @@
|
|||
|
||||
/*
|
||||
* ---- Driver types -----------------------------------------------------
|
||||
* device id name + number function description, i2c address(es)
|
||||
*
|
||||
* Range 1000-1999 range is defined in sensors/sensors.h
|
||||
* Range 0x100 - 0x1ff is for V4L2 Common Components
|
||||
* Range 0xf000 - 0xffff is reserved for local experimentation, and should
|
||||
* never be used in official drivers
|
||||
*/
|
||||
|
||||
#define I2C_DRIVERID_MSP3400 1
|
||||
|
@ -109,14 +103,13 @@
|
|||
#define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */
|
||||
#define I2C_DRIVERID_AKITAIOEXP 74 /* IO Expander on Sharp SL-C1000 */
|
||||
#define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */
|
||||
|
||||
#define I2C_DRIVERID_EXP0 0xF0 /* experimental use id's */
|
||||
#define I2C_DRIVERID_EXP1 0xF1
|
||||
#define I2C_DRIVERID_EXP2 0xF2
|
||||
#define I2C_DRIVERID_EXP3 0xF3
|
||||
#define I2C_DRIVERID_TVP5150 76 /* TVP5150 video decoder */
|
||||
#define I2C_DRIVERID_WM8739 77 /* wm8739 audio processor */
|
||||
#define I2C_DRIVERID_UPD64083 78 /* upd64083 video processor */
|
||||
#define I2C_DRIVERID_UPD64031A 79 /* upd64031a video processor */
|
||||
#define I2C_DRIVERID_SAA717X 80 /* saa717x video encoder */
|
||||
|
||||
#define I2C_DRIVERID_I2CDEV 900
|
||||
#define I2C_DRIVERID_I2CPROC 901
|
||||
#define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */
|
||||
#define I2C_DRIVERID_ALERT 903 /* SMBus Alert Responder Client */
|
||||
|
||||
|
@ -131,15 +124,12 @@
|
|||
#define I2C_DRIVERID_ADM1021 1008
|
||||
#define I2C_DRIVERID_ADM9240 1009
|
||||
#define I2C_DRIVERID_LTC1710 1010
|
||||
#define I2C_DRIVERID_SIS5595 1011
|
||||
#define I2C_DRIVERID_ICSPLL 1012
|
||||
#define I2C_DRIVERID_BT869 1013
|
||||
#define I2C_DRIVERID_MAXILIFE 1014
|
||||
#define I2C_DRIVERID_MATORB 1015
|
||||
#define I2C_DRIVERID_GL520 1016
|
||||
#define I2C_DRIVERID_THMC50 1017
|
||||
#define I2C_DRIVERID_DDCMON 1018
|
||||
#define I2C_DRIVERID_VIA686A 1019
|
||||
#define I2C_DRIVERID_ADM1025 1020
|
||||
#define I2C_DRIVERID_LM87 1021
|
||||
#define I2C_DRIVERID_PCF8574 1022
|
||||
|
@ -151,21 +141,16 @@
|
|||
#define I2C_DRIVERID_FSCPOS 1028
|
||||
#define I2C_DRIVERID_FSCSCY 1029
|
||||
#define I2C_DRIVERID_PCF8591 1030
|
||||
#define I2C_DRIVERID_SMSC47M1 1031
|
||||
#define I2C_DRIVERID_VT1211 1032
|
||||
#define I2C_DRIVERID_LM92 1033
|
||||
#define I2C_DRIVERID_VT8231 1034
|
||||
#define I2C_DRIVERID_SMARTBATT 1035
|
||||
#define I2C_DRIVERID_BMCSENSORS 1036
|
||||
#define I2C_DRIVERID_FS451 1037
|
||||
#define I2C_DRIVERID_W83627HF 1038
|
||||
#define I2C_DRIVERID_LM85 1039
|
||||
#define I2C_DRIVERID_LM83 1040
|
||||
#define I2C_DRIVERID_LM90 1042
|
||||
#define I2C_DRIVERID_ASB100 1043
|
||||
#define I2C_DRIVERID_FSCHER 1046
|
||||
#define I2C_DRIVERID_W83L785TS 1047
|
||||
#define I2C_DRIVERID_SMSC47B397 1050
|
||||
|
||||
/*
|
||||
* ---- Adapter types ----------------------------------------------------
|
||||
|
|
|
@ -105,14 +105,14 @@ extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client,
|
|||
* A driver is capable of handling one or more physical devices present on
|
||||
* I2C adapters. This information is used to inform the driver of adapter
|
||||
* events.
|
||||
*
|
||||
* The driver.owner field should be set to the module owner of this driver.
|
||||
* The driver.name field should be set to the name of this driver.
|
||||
*/
|
||||
|
||||
struct i2c_driver {
|
||||
struct module *owner;
|
||||
char name[32];
|
||||
int id;
|
||||
unsigned int class;
|
||||
unsigned int flags; /* div., see below */
|
||||
|
||||
/* Notifies the driver that a new bus has appeared. This routine
|
||||
* can be used by the driver to test if the bus meets its conditions
|
||||
|
@ -250,18 +250,7 @@ static inline void i2c_set_adapdata (struct i2c_adapter *dev, void *data)
|
|||
dev_set_drvdata (&dev->dev, data);
|
||||
}
|
||||
|
||||
/*flags for the driver struct: */
|
||||
#define I2C_DF_NOTIFY 0x01 /* notify on bus (de/a)ttaches */
|
||||
#if 0
|
||||
/* this flag is gone -- there is a (optional) driver->detach_adapter
|
||||
* callback now which can be used instead */
|
||||
# define I2C_DF_DUMMY 0x02
|
||||
#endif
|
||||
|
||||
/*flags for the client struct: */
|
||||
#define I2C_CLIENT_ALLOW_USE 0x01 /* Client allows access */
|
||||
#define I2C_CLIENT_ALLOW_MULTIPLE_USE 0x02 /* Allow multiple access-locks */
|
||||
/* on an i2c_client */
|
||||
#define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */
|
||||
#define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */
|
||||
/* Must equal I2C_M_TEN below */
|
||||
|
@ -302,26 +291,20 @@ struct i2c_client_address_data {
|
|||
extern int i2c_add_adapter(struct i2c_adapter *);
|
||||
extern int i2c_del_adapter(struct i2c_adapter *);
|
||||
|
||||
extern int i2c_add_driver(struct i2c_driver *);
|
||||
extern int i2c_register_driver(struct module *, struct i2c_driver *);
|
||||
extern int i2c_del_driver(struct i2c_driver *);
|
||||
|
||||
static inline int i2c_add_driver(struct i2c_driver *driver)
|
||||
{
|
||||
return i2c_register_driver(THIS_MODULE, driver);
|
||||
}
|
||||
|
||||
extern int i2c_attach_client(struct i2c_client *);
|
||||
extern int i2c_detach_client(struct i2c_client *);
|
||||
|
||||
/* New function: This is to get an i2c_client-struct for controlling the
|
||||
client either by using i2c_control-function or having the
|
||||
client-module export functions that can be used with the i2c_client
|
||||
-struct. */
|
||||
extern struct i2c_client *i2c_get_client(int driver_id, int adapter_id,
|
||||
struct i2c_client *prev);
|
||||
|
||||
/* Should be used with new function
|
||||
extern struct i2c_client *i2c_get_client(int,int,struct i2c_client *);
|
||||
to make sure that client-struct is valid and that it is okay to access
|
||||
the i2c-client.
|
||||
returns -EACCES if client doesn't allow use (default)
|
||||
returns -EBUSY if client doesn't allow multiple use (default) and
|
||||
usage_count >0 */
|
||||
/* Should be used to make sure that client-struct is valid and that it
|
||||
is okay to access the i2c-client.
|
||||
returns -ENODEV if client has gone in the meantime */
|
||||
extern int i2c_use_client(struct i2c_client *);
|
||||
extern int i2c_release_client(struct i2c_client *);
|
||||
|
||||
|
|
1614
include/linux/i2o.h
1614
include/linux/i2o.h
File diff suppressed because it is too large
Load diff
|
@ -18,6 +18,7 @@
|
|||
#include <linux/bio.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/completion.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/io.h>
|
||||
|
@ -638,7 +639,7 @@ typedef struct ide_drive_s {
|
|||
int crc_count; /* crc counter to reduce drive speed */
|
||||
struct list_head list;
|
||||
struct device gendev;
|
||||
struct semaphore gendev_rel_sem; /* to deal with device release() */
|
||||
struct completion gendev_rel_comp; /* to deal with device release() */
|
||||
} ide_drive_t;
|
||||
|
||||
#define to_ide_device(dev)container_of(dev, ide_drive_t, gendev)
|
||||
|
@ -794,14 +795,14 @@ typedef struct hwif_s {
|
|||
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
|
||||
|
||||
struct device gendev;
|
||||
struct semaphore gendev_rel_sem; /* To deal with device release() */
|
||||
struct completion gendev_rel_comp; /* To deal with device release() */
|
||||
|
||||
void *hwif_data; /* extra hwif data */
|
||||
|
||||
unsigned dma;
|
||||
|
||||
void (*led_act)(void *data, int rw);
|
||||
} ____cacheline_maxaligned_in_smp ide_hwif_t;
|
||||
} ____cacheline_internodealigned_in_smp ide_hwif_t;
|
||||
|
||||
/*
|
||||
* internal ide interrupt handler type
|
||||
|
@ -982,8 +983,13 @@ typedef struct ide_driver_s {
|
|||
ide_startstop_t (*abort)(ide_drive_t *, struct request *rq);
|
||||
ide_proc_entry_t *proc;
|
||||
struct device_driver gen_driver;
|
||||
int (*probe)(ide_drive_t *);
|
||||
void (*remove)(ide_drive_t *);
|
||||
void (*shutdown)(ide_drive_t *);
|
||||
} ide_driver_t;
|
||||
|
||||
#define to_ide_driver(drv) container_of(drv, ide_driver_t, gen_driver)
|
||||
|
||||
int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long);
|
||||
|
||||
/*
|
||||
|
|
|
@ -131,17 +131,17 @@ struct frad_conf
|
|||
/* these are the fields of an RFC 1490 header */
|
||||
struct frhdr
|
||||
{
|
||||
unsigned char control __attribute__((packed));
|
||||
unsigned char control;
|
||||
|
||||
/* for IP packets, this can be the NLPID */
|
||||
unsigned char pad __attribute__((packed));
|
||||
unsigned char pad;
|
||||
|
||||
unsigned char NLPID __attribute__((packed));
|
||||
unsigned char OUI[3] __attribute__((packed));
|
||||
unsigned short PID __attribute__((packed));
|
||||
unsigned char NLPID;
|
||||
unsigned char OUI[3];
|
||||
unsigned short PID;
|
||||
|
||||
#define IP_NLPID pad
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
/* see RFC 1490 for the definition of the following */
|
||||
#define FRAD_I_UI 0x03
|
||||
|
|
|
@ -157,8 +157,7 @@ struct pppox_proto {
|
|||
extern int register_pppox_proto(int proto_num, struct pppox_proto *pp);
|
||||
extern void unregister_pppox_proto(int proto_num);
|
||||
extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */
|
||||
extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
extern int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* PPPoX socket states */
|
||||
enum {
|
||||
|
|
|
@ -45,6 +45,6 @@
|
|||
#ifdef __KERNEL__
|
||||
#include <linux/types.h>
|
||||
|
||||
extern __u32 in_aton(const char *str);
|
||||
extern __be32 in_aton(const char *str);
|
||||
#endif
|
||||
#endif /* _LINUX_INET_H */
|
||||
|
|
|
@ -241,6 +241,18 @@ void __init parse_early_param(void);
|
|||
#define __cpuexitdata __exitdata
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
#define __meminit
|
||||
#define __meminitdata
|
||||
#define __memexit
|
||||
#define __memexitdata
|
||||
#else
|
||||
#define __meminit __init
|
||||
#define __meminitdata __initdata
|
||||
#define __memexit __exit
|
||||
#define __memexitdata __exitdata
|
||||
#endif
|
||||
|
||||
/* Functions marked as __devexit may be discarded at kernel link time, depending
|
||||
on config options. Newer versions of binutils detect references from
|
||||
retained sections to discarded sections and flag an error. Pointers to
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/time.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -511,6 +512,8 @@ struct input_absinfo {
|
|||
#define KEY_FN_S 0x1e3
|
||||
#define KEY_FN_B 0x1e4
|
||||
|
||||
/* We avoid low common keys in module aliases so they don't get huge. */
|
||||
#define KEY_MIN_INTERESTING KEY_MUTE
|
||||
#define KEY_MAX 0x1ff
|
||||
|
||||
/*
|
||||
|
@ -793,6 +796,44 @@ struct ff_effect {
|
|||
|
||||
#define FF_MAX 0x7f
|
||||
|
||||
struct input_device_id {
|
||||
|
||||
kernel_ulong_t flags;
|
||||
|
||||
struct input_id id;
|
||||
|
||||
kernel_ulong_t evbit[EV_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t keybit[KEY_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t relbit[REL_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t absbit[ABS_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t mscbit[MSC_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t ledbit[LED_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t sndbit[SND_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t ffbit[FF_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t swbit[SW_MAX/BITS_PER_LONG+1];
|
||||
|
||||
kernel_ulong_t driver_info;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure for hotplug & device<->driver matching.
|
||||
*/
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_BUS 1
|
||||
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
|
||||
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
|
||||
#define INPUT_DEVICE_ID_MATCH_VERSION 8
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010
|
||||
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020
|
||||
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040
|
||||
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080
|
||||
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100
|
||||
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
|
||||
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
|
||||
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
|
||||
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
|
@ -901,49 +942,11 @@ struct input_dev {
|
|||
};
|
||||
#define to_input_dev(d) container_of(d, struct input_dev, cdev)
|
||||
|
||||
/*
|
||||
* Structure for hotplug & device<->driver matching.
|
||||
*/
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_BUS 1
|
||||
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
|
||||
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
|
||||
#define INPUT_DEVICE_ID_MATCH_VERSION 8
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010
|
||||
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020
|
||||
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040
|
||||
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080
|
||||
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100
|
||||
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
|
||||
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
|
||||
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
|
||||
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_DEVICE\
|
||||
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
|
||||
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\
|
||||
(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
|
||||
|
||||
struct input_device_id {
|
||||
|
||||
unsigned long flags;
|
||||
|
||||
struct input_id id;
|
||||
|
||||
unsigned long evbit[NBITS(EV_MAX)];
|
||||
unsigned long keybit[NBITS(KEY_MAX)];
|
||||
unsigned long relbit[NBITS(REL_MAX)];
|
||||
unsigned long absbit[NBITS(ABS_MAX)];
|
||||
unsigned long mscbit[NBITS(MSC_MAX)];
|
||||
unsigned long ledbit[NBITS(LED_MAX)];
|
||||
unsigned long sndbit[NBITS(SND_MAX)];
|
||||
unsigned long ffbit[NBITS(FF_MAX)];
|
||||
unsigned long swbit[NBITS(SW_MAX)];
|
||||
|
||||
unsigned long driver_info;
|
||||
};
|
||||
|
||||
struct input_handle;
|
||||
|
||||
struct input_handler {
|
||||
|
|
|
@ -79,7 +79,7 @@ static inline void __deprecated save_flags(unsigned long *x)
|
|||
{
|
||||
local_save_flags(*x);
|
||||
}
|
||||
#define save_flags(x) save_flags(&x);
|
||||
#define save_flags(x) save_flags(&x)
|
||||
static inline void __deprecated restore_flags(unsigned long x)
|
||||
{
|
||||
local_irq_restore(x);
|
||||
|
@ -112,7 +112,7 @@ enum
|
|||
TIMER_SOFTIRQ,
|
||||
NET_TX_SOFTIRQ,
|
||||
NET_RX_SOFTIRQ,
|
||||
SCSI_SOFTIRQ,
|
||||
BLOCK_SOFTIRQ,
|
||||
TASKLET_SOFTIRQ
|
||||
};
|
||||
|
||||
|
|
93
include/linux/ioc3.h
Normal file
93
include/linux/ioc3.h
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (c) 2005 Stanislaw Skowronek <skylark@linux-mips.org>
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_IOC3_H
|
||||
#define _LINUX_IOC3_H
|
||||
|
||||
#include <asm/sn/ioc3.h>
|
||||
|
||||
#define IOC3_MAX_SUBMODULES 32
|
||||
|
||||
#define IOC3_CLASS_NONE 0
|
||||
#define IOC3_CLASS_BASE_IP27 1
|
||||
#define IOC3_CLASS_BASE_IP30 2
|
||||
#define IOC3_CLASS_MENET_123 3
|
||||
#define IOC3_CLASS_MENET_4 4
|
||||
#define IOC3_CLASS_CADDUO 5
|
||||
#define IOC3_CLASS_SERIAL 6
|
||||
|
||||
/* One of these per IOC3 */
|
||||
struct ioc3_driver_data {
|
||||
struct list_head list;
|
||||
int id; /* IOC3 sequence number */
|
||||
/* PCI mapping */
|
||||
unsigned long pma; /* physical address */
|
||||
struct __iomem ioc3 *vma; /* pointer to registers */
|
||||
struct pci_dev *pdev; /* PCI device */
|
||||
/* IRQ stuff */
|
||||
int dual_irq; /* set if separate IRQs are used */
|
||||
int irq_io, irq_eth; /* IRQ numbers */
|
||||
/* GPIO magic */
|
||||
spinlock_t gpio_lock;
|
||||
unsigned int gpdr_shadow;
|
||||
/* NIC identifiers */
|
||||
char nic_part[32];
|
||||
char nic_serial[16];
|
||||
char nic_mac[6];
|
||||
/* submodule set */
|
||||
int class;
|
||||
void *data[IOC3_MAX_SUBMODULES]; /* for submodule use */
|
||||
int active[IOC3_MAX_SUBMODULES]; /* set if probe succeeds */
|
||||
/* is_ir_lock must be held while
|
||||
* modifying sio_ie values, so
|
||||
* we can be sure that sio_ie is
|
||||
* not changing when we read it
|
||||
* along with sio_ir.
|
||||
*/
|
||||
spinlock_t ir_lock; /* SIO_IE[SC] mod lock */
|
||||
};
|
||||
|
||||
/* One per submodule */
|
||||
struct ioc3_submodule {
|
||||
char *name; /* descriptive submodule name */
|
||||
struct module *owner; /* owning kernel module */
|
||||
int ethernet; /* set for ethernet drivers */
|
||||
int (*probe) (struct ioc3_submodule *, struct ioc3_driver_data *);
|
||||
int (*remove) (struct ioc3_submodule *, struct ioc3_driver_data *);
|
||||
int id; /* assigned by IOC3, index for the "data" array */
|
||||
/* IRQ stuff */
|
||||
unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */
|
||||
int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */
|
||||
int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int, struct pt_regs *);
|
||||
/* private submodule data */
|
||||
void *data; /* assigned by submodule */
|
||||
};
|
||||
|
||||
/**********************************
|
||||
* Functions needed by submodules *
|
||||
**********************************/
|
||||
|
||||
#define IOC3_W_IES 0
|
||||
#define IOC3_W_IEC 1
|
||||
|
||||
/* registers a submodule for all existing and future IOC3 chips */
|
||||
extern int ioc3_register_submodule(struct ioc3_submodule *);
|
||||
/* unregisters a submodule */
|
||||
extern void ioc3_unregister_submodule(struct ioc3_submodule *);
|
||||
/* enables IRQs indicated by irq_mask for a specified IOC3 chip */
|
||||
extern void ioc3_enable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
|
||||
/* ackowledges specified IRQs */
|
||||
extern void ioc3_ack(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
|
||||
/* disables IRQs indicated by irq_mask for a specified IOC3 chip */
|
||||
extern void ioc3_disable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
|
||||
/* atomically sets GPCR bits */
|
||||
extern void ioc3_gpcr_set(struct ioc3_driver_data *, unsigned int);
|
||||
/* general ireg writer */
|
||||
extern void ioc3_write_ireg(struct ioc3_driver_data *idd, uint32_t value, int reg);
|
||||
|
||||
#endif
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
#ifndef _LINUX_IP_H
|
||||
#define _LINUX_IP_H
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#define IPTOS_TOS_MASK 0x1E
|
||||
|
@ -78,126 +79,6 @@
|
|||
#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
|
||||
#define IPOPT_TS_PRESPEC 3 /* specified modules only */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <net/request_sock.h>
|
||||
#include <net/sock.h>
|
||||
#include <linux/igmp.h>
|
||||
#include <net/flow.h>
|
||||
|
||||
struct ip_options {
|
||||
__u32 faddr; /* Saved first hop address */
|
||||
unsigned char optlen;
|
||||
unsigned char srr;
|
||||
unsigned char rr;
|
||||
unsigned char ts;
|
||||
unsigned char is_setbyuser:1, /* Set by setsockopt? */
|
||||
is_data:1, /* Options in __data, rather than skb */
|
||||
is_strictroute:1, /* Strict source route */
|
||||
srr_is_hit:1, /* Packet destination addr was our one */
|
||||
is_changed:1, /* IP checksum more not valid */
|
||||
rr_needaddr:1, /* Need to record addr of outgoing dev */
|
||||
ts_needtime:1, /* Need to record timestamp */
|
||||
ts_needaddr:1; /* Need to record addr of outgoing dev */
|
||||
unsigned char router_alert;
|
||||
unsigned char __pad1;
|
||||
unsigned char __pad2;
|
||||
unsigned char __data[0];
|
||||
};
|
||||
|
||||
#define optlength(opt) (sizeof(struct ip_options) + opt->optlen)
|
||||
|
||||
struct inet_request_sock {
|
||||
struct request_sock req;
|
||||
u32 loc_addr;
|
||||
u32 rmt_addr;
|
||||
u16 rmt_port;
|
||||
u16 snd_wscale : 4,
|
||||
rcv_wscale : 4,
|
||||
tstamp_ok : 1,
|
||||
sack_ok : 1,
|
||||
wscale_ok : 1,
|
||||
ecn_ok : 1,
|
||||
acked : 1;
|
||||
struct ip_options *opt;
|
||||
};
|
||||
|
||||
static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk)
|
||||
{
|
||||
return (struct inet_request_sock *)sk;
|
||||
}
|
||||
|
||||
struct ipv6_pinfo;
|
||||
|
||||
struct inet_sock {
|
||||
/* sk and pinet6 has to be the first two members of inet_sock */
|
||||
struct sock sk;
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
struct ipv6_pinfo *pinet6;
|
||||
#endif
|
||||
/* Socket demultiplex comparisons on incoming packets. */
|
||||
__u32 daddr; /* Foreign IPv4 addr */
|
||||
__u32 rcv_saddr; /* Bound local IPv4 addr */
|
||||
__u16 dport; /* Destination port */
|
||||
__u16 num; /* Local port */
|
||||
__u32 saddr; /* Sending source */
|
||||
__s16 uc_ttl; /* Unicast TTL */
|
||||
__u16 cmsg_flags;
|
||||
struct ip_options *opt;
|
||||
__u16 sport; /* Source port */
|
||||
__u16 id; /* ID counter for DF pkts */
|
||||
__u8 tos; /* TOS */
|
||||
__u8 mc_ttl; /* Multicasting TTL */
|
||||
__u8 pmtudisc;
|
||||
unsigned recverr : 1,
|
||||
freebind : 1,
|
||||
hdrincl : 1,
|
||||
mc_loop : 1;
|
||||
int mc_index; /* Multicast device index */
|
||||
__u32 mc_addr;
|
||||
struct ip_mc_socklist *mc_list; /* Group array */
|
||||
/*
|
||||
* Following members are used to retain the infomation to build
|
||||
* an ip header on each ip fragmentation while the socket is corked.
|
||||
*/
|
||||
struct {
|
||||
unsigned int flags;
|
||||
unsigned int fragsize;
|
||||
struct ip_options *opt;
|
||||
struct rtable *rt;
|
||||
int length; /* Total length of all frames */
|
||||
u32 addr;
|
||||
struct flowi fl;
|
||||
} cork;
|
||||
};
|
||||
|
||||
#define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */
|
||||
#define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */
|
||||
|
||||
static inline struct inet_sock *inet_sk(const struct sock *sk)
|
||||
{
|
||||
return (struct inet_sock *)sk;
|
||||
}
|
||||
|
||||
static inline void __inet_sk_copy_descendant(struct sock *sk_to,
|
||||
const struct sock *sk_from,
|
||||
const int ancestor_size)
|
||||
{
|
||||
memcpy(inet_sk(sk_to) + 1, inet_sk(sk_from) + 1,
|
||||
sk_from->sk_prot->obj_size - ancestor_size);
|
||||
}
|
||||
#if !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE))
|
||||
static inline void inet_sk_copy_descendant(struct sock *sk_to,
|
||||
const struct sock *sk_from)
|
||||
{
|
||||
__inet_sk_copy_descendant(sk_to, sk_from, sizeof(struct inet_sock));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern int inet_sk_rebuild_header(struct sock *sk);
|
||||
|
||||
struct iphdr {
|
||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 ihl:4,
|
||||
|
@ -209,14 +90,14 @@ struct iphdr {
|
|||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
__u8 tos;
|
||||
__u16 tot_len;
|
||||
__u16 id;
|
||||
__u16 frag_off;
|
||||
__be16 tot_len;
|
||||
__be16 id;
|
||||
__be16 frag_off;
|
||||
__u8 ttl;
|
||||
__u8 protocol;
|
||||
__u16 check;
|
||||
__u32 saddr;
|
||||
__u32 daddr;
|
||||
__be32 saddr;
|
||||
__be32 daddr;
|
||||
/*The options start here. */
|
||||
};
|
||||
|
||||
|
|
|
@ -171,12 +171,13 @@ enum {
|
|||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/in6.h> /* struct sockaddr_in6 */
|
||||
#include <linux/icmpv6.h>
|
||||
#include <net/if_inet6.h> /* struct ipv6_mc_socklist */
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/udp.h>
|
||||
|
||||
#include <net/if_inet6.h> /* struct ipv6_mc_socklist */
|
||||
#include <net/inet_sock.h>
|
||||
|
||||
/*
|
||||
This structure contains results of exthdrs parsing
|
||||
as offsets from skb->nh.
|
||||
|
@ -190,6 +191,10 @@ struct inet6_skb_parm {
|
|||
__u16 srcrt;
|
||||
__u16 dst1;
|
||||
__u16 lastopt;
|
||||
__u32 nhoff;
|
||||
__u16 flags;
|
||||
|
||||
#define IP6SKB_XFRM_TRANSFORMED 1
|
||||
};
|
||||
|
||||
#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
|
||||
|
@ -199,18 +204,17 @@ static inline int inet6_iif(const struct sk_buff *skb)
|
|||
return IP6CB(skb)->iif;
|
||||
}
|
||||
|
||||
struct tcp6_request_sock {
|
||||
struct tcp_request_sock req;
|
||||
struct inet6_request_sock {
|
||||
struct in6_addr loc_addr;
|
||||
struct in6_addr rmt_addr;
|
||||
struct sk_buff *pktopts;
|
||||
int iif;
|
||||
};
|
||||
|
||||
static inline struct tcp6_request_sock *tcp6_rsk(const struct request_sock *sk)
|
||||
{
|
||||
return (struct tcp6_request_sock *)sk;
|
||||
}
|
||||
struct tcp6_request_sock {
|
||||
struct tcp_request_sock tcp6rsk_tcp;
|
||||
struct inet6_request_sock tcp6rsk_inet6;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ipv6_pinfo - ipv6 private area
|
||||
|
@ -298,12 +302,36 @@ struct tcp6_sock {
|
|||
struct ipv6_pinfo inet6;
|
||||
};
|
||||
|
||||
extern int inet6_sk_rebuild_header(struct sock *sk);
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
|
||||
{
|
||||
return inet_sk(__sk)->pinet6;
|
||||
}
|
||||
|
||||
static inline struct inet6_request_sock *
|
||||
inet6_rsk(const struct request_sock *rsk)
|
||||
{
|
||||
return (struct inet6_request_sock *)(((u8 *)rsk) +
|
||||
inet_rsk(rsk)->inet6_rsk_offset);
|
||||
}
|
||||
|
||||
static inline u32 inet6_rsk_offset(struct request_sock *rsk)
|
||||
{
|
||||
return rsk->rsk_ops->obj_size - sizeof(struct inet6_request_sock);
|
||||
}
|
||||
|
||||
static inline struct request_sock *inet6_reqsk_alloc(struct request_sock_ops *ops)
|
||||
{
|
||||
struct request_sock *req = reqsk_alloc(ops);
|
||||
|
||||
if (req != NULL)
|
||||
inet_rsk(req)->inet6_rsk_offset = inet6_rsk_offset(req);
|
||||
|
||||
return req;
|
||||
}
|
||||
|
||||
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||
{
|
||||
return (struct raw6_sock *)sk;
|
||||
|
@ -323,28 +351,37 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to,
|
|||
#define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only)
|
||||
#define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk))
|
||||
|
||||
#include <linux/tcp.h>
|
||||
|
||||
struct tcp6_timewait_sock {
|
||||
struct tcp_timewait_sock tw_v6_sk;
|
||||
struct in6_addr tw_v6_daddr;
|
||||
struct in6_addr tw_v6_rcv_saddr;
|
||||
struct inet6_timewait_sock {
|
||||
struct in6_addr tw_v6_daddr;
|
||||
struct in6_addr tw_v6_rcv_saddr;
|
||||
};
|
||||
|
||||
static inline struct tcp6_timewait_sock *tcp6_twsk(const struct sock *sk)
|
||||
struct tcp6_timewait_sock {
|
||||
struct tcp_timewait_sock tcp6tw_tcp;
|
||||
struct inet6_timewait_sock tcp6tw_inet6;
|
||||
};
|
||||
|
||||
static inline u16 inet6_tw_offset(const struct proto *prot)
|
||||
{
|
||||
return (struct tcp6_timewait_sock *)sk;
|
||||
return prot->twsk_prot->twsk_obj_size -
|
||||
sizeof(struct inet6_timewait_sock);
|
||||
}
|
||||
|
||||
static inline struct in6_addr *__tcp_v6_rcv_saddr(const struct sock *sk)
|
||||
static inline struct inet6_timewait_sock *inet6_twsk(const struct sock *sk)
|
||||
{
|
||||
return (struct inet6_timewait_sock *)(((u8 *)sk) +
|
||||
inet_twsk(sk)->tw_ipv6_offset);
|
||||
}
|
||||
|
||||
static inline struct in6_addr *__inet6_rcv_saddr(const struct sock *sk)
|
||||
{
|
||||
return likely(sk->sk_state != TCP_TIME_WAIT) ?
|
||||
&inet6_sk(sk)->rcv_saddr : &tcp6_twsk(sk)->tw_v6_rcv_saddr;
|
||||
&inet6_sk(sk)->rcv_saddr : &inet6_twsk(sk)->tw_v6_rcv_saddr;
|
||||
}
|
||||
|
||||
static inline struct in6_addr *tcp_v6_rcv_saddr(const struct sock *sk)
|
||||
static inline struct in6_addr *inet6_rcv_saddr(const struct sock *sk)
|
||||
{
|
||||
return sk->sk_family == AF_INET6 ? __tcp_v6_rcv_saddr(sk) : NULL;
|
||||
return sk->sk_family == AF_INET6 ? __inet6_rcv_saddr(sk) : NULL;
|
||||
}
|
||||
|
||||
static inline int inet_v6_ipv6only(const struct sock *sk)
|
||||
|
@ -361,13 +398,19 @@ static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct inet6_request_sock *
|
||||
inet6_rsk(const struct request_sock *rsk)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define __tcp_v6_rcv_saddr(__sk) NULL
|
||||
#define tcp_v6_rcv_saddr(__sk) NULL
|
||||
#define __inet6_rcv_saddr(__sk) NULL
|
||||
#define inet6_rcv_saddr(__sk) NULL
|
||||
#define tcp_twsk_ipv6only(__sk) 0
|
||||
#define inet_v6_ipv6only(__sk) 0
|
||||
#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/config.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
#if !defined(CONFIG_ARCH_S390)
|
||||
#if !defined(CONFIG_S390)
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/cache.h>
|
||||
|
@ -221,6 +221,17 @@ extern void note_interrupt(unsigned int irq, irq_desc_t *desc,
|
|||
extern int can_request_irq(unsigned int irq, unsigned long irqflags);
|
||||
|
||||
extern void init_irq_proc(void);
|
||||
|
||||
#ifdef CONFIG_AUTO_IRQ_AFFINITY
|
||||
extern int select_smp_affinity(unsigned int irq);
|
||||
#else
|
||||
static inline int
|
||||
select_smp_affinity(unsigned int irq)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
extern hw_irq_controller no_irq_type; /* needed in every arch ? */
|
||||
|
|
|
@ -282,43 +282,43 @@ typedef struct setup_parm {
|
|||
|
||||
typedef struct T30_s {
|
||||
/* session parameters */
|
||||
__u8 resolution __attribute__ ((packed));
|
||||
__u8 rate __attribute__ ((packed));
|
||||
__u8 width __attribute__ ((packed));
|
||||
__u8 length __attribute__ ((packed));
|
||||
__u8 compression __attribute__ ((packed));
|
||||
__u8 ecm __attribute__ ((packed));
|
||||
__u8 binary __attribute__ ((packed));
|
||||
__u8 scantime __attribute__ ((packed));
|
||||
__u8 id[FAXIDLEN] __attribute__ ((packed));
|
||||
__u8 resolution;
|
||||
__u8 rate;
|
||||
__u8 width;
|
||||
__u8 length;
|
||||
__u8 compression;
|
||||
__u8 ecm;
|
||||
__u8 binary;
|
||||
__u8 scantime;
|
||||
__u8 id[FAXIDLEN];
|
||||
/* additional parameters */
|
||||
__u8 phase __attribute__ ((packed));
|
||||
__u8 direction __attribute__ ((packed));
|
||||
__u8 code __attribute__ ((packed));
|
||||
__u8 badlin __attribute__ ((packed));
|
||||
__u8 badmul __attribute__ ((packed));
|
||||
__u8 bor __attribute__ ((packed));
|
||||
__u8 fet __attribute__ ((packed));
|
||||
__u8 pollid[FAXIDLEN] __attribute__ ((packed));
|
||||
__u8 cq __attribute__ ((packed));
|
||||
__u8 cr __attribute__ ((packed));
|
||||
__u8 ctcrty __attribute__ ((packed));
|
||||
__u8 minsp __attribute__ ((packed));
|
||||
__u8 phcto __attribute__ ((packed));
|
||||
__u8 rel __attribute__ ((packed));
|
||||
__u8 nbc __attribute__ ((packed));
|
||||
__u8 phase;
|
||||
__u8 direction;
|
||||
__u8 code;
|
||||
__u8 badlin;
|
||||
__u8 badmul;
|
||||
__u8 bor;
|
||||
__u8 fet;
|
||||
__u8 pollid[FAXIDLEN];
|
||||
__u8 cq;
|
||||
__u8 cr;
|
||||
__u8 ctcrty;
|
||||
__u8 minsp;
|
||||
__u8 phcto;
|
||||
__u8 rel;
|
||||
__u8 nbc;
|
||||
/* remote station parameters */
|
||||
__u8 r_resolution __attribute__ ((packed));
|
||||
__u8 r_rate __attribute__ ((packed));
|
||||
__u8 r_width __attribute__ ((packed));
|
||||
__u8 r_length __attribute__ ((packed));
|
||||
__u8 r_compression __attribute__ ((packed));
|
||||
__u8 r_ecm __attribute__ ((packed));
|
||||
__u8 r_binary __attribute__ ((packed));
|
||||
__u8 r_scantime __attribute__ ((packed));
|
||||
__u8 r_id[FAXIDLEN] __attribute__ ((packed));
|
||||
__u8 r_code __attribute__ ((packed));
|
||||
} T30_s;
|
||||
__u8 r_resolution;
|
||||
__u8 r_rate;
|
||||
__u8 r_width;
|
||||
__u8 r_length;
|
||||
__u8 r_compression;
|
||||
__u8 r_ecm;
|
||||
__u8 r_binary;
|
||||
__u8 r_scantime;
|
||||
__u8 r_id[FAXIDLEN];
|
||||
__u8 r_code;
|
||||
} __attribute__((packed)) T30_s;
|
||||
|
||||
#define ISDN_TTY_FAX_CONN_IN 0
|
||||
#define ISDN_TTY_FAX_CONN_OUT 1
|
||||
|
|
|
@ -4,47 +4,12 @@
|
|||
/*#define ISICOM_DEBUG*/
|
||||
/*#define ISICOM_DEBUG_DTR_RTS*/
|
||||
|
||||
|
||||
/*
|
||||
* Firmware Loader definitions ...
|
||||
*/
|
||||
|
||||
#define __MultiTech ('M'<<8)
|
||||
#define MIOCTL_LOAD_FIRMWARE (__MultiTech | 0x01)
|
||||
#define MIOCTL_READ_FIRMWARE (__MultiTech | 0x02)
|
||||
#define MIOCTL_XFER_CTRL (__MultiTech | 0x03)
|
||||
#define MIOCTL_RESET_CARD (__MultiTech | 0x04)
|
||||
|
||||
#define DATA_SIZE 16
|
||||
|
||||
typedef struct {
|
||||
unsigned short exec_segment;
|
||||
unsigned short exec_addr;
|
||||
} exec_record;
|
||||
|
||||
typedef struct {
|
||||
int board; /* Board to load */
|
||||
unsigned short addr;
|
||||
unsigned short count;
|
||||
} bin_header;
|
||||
|
||||
typedef struct {
|
||||
int board; /* Board to load */
|
||||
unsigned short addr;
|
||||
unsigned short count;
|
||||
unsigned short segment;
|
||||
unsigned char bin_data[DATA_SIZE];
|
||||
} bin_frame;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define YES 1
|
||||
#define NO 0
|
||||
|
||||
#define ISILOAD_MISC_MINOR 155 /* /dev/isctl */
|
||||
#define ISILOAD_NAME "ISILoad"
|
||||
|
||||
/*
|
||||
/*
|
||||
* ISICOM Driver definitions ...
|
||||
*
|
||||
*/
|
||||
|
@ -55,8 +20,8 @@ typedef struct {
|
|||
* PCI definitions
|
||||
*/
|
||||
|
||||
#define DEVID_COUNT 9
|
||||
#define VENDOR_ID 0x10b5
|
||||
#define DEVID_COUNT 9
|
||||
#define VENDOR_ID 0x10b5
|
||||
|
||||
/*
|
||||
* These are now officially allocated numbers
|
||||
|
@ -66,9 +31,9 @@ typedef struct {
|
|||
#define ISICOM_CMAJOR 113 /* callout */
|
||||
#define ISICOM_MAGIC (('M' << 8) | 'T')
|
||||
|
||||
#define WAKEUP_CHARS 256 /* hard coded for now */
|
||||
#define TX_SIZE 254
|
||||
|
||||
#define WAKEUP_CHARS 256 /* hard coded for now */
|
||||
#define TX_SIZE 254
|
||||
|
||||
#define BOARD_COUNT 4
|
||||
#define PORT_COUNT (BOARD_COUNT*16)
|
||||
|
||||
|
@ -98,18 +63,15 @@ typedef struct {
|
|||
#define ISICOM_INITIATE_XONXOFF 0x04
|
||||
#define ISICOM_RESPOND_XONXOFF 0x08
|
||||
|
||||
#define InterruptTheCard(base) (outw(0,(base)+0xc))
|
||||
#define ClearInterrupt(base) (inw((base)+0x0a))
|
||||
|
||||
#define BOARD(line) (((line) >> 4) & 0x3)
|
||||
|
||||
/* isi kill queue bitmap */
|
||||
|
||||
|
||||
#define ISICOM_KILLTX 0x01
|
||||
#define ISICOM_KILLRX 0x02
|
||||
|
||||
/* isi_board status bitmap */
|
||||
|
||||
|
||||
#define FIRMWARE_LOADED 0x0001
|
||||
#define BOARD_ACTIVE 0x0002
|
||||
|
||||
|
@ -123,9 +85,8 @@ typedef struct {
|
|||
#define ISI_RTS 0x0200
|
||||
|
||||
|
||||
#define ISI_TXOK 0x0001
|
||||
|
||||
#define ISI_TXOK 0x0001
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* ISICOM_H */
|
||||
|
||||
|
|
|
@ -497,6 +497,12 @@ struct transaction_s
|
|||
*/
|
||||
struct journal_head *t_checkpoint_list;
|
||||
|
||||
/*
|
||||
* Doubly-linked circular list of all buffers submitted for IO while
|
||||
* checkpointing. [j_list_lock]
|
||||
*/
|
||||
struct journal_head *t_checkpoint_io_list;
|
||||
|
||||
/*
|
||||
* Doubly-linked circular list of temporary buffers currently undergoing
|
||||
* IO in the log [j_list_lock]
|
||||
|
@ -843,7 +849,7 @@ extern void journal_commit_transaction(journal_t *);
|
|||
|
||||
/* Checkpoint list management */
|
||||
int __journal_clean_checkpoint_list(journal_t *journal);
|
||||
void __journal_remove_checkpoint(struct journal_head *);
|
||||
int __journal_remove_checkpoint(struct journal_head *);
|
||||
void __journal_insert_checkpoint(struct journal_head *, transaction_t *);
|
||||
|
||||
/* Buffer IO */
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
#include <asm/semaphore.h>
|
||||
|
||||
struct jffs2_inode_info {
|
||||
/* We need an internal semaphore similar to inode->i_sem.
|
||||
/* We need an internal mutex similar to inode->i_mutex.
|
||||
Unfortunately, we can't used the existing one, because
|
||||
either the GC would deadlock, or we'd have to release it
|
||||
before letting GC proceed. Or we'd have to put ugliness
|
||||
into the GC code so it didn't attempt to obtain the i_sem
|
||||
into the GC code so it didn't attempt to obtain the i_mutex
|
||||
for the inode(s) which are already locked */
|
||||
struct semaphore sem;
|
||||
|
||||
|
|
|
@ -1,21 +1,12 @@
|
|||
#ifndef _LINUX_JIFFIES_H
|
||||
#define _LINUX_JIFFIES_H
|
||||
|
||||
#include <linux/calc64.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/timex.h>
|
||||
#include <asm/param.h> /* for HZ */
|
||||
#include <asm/div64.h>
|
||||
|
||||
#ifndef div_long_long_rem
|
||||
#define div_long_long_rem(dividend,divisor,remainder) \
|
||||
({ \
|
||||
u64 result = dividend; \
|
||||
*remainder = do_div(result,divisor); \
|
||||
result; \
|
||||
})
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following defines establish the engineering parameters of the PLL
|
||||
|
@ -373,8 +364,11 @@ jiffies_to_timeval(const unsigned long jiffies, struct timeval *value)
|
|||
* one divide.
|
||||
*/
|
||||
u64 nsec = (u64)jiffies * TICK_NSEC;
|
||||
value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec);
|
||||
value->tv_usec /= NSEC_PER_USEC;
|
||||
long tv_usec;
|
||||
|
||||
value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &tv_usec);
|
||||
tv_usec /= NSEC_PER_USEC;
|
||||
value->tv_usec = tv_usec;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -151,7 +151,7 @@ extern unsigned int keymap_count;
|
|||
|
||||
static inline void con_schedule_flip(struct tty_struct *t)
|
||||
{
|
||||
schedule_work(&t->flip.work);
|
||||
schedule_work(&t->buf.work);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -47,6 +47,8 @@ extern int console_printk[];
|
|||
#define default_console_loglevel (console_printk[3])
|
||||
|
||||
struct completion;
|
||||
struct pt_regs;
|
||||
struct user;
|
||||
|
||||
/**
|
||||
* might_sleep - annotation for functions that can sleep
|
||||
|
@ -123,6 +125,8 @@ extern int __kernel_text_address(unsigned long addr);
|
|||
extern int kernel_text_address(unsigned long addr);
|
||||
extern int session_of_pgrp(int pgrp);
|
||||
|
||||
extern void dump_thread(struct pt_regs *regs, struct user *dump);
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
asmlinkage int vprintk(const char *fmt, va_list args)
|
||||
__attribute__ ((format (printf, 1, 0)));
|
||||
|
@ -212,6 +216,7 @@ extern void dump_stack(void);
|
|||
((unsigned char *)&addr)[1], \
|
||||
((unsigned char *)&addr)[2], \
|
||||
((unsigned char *)&addr)[3]
|
||||
#define NIPQUAD_FMT "%u.%u.%u.%u"
|
||||
|
||||
#define NIP6(addr) \
|
||||
ntohs((addr).s6_addr16[0]), \
|
||||
|
@ -222,6 +227,7 @@ extern void dump_stack(void);
|
|||
ntohs((addr).s6_addr16[5]), \
|
||||
ntohs((addr).s6_addr16[6]), \
|
||||
ntohs((addr).s6_addr16[7])
|
||||
#define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
|
||||
|
||||
#if defined(__LITTLE_ENDIAN)
|
||||
#define HIPQUAD(addr) \
|
||||
|
@ -286,6 +292,15 @@ extern void dump_stack(void);
|
|||
1; \
|
||||
})
|
||||
|
||||
/*
|
||||
* Check at compile time that 'function' is a certain type, or is a pointer
|
||||
* to that type (needs to use typedef for the function type.)
|
||||
*/
|
||||
#define typecheck_fn(type,function) \
|
||||
({ typeof(type) __tmp = function; \
|
||||
(void)__tmp; \
|
||||
})
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define SI_LOAD_SHIFT 16
|
||||
|
@ -316,8 +331,6 @@ extern int randomize_va_space;
|
|||
#endif
|
||||
|
||||
/* Trap pasters of __FUNCTION__ at compile-time */
|
||||
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 95
|
||||
#define __FUNCTION__ (__func__)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -41,7 +41,7 @@ typedef unsigned long kimage_entry_t;
|
|||
#define IND_DONE 0x4
|
||||
#define IND_SOURCE 0x8
|
||||
|
||||
#define KEXEC_SEGMENT_MAX 8
|
||||
#define KEXEC_SEGMENT_MAX 16
|
||||
struct kexec_segment {
|
||||
void __user *buf;
|
||||
size_t bufsz;
|
||||
|
@ -119,12 +119,15 @@ extern struct kimage *kexec_image;
|
|||
#define KEXEC_ARCH_PPC64 (21 << 16)
|
||||
#define KEXEC_ARCH_IA_64 (50 << 16)
|
||||
#define KEXEC_ARCH_S390 (22 << 16)
|
||||
#define KEXEC_ARCH_SH (42 << 16)
|
||||
|
||||
#define KEXEC_FLAGS (KEXEC_ON_CRASH) /* List of defined/legal kexec flags */
|
||||
|
||||
/* Location of a reserved region to hold the crash kernel.
|
||||
*/
|
||||
extern struct resource crashk_res;
|
||||
typedef u32 note_buf_t[MAX_NOTE_BYTES/4];
|
||||
extern note_buf_t *crash_notes;
|
||||
|
||||
#else /* !CONFIG_KEXEC */
|
||||
struct pt_regs;
|
||||
|
|
|
@ -177,6 +177,8 @@ struct key {
|
|||
/*
|
||||
* kernel managed key type definition
|
||||
*/
|
||||
typedef int (*request_key_actor_t)(struct key *key, struct key *authkey, const char *op);
|
||||
|
||||
struct key_type {
|
||||
/* name of the type */
|
||||
const char *name;
|
||||
|
@ -193,14 +195,6 @@ struct key_type {
|
|||
*/
|
||||
int (*instantiate)(struct key *key, const void *data, size_t datalen);
|
||||
|
||||
/* duplicate a key of this type (optional)
|
||||
* - the source key will be locked against change
|
||||
* - the new description will be attached
|
||||
* - the quota will have been adjusted automatically from
|
||||
* source->quotalen
|
||||
*/
|
||||
int (*duplicate)(struct key *key, const struct key *source);
|
||||
|
||||
/* update a key of this type (optional)
|
||||
* - this method should call key_payload_reserve() to recalculate the
|
||||
* quota consumption
|
||||
|
@ -226,6 +220,16 @@ struct key_type {
|
|||
*/
|
||||
long (*read)(const struct key *key, char __user *buffer, size_t buflen);
|
||||
|
||||
/* handle request_key() for this type instead of invoking
|
||||
* /sbin/request-key (optional)
|
||||
* - key is the key to instantiate
|
||||
* - authkey is the authority to assume when instantiating this key
|
||||
* - op is the operation to be done, usually "create"
|
||||
* - the call must not return until the instantiation process has run
|
||||
* its course
|
||||
*/
|
||||
request_key_actor_t request_key;
|
||||
|
||||
/* internal fields */
|
||||
struct list_head link; /* link in types list */
|
||||
};
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#define KEY_SPEC_USER_KEYRING -4 /* - key ID for UID-specific keyring */
|
||||
#define KEY_SPEC_USER_SESSION_KEYRING -5 /* - key ID for UID-session keyring */
|
||||
#define KEY_SPEC_GROUP_KEYRING -6 /* - key ID for GID-specific keyring */
|
||||
#define KEY_SPEC_REQKEY_AUTH_KEY -7 /* - key ID for assumed request_key auth key */
|
||||
|
||||
/* request-key default keyrings */
|
||||
#define KEY_REQKEY_DEFL_NO_CHANGE -1
|
||||
|
@ -46,5 +47,7 @@
|
|||
#define KEYCTL_INSTANTIATE 12 /* instantiate a partially constructed key */
|
||||
#define KEYCTL_NEGATE 13 /* negate a partially constructed key */
|
||||
#define KEYCTL_SET_REQKEY_KEYRING 14 /* set default request-key keyring */
|
||||
#define KEYCTL_SET_TIMEOUT 15 /* set key timeout */
|
||||
#define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */
|
||||
|
||||
#endif /* _LINUX_KEYCTL_H */
|
||||
|
|
|
@ -23,14 +23,27 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/rwsem.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/kobject_uevent.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#define KOBJ_NAME_LEN 20
|
||||
#define KOBJ_NAME_LEN 20
|
||||
#define UEVENT_HELPER_PATH_LEN 256
|
||||
|
||||
/* counter to tag the hotplug event, read only except for the kobject core */
|
||||
extern u64 hotplug_seqnum;
|
||||
/* path to the userspace helper executed on an event */
|
||||
extern char uevent_helper[];
|
||||
|
||||
/* counter to tag the uevent, read only except for the kobject core */
|
||||
extern u64 uevent_seqnum;
|
||||
|
||||
/* the actions here must match the proper string in lib/kobject_uevent.c */
|
||||
typedef int __bitwise kobject_action_t;
|
||||
enum kobject_action {
|
||||
KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */
|
||||
KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */
|
||||
KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */
|
||||
KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */
|
||||
KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */
|
||||
};
|
||||
|
||||
struct kobject {
|
||||
const char * k_name;
|
||||
|
@ -87,15 +100,14 @@ struct kobj_type {
|
|||
* of object; multiple ksets can belong to one subsystem. All
|
||||
* ksets of a subsystem share the subsystem's lock.
|
||||
*
|
||||
* Each kset can support hotplugging; if it does, it will be given
|
||||
* the opportunity to filter out specific kobjects from being
|
||||
* reported, as well as to add its own "data" elements to the
|
||||
* environment being passed to the hotplug helper.
|
||||
* Each kset can support specific event variables; it can
|
||||
* supress the event generation or add subsystem specific
|
||||
* variables carried with the event.
|
||||
*/
|
||||
struct kset_hotplug_ops {
|
||||
struct kset_uevent_ops {
|
||||
int (*filter)(struct kset *kset, struct kobject *kobj);
|
||||
const char *(*name)(struct kset *kset, struct kobject *kobj);
|
||||
int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp,
|
||||
int (*uevent)(struct kset *kset, struct kobject *kobj, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
};
|
||||
|
||||
|
@ -105,7 +117,7 @@ struct kset {
|
|||
struct list_head list;
|
||||
spinlock_t list_lock;
|
||||
struct kobject kobj;
|
||||
struct kset_hotplug_ops * hotplug_ops;
|
||||
struct kset_uevent_ops * uevent_ops;
|
||||
};
|
||||
|
||||
|
||||
|
@ -153,20 +165,20 @@ struct subsystem {
|
|||
struct rw_semaphore rwsem;
|
||||
};
|
||||
|
||||
#define decl_subsys(_name,_type,_hotplug_ops) \
|
||||
#define decl_subsys(_name,_type,_uevent_ops) \
|
||||
struct subsystem _name##_subsys = { \
|
||||
.kset = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.hotplug_ops =_hotplug_ops, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
} \
|
||||
}
|
||||
#define decl_subsys_name(_varname,_name,_type,_hotplug_ops) \
|
||||
#define decl_subsys_name(_varname,_name,_type,_uevent_ops) \
|
||||
struct subsystem _varname##_subsys = { \
|
||||
.kset = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.hotplug_ops =_hotplug_ops, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
} \
|
||||
}
|
||||
|
||||
|
@ -241,15 +253,17 @@ struct subsys_attribute {
|
|||
extern int subsys_create_file(struct subsystem * , struct subsys_attribute *);
|
||||
extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *);
|
||||
|
||||
#ifdef CONFIG_HOTPLUG
|
||||
void kobject_hotplug(struct kobject *kobj, enum kobject_action action);
|
||||
int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
|
||||
#if defined(CONFIG_HOTPLUG) & defined(CONFIG_NET)
|
||||
void kobject_uevent(struct kobject *kobj, enum kobject_action action);
|
||||
|
||||
int add_uevent_var(char **envp, int num_envp, int *cur_index,
|
||||
char *buffer, int buffer_size, int *cur_len,
|
||||
const char *format, ...)
|
||||
__attribute__((format (printf, 7, 8)));
|
||||
#else
|
||||
static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { }
|
||||
static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
|
||||
static inline void kobject_uevent(struct kobject *kobj, enum kobject_action action) { }
|
||||
|
||||
static inline int add_uevent_var(char **envp, int num_envp, int *cur_index,
|
||||
char *buffer, int buffer_size, int *cur_len,
|
||||
const char *format, ...)
|
||||
{ return 0; }
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
* kobject_uevent.h - list of kobject user events that can be generated
|
||||
*
|
||||
* Copyright (C) 2004 IBM Corp.
|
||||
* Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
|
||||
*
|
||||
* This file is released under the GPLv2.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _KOBJECT_EVENT_H_
|
||||
#define _KOBJECT_EVENT_H_
|
||||
|
||||
#define HOTPLUG_PATH_LEN 256
|
||||
|
||||
/* path to the hotplug userspace helper executed on an event */
|
||||
extern char hotplug_path[];
|
||||
|
||||
/*
|
||||
* If you add an action here, you must also add the proper string to the
|
||||
* lib/kobject_uevent.c file.
|
||||
*/
|
||||
typedef int __bitwise kobject_action_t;
|
||||
enum kobject_action {
|
||||
KOBJ_ADD = (__force kobject_action_t) 0x01, /* add event, for hotplug */
|
||||
KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* remove event, for hotplug */
|
||||
KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* a sysfs attribute file has changed */
|
||||
KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices */
|
||||
KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices */
|
||||
KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* offline event for hotplug devices */
|
||||
KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* online event for hotplug devices */
|
||||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_KOBJECT_UEVENT
|
||||
int kobject_uevent(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr);
|
||||
int kobject_uevent_atomic(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr);
|
||||
#else
|
||||
static inline int kobject_uevent(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int kobject_uevent_atomic(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -68,6 +68,9 @@ struct kprobe {
|
|||
/* list of kprobes for multi-handler support */
|
||||
struct list_head list;
|
||||
|
||||
/* Indicates that the corresponding module has been ref counted */
|
||||
unsigned int mod_refcounted;
|
||||
|
||||
/*count the number of times this probe was temporarily disarmed */
|
||||
unsigned long nmissed;
|
||||
|
||||
|
@ -149,11 +152,10 @@ struct kretprobe_instance {
|
|||
};
|
||||
|
||||
extern spinlock_t kretprobe_lock;
|
||||
extern struct semaphore kprobe_mutex;
|
||||
extern int arch_prepare_kprobe(struct kprobe *p);
|
||||
extern void arch_copy_kprobe(struct kprobe *p);
|
||||
extern void arch_arm_kprobe(struct kprobe *p);
|
||||
extern void arch_disarm_kprobe(struct kprobe *p);
|
||||
extern void arch_remove_kprobe(struct kprobe *p);
|
||||
extern int arch_init_kprobes(void);
|
||||
extern void show_registers(struct pt_regs *regs);
|
||||
extern kprobe_opcode_t *get_insn_slot(void);
|
||||
|
|
284
include/linux/ktime.h
Normal file
284
include/linux/ktime.h
Normal file
|
@ -0,0 +1,284 @@
|
|||
/*
|
||||
* include/linux/ktime.h
|
||||
*
|
||||
* ktime_t - nanosecond-resolution time format.
|
||||
*
|
||||
* Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de>
|
||||
* Copyright(C) 2005, Red Hat, Inc., Ingo Molnar
|
||||
*
|
||||
* data type definitions, declarations, prototypes and macros.
|
||||
*
|
||||
* Started by: Thomas Gleixner and Ingo Molnar
|
||||
*
|
||||
* For licencing details see kernel-base/COPYING
|
||||
*/
|
||||
#ifndef _LINUX_KTIME_H
|
||||
#define _LINUX_KTIME_H
|
||||
|
||||
#include <linux/time.h>
|
||||
#include <linux/jiffies.h>
|
||||
|
||||
/*
|
||||
* ktime_t:
|
||||
*
|
||||
* On 64-bit CPUs a single 64-bit variable is used to store the hrtimers
|
||||
* internal representation of time values in scalar nanoseconds. The
|
||||
* design plays out best on 64-bit CPUs, where most conversions are
|
||||
* NOPs and most arithmetic ktime_t operations are plain arithmetic
|
||||
* operations.
|
||||
*
|
||||
* On 32-bit CPUs an optimized representation of the timespec structure
|
||||
* is used to avoid expensive conversions from and to timespecs. The
|
||||
* endian-aware order of the tv struct members is choosen to allow
|
||||
* mathematical operations on the tv64 member of the union too, which
|
||||
* for certain operations produces better code.
|
||||
*
|
||||
* For architectures with efficient support for 64/32-bit conversions the
|
||||
* plain scalar nanosecond based representation can be selected by the
|
||||
* config switch CONFIG_KTIME_SCALAR.
|
||||
*/
|
||||
typedef union {
|
||||
s64 tv64;
|
||||
#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)
|
||||
struct {
|
||||
# ifdef __BIG_ENDIAN
|
||||
s32 sec, nsec;
|
||||
# else
|
||||
s32 nsec, sec;
|
||||
# endif
|
||||
} tv;
|
||||
#endif
|
||||
} ktime_t;
|
||||
|
||||
#define KTIME_MAX (~((u64)1 << 63))
|
||||
|
||||
/*
|
||||
* ktime_t definitions when using the 64-bit scalar representation:
|
||||
*/
|
||||
|
||||
#if (BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)
|
||||
|
||||
/* Define a ktime_t variable and initialize it to zero: */
|
||||
#define DEFINE_KTIME(kt) ktime_t kt = { .tv64 = 0 }
|
||||
|
||||
/**
|
||||
* ktime_set - Set a ktime_t variable from a seconds/nanoseconds value
|
||||
*
|
||||
* @secs: seconds to set
|
||||
* @nsecs: nanoseconds to set
|
||||
*
|
||||
* Return the ktime_t representation of the value
|
||||
*/
|
||||
static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
|
||||
{
|
||||
return (ktime_t) { .tv64 = (s64)secs * NSEC_PER_SEC + (s64)nsecs };
|
||||
}
|
||||
|
||||
/* Subtract two ktime_t variables. rem = lhs -rhs: */
|
||||
#define ktime_sub(lhs, rhs) \
|
||||
({ (ktime_t){ .tv64 = (lhs).tv64 - (rhs).tv64 }; })
|
||||
|
||||
/* Add two ktime_t variables. res = lhs + rhs: */
|
||||
#define ktime_add(lhs, rhs) \
|
||||
({ (ktime_t){ .tv64 = (lhs).tv64 + (rhs).tv64 }; })
|
||||
|
||||
/*
|
||||
* Add a ktime_t variable and a scalar nanosecond value.
|
||||
* res = kt + nsval:
|
||||
*/
|
||||
#define ktime_add_ns(kt, nsval) \
|
||||
({ (ktime_t){ .tv64 = (kt).tv64 + (nsval) }; })
|
||||
|
||||
/* convert a timespec to ktime_t format: */
|
||||
#define timespec_to_ktime(ts) ktime_set((ts).tv_sec, (ts).tv_nsec)
|
||||
|
||||
/* convert a timeval to ktime_t format: */
|
||||
#define timeval_to_ktime(tv) ktime_set((tv).tv_sec, (tv).tv_usec * 1000)
|
||||
|
||||
/* Map the ktime_t to timespec conversion to ns_to_timespec function */
|
||||
#define ktime_to_timespec(kt) ns_to_timespec((kt).tv64)
|
||||
|
||||
/* Map the ktime_t to timeval conversion to ns_to_timeval function */
|
||||
#define ktime_to_timeval(kt) ns_to_timeval((kt).tv64)
|
||||
|
||||
/* Map the ktime_t to clock_t conversion to the inline in jiffies.h: */
|
||||
#define ktime_to_clock_t(kt) nsec_to_clock_t((kt).tv64)
|
||||
|
||||
/* Convert ktime_t to nanoseconds - NOP in the scalar storage format: */
|
||||
#define ktime_to_ns(kt) ((kt).tv64)
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* Helper macros/inlines to get the ktime_t math right in the timespec
|
||||
* representation. The macros are sometimes ugly - their actual use is
|
||||
* pretty okay-ish, given the circumstances. We do all this for
|
||||
* performance reasons. The pure scalar nsec_t based code was nice and
|
||||
* simple, but created too many 64-bit / 32-bit conversions and divisions.
|
||||
*
|
||||
* Be especially aware that negative values are represented in a way
|
||||
* that the tv.sec field is negative and the tv.nsec field is greater
|
||||
* or equal to zero but less than nanoseconds per second. This is the
|
||||
* same representation which is used by timespecs.
|
||||
*
|
||||
* tv.sec < 0 and 0 >= tv.nsec < NSEC_PER_SEC
|
||||
*/
|
||||
|
||||
/* Define a ktime_t variable and initialize it to zero: */
|
||||
#define DEFINE_KTIME(kt) ktime_t kt = { .tv64 = 0 }
|
||||
|
||||
/* Set a ktime_t variable to a value in sec/nsec representation: */
|
||||
static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
|
||||
{
|
||||
return (ktime_t) { .tv = { .sec = secs, .nsec = nsecs } };
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_sub - subtract two ktime_t variables
|
||||
*
|
||||
* @lhs: minuend
|
||||
* @rhs: subtrahend
|
||||
*
|
||||
* Returns the remainder of the substraction
|
||||
*/
|
||||
static inline ktime_t ktime_sub(const ktime_t lhs, const ktime_t rhs)
|
||||
{
|
||||
ktime_t res;
|
||||
|
||||
res.tv64 = lhs.tv64 - rhs.tv64;
|
||||
if (res.tv.nsec < 0)
|
||||
res.tv.nsec += NSEC_PER_SEC;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_add - add two ktime_t variables
|
||||
*
|
||||
* @add1: addend1
|
||||
* @add2: addend2
|
||||
*
|
||||
* Returns the sum of addend1 and addend2
|
||||
*/
|
||||
static inline ktime_t ktime_add(const ktime_t add1, const ktime_t add2)
|
||||
{
|
||||
ktime_t res;
|
||||
|
||||
res.tv64 = add1.tv64 + add2.tv64;
|
||||
/*
|
||||
* performance trick: the (u32) -NSEC gives 0x00000000Fxxxxxxx
|
||||
* so we subtract NSEC_PER_SEC and add 1 to the upper 32 bit.
|
||||
*
|
||||
* it's equivalent to:
|
||||
* tv.nsec -= NSEC_PER_SEC
|
||||
* tv.sec ++;
|
||||
*/
|
||||
if (res.tv.nsec >= NSEC_PER_SEC)
|
||||
res.tv64 += (u32)-NSEC_PER_SEC;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_add_ns - Add a scalar nanoseconds value to a ktime_t variable
|
||||
*
|
||||
* @kt: addend
|
||||
* @nsec: the scalar nsec value to add
|
||||
*
|
||||
* Returns the sum of kt and nsec in ktime_t format
|
||||
*/
|
||||
extern ktime_t ktime_add_ns(const ktime_t kt, u64 nsec);
|
||||
|
||||
/**
|
||||
* timespec_to_ktime - convert a timespec to ktime_t format
|
||||
*
|
||||
* @ts: the timespec variable to convert
|
||||
*
|
||||
* Returns a ktime_t variable with the converted timespec value
|
||||
*/
|
||||
static inline ktime_t timespec_to_ktime(const struct timespec ts)
|
||||
{
|
||||
return (ktime_t) { .tv = { .sec = (s32)ts.tv_sec,
|
||||
.nsec = (s32)ts.tv_nsec } };
|
||||
}
|
||||
|
||||
/**
|
||||
* timeval_to_ktime - convert a timeval to ktime_t format
|
||||
*
|
||||
* @tv: the timeval variable to convert
|
||||
*
|
||||
* Returns a ktime_t variable with the converted timeval value
|
||||
*/
|
||||
static inline ktime_t timeval_to_ktime(const struct timeval tv)
|
||||
{
|
||||
return (ktime_t) { .tv = { .sec = (s32)tv.tv_sec,
|
||||
.nsec = (s32)tv.tv_usec * 1000 } };
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_to_timespec - convert a ktime_t variable to timespec format
|
||||
*
|
||||
* @kt: the ktime_t variable to convert
|
||||
*
|
||||
* Returns the timespec representation of the ktime value
|
||||
*/
|
||||
static inline struct timespec ktime_to_timespec(const ktime_t kt)
|
||||
{
|
||||
return (struct timespec) { .tv_sec = (time_t) kt.tv.sec,
|
||||
.tv_nsec = (long) kt.tv.nsec };
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_to_timeval - convert a ktime_t variable to timeval format
|
||||
*
|
||||
* @kt: the ktime_t variable to convert
|
||||
*
|
||||
* Returns the timeval representation of the ktime value
|
||||
*/
|
||||
static inline struct timeval ktime_to_timeval(const ktime_t kt)
|
||||
{
|
||||
return (struct timeval) {
|
||||
.tv_sec = (time_t) kt.tv.sec,
|
||||
.tv_usec = (suseconds_t) (kt.tv.nsec / NSEC_PER_USEC) };
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_to_clock_t - convert a ktime_t variable to clock_t format
|
||||
* @kt: the ktime_t variable to convert
|
||||
*
|
||||
* Returns a clock_t variable with the converted value
|
||||
*/
|
||||
static inline clock_t ktime_to_clock_t(const ktime_t kt)
|
||||
{
|
||||
return nsec_to_clock_t( (u64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec);
|
||||
}
|
||||
|
||||
/**
|
||||
* ktime_to_ns - convert a ktime_t variable to scalar nanoseconds
|
||||
* @kt: the ktime_t variable to convert
|
||||
*
|
||||
* Returns the scalar nanoseconds representation of kt
|
||||
*/
|
||||
static inline u64 ktime_to_ns(const ktime_t kt)
|
||||
{
|
||||
return (u64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The resolution of the clocks. The resolution value is returned in
|
||||
* the clock_getres() system call to give application programmers an
|
||||
* idea of the (in)accuracy of timers. Timer values are rounded up to
|
||||
* this resolution values.
|
||||
*/
|
||||
#define KTIME_REALTIME_RES (ktime_t){ .tv64 = TICK_NSEC }
|
||||
#define KTIME_MONOTONIC_RES (ktime_t){ .tv64 = TICK_NSEC }
|
||||
|
||||
/* Get the monotonic time in timespec format: */
|
||||
extern void ktime_get_ts(struct timespec *ts);
|
||||
|
||||
/* Get the real (wall-) time in timespec format: */
|
||||
#define ktime_get_real_ts(ts) getnstimeofday(ts)
|
||||
|
||||
#endif
|
|
@ -124,6 +124,8 @@ enum {
|
|||
ATA_FLAG_DEBUGMSG = (1 << 10),
|
||||
ATA_FLAG_NO_ATAPI = (1 << 11), /* No ATAPI support */
|
||||
|
||||
ATA_FLAG_SUSPENDED = (1 << 12), /* port is suspended */
|
||||
|
||||
ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */
|
||||
ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */
|
||||
ATA_QCFLAG_SINGLE = (1 << 4), /* no s/g, just a single buffer */
|
||||
|
@ -436,6 +438,8 @@ extern void ata_std_ports(struct ata_ioports *ioaddr);
|
|||
extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
|
||||
unsigned int n_ports);
|
||||
extern void ata_pci_remove_one (struct pci_dev *pdev);
|
||||
extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state);
|
||||
extern int ata_pci_device_resume(struct pci_dev *pdev);
|
||||
#endif /* CONFIG_PCI */
|
||||
extern int ata_device_add(const struct ata_probe_ent *ent);
|
||||
extern void ata_host_set_remove(struct ata_host_set *host_set);
|
||||
|
@ -445,6 +449,10 @@ extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmn
|
|||
extern int ata_scsi_error(struct Scsi_Host *host);
|
||||
extern int ata_scsi_release(struct Scsi_Host *host);
|
||||
extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
|
||||
extern int ata_scsi_device_resume(struct scsi_device *);
|
||||
extern int ata_scsi_device_suspend(struct scsi_device *);
|
||||
extern int ata_device_resume(struct ata_port *, struct ata_device *);
|
||||
extern int ata_device_suspend(struct ata_port *, struct ata_device *);
|
||||
extern int ata_ratelimit(void);
|
||||
|
||||
/*
|
||||
|
@ -480,7 +488,8 @@ extern u8 ata_bmdma_status(struct ata_port *ap);
|
|||
extern void ata_bmdma_irq_clear(struct ata_port *ap);
|
||||
extern void ata_qc_complete(struct ata_queued_cmd *qc);
|
||||
extern void ata_eng_timeout(struct ata_port *ap);
|
||||
extern void ata_scsi_simulate(u16 *id, struct scsi_cmnd *cmd,
|
||||
extern void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev,
|
||||
struct scsi_cmnd *cmd,
|
||||
void (*done)(struct scsi_cmnd *));
|
||||
extern int ata_std_bios_param(struct scsi_device *sdev,
|
||||
struct block_device *bdev,
|
||||
|
@ -490,6 +499,8 @@ extern int ata_scsi_slave_config(struct scsi_device *sdev);
|
|||
/*
|
||||
* Timing helpers
|
||||
*/
|
||||
|
||||
extern unsigned int ata_pio_need_iordy(const struct ata_device *);
|
||||
extern int ata_timing_compute(struct ata_device *, unsigned short,
|
||||
struct ata_timing *, int, int);
|
||||
extern void ata_timing_merge(const struct ata_timing *,
|
||||
|
|
|
@ -435,6 +435,20 @@ static inline void list_splice_init(struct list_head *list,
|
|||
&pos->member != (head); \
|
||||
pos = n, n = list_entry(n->member.next, typeof(*n), member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_safe_reverse - iterate backwards over list of given type safe against
|
||||
* removal of list entry
|
||||
* @pos: the type * to use as a loop counter.
|
||||
* @n: another type * to use as temporary storage
|
||||
* @head: the head for your list.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_for_each_entry_safe_reverse(pos, n, head, member) \
|
||||
for (pos = list_entry((head)->prev, typeof(*pos), member), \
|
||||
n = list_entry(pos->member.prev, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = n, n = list_entry(n->member.prev, typeof(*n), member))
|
||||
|
||||
/**
|
||||
* list_for_each_rcu - iterate over an rcu-protected list
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
|
|
|
@ -172,7 +172,7 @@ extern struct nlm_host *nlm_find_client(void);
|
|||
/*
|
||||
* Server-side lock handling
|
||||
*/
|
||||
int nlmsvc_async_call(struct nlm_rqst *, u32, rpc_action);
|
||||
int nlmsvc_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *);
|
||||
u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *,
|
||||
struct nlm_lock *, int, struct nlm_cookie *);
|
||||
u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *);
|
||||
|
|
|
@ -58,9 +58,9 @@ struct loop_device {
|
|||
struct bio *lo_bio;
|
||||
struct bio *lo_biotail;
|
||||
int lo_state;
|
||||
struct semaphore lo_sem;
|
||||
struct completion lo_done;
|
||||
struct completion lo_bh_done;
|
||||
struct semaphore lo_ctl_mutex;
|
||||
struct semaphore lo_bh_mutex;
|
||||
int lo_pending;
|
||||
|
||||
request_queue_t *lo_queue;
|
||||
|
|
|
@ -70,21 +70,15 @@ static inline void unregister_memory_notifier(struct notifier_block *nb)
|
|||
{
|
||||
}
|
||||
#else
|
||||
extern int register_memory(struct memory_block *, struct mem_section *section, struct node *);
|
||||
extern int register_new_memory(struct mem_section *);
|
||||
extern int unregister_memory_section(struct mem_section *);
|
||||
extern int memory_dev_init(void);
|
||||
extern int register_memory_notifier(struct notifier_block *nb);
|
||||
extern void unregister_memory_notifier(struct notifier_block *nb);
|
||||
extern int remove_memory_block(unsigned long, struct mem_section *, int);
|
||||
|
||||
#define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT)
|
||||
|
||||
extern int invalidate_phys_mapping(unsigned long, unsigned long);
|
||||
struct notifier_block;
|
||||
|
||||
extern int register_memory_notifier(struct notifier_block *nb);
|
||||
extern void unregister_memory_notifier(struct notifier_block *nb);
|
||||
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
#define hotplug_memory_notifier(fn, pri) { \
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
|
||||
/* Flags for mbind */
|
||||
#define MPOL_MF_STRICT (1<<0) /* Verify existing pages in the mapping */
|
||||
#define MPOL_MF_MOVE (1<<1) /* Move pages owned by this process to conform to mapping */
|
||||
#define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to mapping */
|
||||
#define MPOL_MF_INTERNAL (1<<3) /* Internal flags start here */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
@ -65,6 +68,7 @@ struct mempolicy {
|
|||
nodemask_t nodes; /* interleave */
|
||||
/* undefined for default */
|
||||
} v;
|
||||
nodemask_t cpuset_mems_allowed; /* mempolicy relative to these nodes */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -109,14 +113,6 @@ static inline int mpol_equal(struct mempolicy *a, struct mempolicy *b)
|
|||
|
||||
#define mpol_set_vma_default(vma) ((vma)->vm_policy = NULL)
|
||||
|
||||
/*
|
||||
* Hugetlb policy. i386 hugetlb so far works with node numbers
|
||||
* instead of zone lists, so give it special interfaces for now.
|
||||
*/
|
||||
extern int mpol_first_node(struct vm_area_struct *vma, unsigned long addr);
|
||||
extern int mpol_node_valid(int nid, struct vm_area_struct *vma,
|
||||
unsigned long addr);
|
||||
|
||||
/*
|
||||
* Tree of shared policies for a shared memory region.
|
||||
* Maintain the policies in a pseudo mm that contains vmas. The vmas
|
||||
|
@ -136,12 +132,8 @@ struct shared_policy {
|
|||
spinlock_t lock;
|
||||
};
|
||||
|
||||
static inline void mpol_shared_policy_init(struct shared_policy *info)
|
||||
{
|
||||
info->root = RB_ROOT;
|
||||
spin_lock_init(&info->lock);
|
||||
}
|
||||
|
||||
void mpol_shared_policy_init(struct shared_policy *info, int policy,
|
||||
nodemask_t *nodes);
|
||||
int mpol_set_shared_policy(struct shared_policy *info,
|
||||
struct vm_area_struct *vma,
|
||||
struct mempolicy *new);
|
||||
|
@ -149,13 +141,37 @@ void mpol_free_shared_policy(struct shared_policy *p);
|
|||
struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp,
|
||||
unsigned long idx);
|
||||
|
||||
struct mempolicy *get_vma_policy(struct task_struct *task,
|
||||
struct vm_area_struct *vma, unsigned long addr);
|
||||
|
||||
extern void numa_default_policy(void);
|
||||
extern void numa_policy_init(void);
|
||||
extern void numa_policy_rebind(const nodemask_t *old, const nodemask_t *new);
|
||||
extern void mpol_rebind_policy(struct mempolicy *pol, const nodemask_t *new);
|
||||
extern void mpol_rebind_task(struct task_struct *tsk,
|
||||
const nodemask_t *new);
|
||||
extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new);
|
||||
#define set_cpuset_being_rebound(x) (cpuset_being_rebound = (x))
|
||||
|
||||
#ifdef CONFIG_CPUSET
|
||||
#define current_cpuset_is_being_rebound() \
|
||||
(cpuset_being_rebound == current->cpuset)
|
||||
#else
|
||||
#define current_cpuset_is_being_rebound() 0
|
||||
#endif
|
||||
|
||||
extern struct mempolicy default_policy;
|
||||
extern struct zonelist *huge_zonelist(struct vm_area_struct *vma,
|
||||
unsigned long addr);
|
||||
|
||||
extern int policy_zone;
|
||||
|
||||
static inline void check_highest_zone(int k)
|
||||
{
|
||||
if (k > policy_zone)
|
||||
policy_zone = k;
|
||||
}
|
||||
|
||||
int do_migrate_pages(struct mm_struct *mm,
|
||||
const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags);
|
||||
|
||||
extern void *cpuset_being_rebound; /* Trigger mpol_copy vma rebind */
|
||||
|
||||
#else
|
||||
|
||||
|
@ -182,17 +198,6 @@ static inline struct mempolicy *mpol_copy(struct mempolicy *old)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline int mpol_first_node(struct vm_area_struct *vma, unsigned long a)
|
||||
{
|
||||
return numa_node_id();
|
||||
}
|
||||
|
||||
static inline int
|
||||
mpol_node_valid(int nid, struct vm_area_struct *vma, unsigned long a)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct shared_policy {};
|
||||
|
||||
static inline int mpol_set_shared_policy(struct shared_policy *info,
|
||||
|
@ -202,7 +207,8 @@ static inline int mpol_set_shared_policy(struct shared_policy *info,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline void mpol_shared_policy_init(struct shared_policy *info)
|
||||
static inline void mpol_shared_policy_init(struct shared_policy *info,
|
||||
int policy, nodemask_t *nodes)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -227,11 +233,38 @@ static inline void numa_default_policy(void)
|
|||
{
|
||||
}
|
||||
|
||||
static inline void numa_policy_rebind(const nodemask_t *old,
|
||||
static inline void mpol_rebind_policy(struct mempolicy *pol,
|
||||
const nodemask_t *new)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mpol_rebind_task(struct task_struct *tsk,
|
||||
const nodemask_t *new)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new)
|
||||
{
|
||||
}
|
||||
|
||||
#define set_cpuset_being_rebound(x) do {} while (0)
|
||||
|
||||
static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma,
|
||||
unsigned long addr)
|
||||
{
|
||||
return NODE_DATA(0)->node_zonelists + gfp_zone(GFP_HIGHUSER);
|
||||
}
|
||||
|
||||
static inline int do_migrate_pages(struct mm_struct *mm,
|
||||
const nodemask_t *from_nodes,
|
||||
const nodemask_t *to_nodes, int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void check_highest_zone(int k)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_NUMA */
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/capability.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
@ -13,6 +14,7 @@
|
|||
#include <linux/rbtree.h>
|
||||
#include <linux/prio_tree.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
struct mempolicy;
|
||||
struct anon_vma;
|
||||
|
@ -223,24 +225,27 @@ struct page {
|
|||
* & limit reverse map searches.
|
||||
*/
|
||||
union {
|
||||
unsigned long private; /* Mapping-private opaque data:
|
||||
* usually used for buffer_heads
|
||||
* if PagePrivate set; used for
|
||||
* swp_entry_t if PageSwapCache
|
||||
* When page is free, this indicates
|
||||
* order in the buddy system.
|
||||
*/
|
||||
struct {
|
||||
unsigned long private; /* Mapping-private opaque data:
|
||||
* usually used for buffer_heads
|
||||
* if PagePrivate set; used for
|
||||
* swp_entry_t if PageSwapCache.
|
||||
* When page is free, this
|
||||
* indicates order in the buddy
|
||||
* system.
|
||||
*/
|
||||
struct address_space *mapping; /* If low bit clear, points to
|
||||
* inode address_space, or NULL.
|
||||
* If page mapped as anonymous
|
||||
* memory, low bit is set, and
|
||||
* it points to anon_vma object:
|
||||
* see PAGE_MAPPING_ANON below.
|
||||
*/
|
||||
};
|
||||
#if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS
|
||||
spinlock_t ptl;
|
||||
spinlock_t ptl;
|
||||
#endif
|
||||
} u;
|
||||
struct address_space *mapping; /* If low bit clear, points to
|
||||
* inode address_space, or NULL.
|
||||
* If page mapped as anonymous
|
||||
* memory, low bit is set, and
|
||||
* it points to anon_vma object:
|
||||
* see PAGE_MAPPING_ANON below.
|
||||
*/
|
||||
};
|
||||
pgoff_t index; /* Our offset within mapping. */
|
||||
struct list_head lru; /* Pageout list, eg. active_list
|
||||
* protected by zone->lru_lock !
|
||||
|
@ -261,8 +266,8 @@ struct page {
|
|||
#endif /* WANT_PAGE_VIRTUAL */
|
||||
};
|
||||
|
||||
#define page_private(page) ((page)->u.private)
|
||||
#define set_page_private(page, v) ((page)->u.private = (v))
|
||||
#define page_private(page) ((page)->private)
|
||||
#define set_page_private(page, v) ((page)->private = (v))
|
||||
|
||||
/*
|
||||
* FIXME: take this include out, include page-flags.h in
|
||||
|
@ -308,7 +313,7 @@ struct page {
|
|||
*/
|
||||
#define get_page_testone(p) atomic_inc_and_test(&(p)->_count)
|
||||
|
||||
#define set_page_count(p,v) atomic_set(&(p)->_count, v - 1)
|
||||
#define set_page_count(p,v) atomic_set(&(p)->_count, (v) - 1)
|
||||
#define __put_page(p) atomic_dec(&(p)->_count)
|
||||
|
||||
extern void FASTCALL(__page_cache_release(struct page *));
|
||||
|
@ -507,7 +512,7 @@ static inline void set_page_links(struct page *page, unsigned long zone,
|
|||
extern struct page *mem_map;
|
||||
#endif
|
||||
|
||||
static inline void *lowmem_page_address(struct page *page)
|
||||
static __always_inline void *lowmem_page_address(struct page *page)
|
||||
{
|
||||
return __va(page_to_pfn(page) << PAGE_SHIFT);
|
||||
}
|
||||
|
@ -634,14 +639,38 @@ struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
|
|||
int shmem_lock(struct file *file, int lock, struct user_struct *user);
|
||||
#else
|
||||
#define shmem_nopage filemap_nopage
|
||||
#define shmem_lock(a, b, c) ({0;}) /* always in memory, no need to lock */
|
||||
#define shmem_set_policy(a, b) (0)
|
||||
#define shmem_get_policy(a, b) (NULL)
|
||||
|
||||
static inline int shmem_lock(struct file *file, int lock,
|
||||
struct user_struct *user)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int shmem_set_policy(struct vm_area_struct *vma,
|
||||
struct mempolicy *new)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
|
||||
unsigned long addr)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags);
|
||||
extern int shmem_mmap(struct file *file, struct vm_area_struct *vma);
|
||||
|
||||
int shmem_zero_setup(struct vm_area_struct *);
|
||||
|
||||
#ifndef CONFIG_MMU
|
||||
extern unsigned long shmem_get_unmapped_area(struct file *file,
|
||||
unsigned long addr,
|
||||
unsigned long len,
|
||||
unsigned long pgoff,
|
||||
unsigned long flags);
|
||||
#endif
|
||||
|
||||
static inline int can_do_mlock(void)
|
||||
{
|
||||
if (capable(CAP_IPC_LOCK))
|
||||
|
@ -690,14 +719,31 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
|
|||
}
|
||||
|
||||
extern int vmtruncate(struct inode * inode, loff_t offset);
|
||||
extern int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end);
|
||||
extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
|
||||
extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot);
|
||||
extern int __handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
|
||||
|
||||
static inline int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, int write_access)
|
||||
#ifdef CONFIG_MMU
|
||||
extern int __handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma,
|
||||
unsigned long address, int write_access);
|
||||
|
||||
static inline int handle_mm_fault(struct mm_struct *mm,
|
||||
struct vm_area_struct *vma, unsigned long address,
|
||||
int write_access)
|
||||
{
|
||||
return __handle_mm_fault(mm, vma, address, write_access) & (~VM_FAULT_WRITE);
|
||||
return __handle_mm_fault(mm, vma, address, write_access) &
|
||||
(~VM_FAULT_WRITE);
|
||||
}
|
||||
#else
|
||||
static inline int handle_mm_fault(struct mm_struct *mm,
|
||||
struct vm_area_struct *vma, unsigned long address,
|
||||
int write_access)
|
||||
{
|
||||
/* should never happen if there's no MMU */
|
||||
BUG();
|
||||
return VM_FAULT_SIGBUS;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int make_pages_present(unsigned long addr, unsigned long end);
|
||||
extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
|
||||
|
@ -774,7 +820,7 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a
|
|||
* overflow into the next struct page (as it might with DEBUG_SPINLOCK).
|
||||
* When freeing, reset page->mapping so free_pages_check won't complain.
|
||||
*/
|
||||
#define __pte_lockptr(page) &((page)->u.ptl)
|
||||
#define __pte_lockptr(page) &((page)->ptl)
|
||||
#define pte_lock_init(_page) do { \
|
||||
spin_lock_init(__pte_lockptr(_page)); \
|
||||
} while (0)
|
||||
|
@ -896,6 +942,8 @@ extern unsigned long do_brk(unsigned long, unsigned long);
|
|||
/* filemap.c */
|
||||
extern unsigned long page_unuse(struct page *);
|
||||
extern void truncate_inode_pages(struct address_space *, loff_t);
|
||||
extern void truncate_inode_pages_range(struct address_space *,
|
||||
loff_t lstart, loff_t lend);
|
||||
|
||||
/* generic vm_area_ops exported for stackable file systems */
|
||||
extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
|
||||
|
@ -978,6 +1026,9 @@ static inline void vm_stat_account(struct mm_struct *mm,
|
|||
static inline void
|
||||
kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
if (!PageHighMem(page) && !enable)
|
||||
mutex_debug_check_no_locks_freed(page_address(page),
|
||||
numpages * PAGE_SIZE);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -993,5 +1044,12 @@ int in_gate_area_no_task(unsigned long addr);
|
|||
/* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */
|
||||
#define OOM_DISABLE -17
|
||||
|
||||
int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *,
|
||||
void __user *, size_t *, loff_t *);
|
||||
int shrink_slab(unsigned long scanned, gfp_t gfp_mask,
|
||||
unsigned long lru_pages);
|
||||
void drop_pagecache(void);
|
||||
void drop_slab(void);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_MM_H */
|
||||
|
|
|
@ -38,3 +38,25 @@ del_page_from_lru(struct zone *zone, struct page *page)
|
|||
zone->nr_inactive--;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Isolate one page from the LRU lists.
|
||||
*
|
||||
* - zone->lru_lock must be held
|
||||
*/
|
||||
static inline int __isolate_lru_page(struct page *page)
|
||||
{
|
||||
if (unlikely(!TestClearPageLRU(page)))
|
||||
return 0;
|
||||
|
||||
if (get_page_testone(page)) {
|
||||
/*
|
||||
* It is being freed elsewhere
|
||||
*/
|
||||
__put_page(page);
|
||||
SetPageLRU(page);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,12 @@ struct mmc_csd {
|
|||
unsigned int tacc_ns;
|
||||
unsigned int max_dtr;
|
||||
unsigned int read_blkbits;
|
||||
unsigned int write_blkbits;
|
||||
unsigned int capacity;
|
||||
unsigned int read_partial:1,
|
||||
read_misalign:1,
|
||||
write_partial:1,
|
||||
write_misalign:1;
|
||||
};
|
||||
|
||||
struct sd_scr {
|
||||
|
|
|
@ -27,14 +27,15 @@ struct mmc_command {
|
|||
#define MMC_RSP_MASK (3 << 0)
|
||||
#define MMC_RSP_CRC (1 << 3) /* expect valid crc */
|
||||
#define MMC_RSP_BUSY (1 << 4) /* card may send busy */
|
||||
#define MMC_RSP_OPCODE (1 << 5) /* response contains opcode */
|
||||
|
||||
/*
|
||||
* These are the response types, and correspond to valid bit
|
||||
* patterns of the above flags. One additional valid pattern
|
||||
* is all zeros, which means we don't expect a response.
|
||||
*/
|
||||
#define MMC_RSP_R1 (MMC_RSP_SHORT|MMC_RSP_CRC)
|
||||
#define MMC_RSP_R1B (MMC_RSP_SHORT|MMC_RSP_CRC|MMC_RSP_BUSY)
|
||||
#define MMC_RSP_R1 (MMC_RSP_SHORT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
#define MMC_RSP_R1B (MMC_RSP_SHORT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
|
||||
#define MMC_RSP_R2 (MMC_RSP_LONG|MMC_RSP_CRC)
|
||||
#define MMC_RSP_R3 (MMC_RSP_SHORT)
|
||||
#define MMC_RSP_R6 (MMC_RSP_SHORT|MMC_RSP_CRC)
|
||||
|
@ -64,6 +65,7 @@ struct mmc_data {
|
|||
#define MMC_DATA_WRITE (1 << 8)
|
||||
#define MMC_DATA_READ (1 << 9)
|
||||
#define MMC_DATA_STREAM (1 << 10)
|
||||
#define MMC_DATA_MULTI (1 << 11)
|
||||
|
||||
unsigned int bytes_xfered;
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ struct pglist_data;
|
|||
#if defined(CONFIG_SMP)
|
||||
struct zone_padding {
|
||||
char x[0];
|
||||
} ____cacheline_maxaligned_in_smp;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
#define ZONE_PADDING(name) struct zone_padding name;
|
||||
#else
|
||||
#define ZONE_PADDING(name)
|
||||
|
@ -46,7 +46,6 @@ struct zone_padding {
|
|||
|
||||
struct per_cpu_pages {
|
||||
int count; /* number of pages in the list */
|
||||
int low; /* low watermark, refill needed */
|
||||
int high; /* high watermark, emptying needed */
|
||||
int batch; /* chunk size for buddy add/remove */
|
||||
struct list_head list; /* the list of pages */
|
||||
|
@ -99,7 +98,7 @@ struct per_cpu_pageset {
|
|||
|
||||
/*
|
||||
* On machines where it is needed (eg PCs) we divide physical memory
|
||||
* into multiple physical zones. On a PC we have 4 zones:
|
||||
* into multiple physical zones. On a 32bit PC we have 4 zones:
|
||||
*
|
||||
* ZONE_DMA < 16 MB ISA DMA capable memory
|
||||
* ZONE_DMA32 0 MB Empty
|
||||
|
@ -234,7 +233,7 @@ struct zone {
|
|||
* rarely used fields:
|
||||
*/
|
||||
char *name;
|
||||
} ____cacheline_maxaligned_in_smp;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -389,6 +388,11 @@ static inline struct zone *next_zone(struct zone *zone)
|
|||
#define for_each_zone(zone) \
|
||||
for (zone = pgdat_list->node_zones; zone; zone = next_zone(zone))
|
||||
|
||||
static inline int populated_zone(struct zone *zone)
|
||||
{
|
||||
return (!!zone->present_pages);
|
||||
}
|
||||
|
||||
static inline int is_highmem_idx(int idx)
|
||||
{
|
||||
return (idx == ZONE_HIGHMEM);
|
||||
|
@ -398,6 +402,7 @@ static inline int is_normal_idx(int idx)
|
|||
{
|
||||
return (idx == ZONE_NORMAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* is_highmem - helper function to quickly check if a struct zone is a
|
||||
* highmem zone or not. This is an attempt to keep references
|
||||
|
@ -414,6 +419,16 @@ static inline int is_normal(struct zone *zone)
|
|||
return zone == zone->zone_pgdat->node_zones + ZONE_NORMAL;
|
||||
}
|
||||
|
||||
static inline int is_dma32(struct zone *zone)
|
||||
{
|
||||
return zone == zone->zone_pgdat->node_zones + ZONE_DMA32;
|
||||
}
|
||||
|
||||
static inline int is_dma(struct zone *zone)
|
||||
{
|
||||
return zone == zone->zone_pgdat->node_zones + ZONE_DMA;
|
||||
}
|
||||
|
||||
/* These two functions are used to setup the per zone pages min values */
|
||||
struct ctl_table;
|
||||
struct file;
|
||||
|
@ -422,6 +437,8 @@ int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *,
|
|||
extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1];
|
||||
int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *,
|
||||
void __user *, size_t *, loff_t *);
|
||||
int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int, struct file *,
|
||||
void __user *, size_t *, loff_t *);
|
||||
|
||||
#include <linux/topology.h>
|
||||
/* Returns the number of the current Node. */
|
||||
|
@ -435,7 +452,6 @@ extern struct pglist_data contig_page_data;
|
|||
#define NODE_DATA(nid) (&contig_page_data)
|
||||
#define NODE_MEM_MAP(nid) mem_map
|
||||
#define MAX_NODES_SHIFT 1
|
||||
#define pfn_to_nid(pfn) (0)
|
||||
|
||||
#else /* CONFIG_NEED_MULTIPLE_NODES */
|
||||
|
||||
|
@ -470,6 +486,10 @@ extern struct pglist_data contig_page_data;
|
|||
#define early_pfn_to_nid(nid) (0UL)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FLATMEM
|
||||
#define pfn_to_nid(pfn) (0)
|
||||
#endif
|
||||
|
||||
#define pfn_to_section_nr(pfn) ((pfn) >> PFN_SECTION_SHIFT)
|
||||
#define section_nr_to_pfn(sec) ((sec) << PFN_SECTION_SHIFT)
|
||||
|
||||
|
@ -564,11 +584,6 @@ static inline int valid_section_nr(unsigned long nr)
|
|||
return valid_section(__nr_to_section(nr));
|
||||
}
|
||||
|
||||
/*
|
||||
* Given a kernel address, find the home node of the underlying memory.
|
||||
*/
|
||||
#define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT)
|
||||
|
||||
static inline struct mem_section *__pfn_to_section(unsigned long pfn)
|
||||
{
|
||||
return __nr_to_section(pfn_to_section_nr(pfn));
|
||||
|
@ -598,13 +613,14 @@ static inline int pfn_valid(unsigned long pfn)
|
|||
* this restriction.
|
||||
*/
|
||||
#ifdef CONFIG_NUMA
|
||||
#define pfn_to_nid early_pfn_to_nid
|
||||
#endif
|
||||
|
||||
#define pfn_to_pgdat(pfn) \
|
||||
#define pfn_to_nid(pfn) \
|
||||
({ \
|
||||
NODE_DATA(pfn_to_nid(pfn)); \
|
||||
unsigned long __pfn_to_nid_pfn = (pfn); \
|
||||
page_to_nid(pfn_to_page(__pfn_to_nid_pfn)); \
|
||||
})
|
||||
#else
|
||||
#define pfn_to_nid(pfn) (0)
|
||||
#endif
|
||||
|
||||
#define early_pfn_valid(pfn) pfn_valid(pfn)
|
||||
void sparse_init(void);
|
||||
|
@ -613,12 +629,6 @@ void sparse_init(void);
|
|||
#define sparse_index_init(_sec, _nid) do {} while (0)
|
||||
#endif /* CONFIG_SPARSEMEM */
|
||||
|
||||
#ifdef CONFIG_NODES_SPAN_OTHER_NODES
|
||||
#define early_pfn_in_nid(pfn, nid) (early_pfn_to_nid(pfn) == (nid))
|
||||
#else
|
||||
#define early_pfn_in_nid(pfn, nid) (1)
|
||||
#endif
|
||||
|
||||
#ifndef early_pfn_valid
|
||||
#define early_pfn_valid(pfn) (1)
|
||||
#endif
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#ifdef MODULE
|
||||
#define MODULE_PARAM_PREFIX /* empty */
|
||||
#else
|
||||
#define MODULE_PARAM_PREFIX __stringify(KBUILD_MODNAME) "."
|
||||
#define MODULE_PARAM_PREFIX KBUILD_MODNAME "."
|
||||
#endif
|
||||
|
||||
#ifdef MODULE
|
||||
|
|
|
@ -20,9 +20,12 @@
|
|||
#define MNT_NOSUID 0x01
|
||||
#define MNT_NODEV 0x02
|
||||
#define MNT_NOEXEC 0x04
|
||||
#define MNT_SHARED 0x10 /* if the vfsmount is a shared mount */
|
||||
#define MNT_UNBINDABLE 0x20 /* if the vfsmount is a unbindable mount */
|
||||
#define MNT_PNODE_MASK 0x30 /* propogation flag mask */
|
||||
#define MNT_NOATIME 0x08
|
||||
#define MNT_NODIRATIME 0x10
|
||||
|
||||
#define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */
|
||||
#define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */
|
||||
#define MNT_PNODE_MASK 0x3000 /* propogation flag mask */
|
||||
|
||||
struct vfsmount {
|
||||
struct list_head mnt_hash;
|
||||
|
|
|
@ -329,7 +329,8 @@ static inline void fatwchar_to16(__u8 *dst, const wchar_t *src, size_t len)
|
|||
extern void fat_cache_inval_inode(struct inode *inode);
|
||||
extern int fat_get_cluster(struct inode *inode, int cluster,
|
||||
int *fclus, int *dclus);
|
||||
extern int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys);
|
||||
extern int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
|
||||
unsigned long *mapped_blocks);
|
||||
|
||||
/* fat/dir.c */
|
||||
extern struct file_operations fat_dir_operations;
|
||||
|
|
23
include/linux/mutex-debug.h
Normal file
23
include/linux/mutex-debug.h
Normal file
|
@ -0,0 +1,23 @@
|
|||
#ifndef __LINUX_MUTEX_DEBUG_H
|
||||
#define __LINUX_MUTEX_DEBUG_H
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
/*
|
||||
* Mutexes - debugging helpers:
|
||||
*/
|
||||
|
||||
#define __DEBUG_MUTEX_INITIALIZER(lockname) \
|
||||
, .held_list = LIST_HEAD_INIT(lockname.held_list), \
|
||||
.name = #lockname , .magic = &lockname
|
||||
|
||||
#define mutex_init(sem) __mutex_init(sem, __FUNCTION__)
|
||||
|
||||
extern void FASTCALL(mutex_destroy(struct mutex *lock));
|
||||
|
||||
extern void mutex_debug_show_all_locks(void);
|
||||
extern void mutex_debug_show_held_locks(struct task_struct *filter);
|
||||
extern void mutex_debug_check_no_locks_held(struct task_struct *task);
|
||||
extern void mutex_debug_check_no_locks_freed(const void *from, unsigned long len);
|
||||
|
||||
#endif
|
120
include/linux/mutex.h
Normal file
120
include/linux/mutex.h
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Mutexes: blocking mutual exclusion locks
|
||||
*
|
||||
* started by Ingo Molnar:
|
||||
*
|
||||
* Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
*
|
||||
* This file contains the main data structure and API definitions.
|
||||
*/
|
||||
#ifndef __LINUX_MUTEX_H
|
||||
#define __LINUX_MUTEX_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
/*
|
||||
* Simple, straightforward mutexes with strict semantics:
|
||||
*
|
||||
* - only one task can hold the mutex at a time
|
||||
* - only the owner can unlock the mutex
|
||||
* - multiple unlocks are not permitted
|
||||
* - recursive locking is not permitted
|
||||
* - a mutex object must be initialized via the API
|
||||
* - a mutex object must not be initialized via memset or copying
|
||||
* - task may not exit with mutex held
|
||||
* - memory areas where held locks reside must not be freed
|
||||
* - held mutexes must not be reinitialized
|
||||
* - mutexes may not be used in irq contexts
|
||||
*
|
||||
* These semantics are fully enforced when DEBUG_MUTEXES is
|
||||
* enabled. Furthermore, besides enforcing the above rules, the mutex
|
||||
* debugging code also implements a number of additional features
|
||||
* that make lock debugging easier and faster:
|
||||
*
|
||||
* - uses symbolic names of mutexes, whenever they are printed in debug output
|
||||
* - point-of-acquire tracking, symbolic lookup of function names
|
||||
* - list of all locks held in the system, printout of them
|
||||
* - owner tracking
|
||||
* - detects self-recursing locks and prints out all relevant info
|
||||
* - detects multi-task circular deadlocks and prints out all affected
|
||||
* locks and tasks (and only those tasks)
|
||||
*/
|
||||
struct mutex {
|
||||
/* 1: unlocked, 0: locked, negative: locked, possible waiters */
|
||||
atomic_t count;
|
||||
spinlock_t wait_lock;
|
||||
struct list_head wait_list;
|
||||
#ifdef CONFIG_DEBUG_MUTEXES
|
||||
struct thread_info *owner;
|
||||
struct list_head held_list;
|
||||
unsigned long acquire_ip;
|
||||
const char *name;
|
||||
void *magic;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the control structure for tasks blocked on mutex,
|
||||
* which resides on the blocked task's kernel stack:
|
||||
*/
|
||||
struct mutex_waiter {
|
||||
struct list_head list;
|
||||
struct task_struct *task;
|
||||
#ifdef CONFIG_DEBUG_MUTEXES
|
||||
struct mutex *lock;
|
||||
void *magic;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DEBUG_MUTEXES
|
||||
# include <linux/mutex-debug.h>
|
||||
#else
|
||||
# define __DEBUG_MUTEX_INITIALIZER(lockname)
|
||||
# define mutex_init(mutex) __mutex_init(mutex, NULL)
|
||||
# define mutex_destroy(mutex) do { } while (0)
|
||||
# define mutex_debug_show_all_locks() do { } while (0)
|
||||
# define mutex_debug_show_held_locks(p) do { } while (0)
|
||||
# define mutex_debug_check_no_locks_held(task) do { } while (0)
|
||||
# define mutex_debug_check_no_locks_freed(from, len) do { } while (0)
|
||||
#endif
|
||||
|
||||
#define __MUTEX_INITIALIZER(lockname) \
|
||||
{ .count = ATOMIC_INIT(1) \
|
||||
, .wait_lock = SPIN_LOCK_UNLOCKED \
|
||||
, .wait_list = LIST_HEAD_INIT(lockname.wait_list) \
|
||||
__DEBUG_MUTEX_INITIALIZER(lockname) }
|
||||
|
||||
#define DEFINE_MUTEX(mutexname) \
|
||||
struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
|
||||
|
||||
extern void fastcall __mutex_init(struct mutex *lock, const char *name);
|
||||
|
||||
/***
|
||||
* mutex_is_locked - is the mutex locked
|
||||
* @lock: the mutex to be queried
|
||||
*
|
||||
* Returns 1 if the mutex is locked, 0 if unlocked.
|
||||
*/
|
||||
static inline int fastcall mutex_is_locked(struct mutex *lock)
|
||||
{
|
||||
return atomic_read(&lock->count) != 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* See kernel/mutex.c for detailed documentation of these APIs.
|
||||
* Also see Documentation/mutex-design.txt.
|
||||
*/
|
||||
extern void fastcall mutex_lock(struct mutex *lock);
|
||||
extern int fastcall mutex_lock_interruptible(struct mutex *lock);
|
||||
/*
|
||||
* NOTE: mutex_trylock() follows the spin_trylock() convention,
|
||||
* not the down_trylock() convention!
|
||||
*/
|
||||
extern int fastcall mutex_trylock(struct mutex *lock);
|
||||
extern void fastcall mutex_unlock(struct mutex *lock);
|
||||
|
||||
#endif
|
|
@ -74,7 +74,7 @@ extern struct file *nameidata_to_filp(struct nameidata *nd, int flags);
|
|||
extern void release_open_intent(struct nameidata *);
|
||||
|
||||
extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
|
||||
extern struct dentry * lookup_hash(struct nameidata *);
|
||||
extern __deprecated_for_modules struct dentry * lookup_hash(struct nameidata *);
|
||||
|
||||
extern int follow_down(struct vfsmount **, struct dentry **);
|
||||
extern int follow_up(struct vfsmount **, struct dentry **);
|
||||
|
|
|
@ -37,18 +37,26 @@ enum {
|
|||
/* userspace doesn't need the nbd_device structure */
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/wait.h>
|
||||
|
||||
/* values for flags field */
|
||||
#define NBD_READ_ONLY 0x0001
|
||||
#define NBD_WRITE_NOCHK 0x0002
|
||||
|
||||
struct request;
|
||||
|
||||
struct nbd_device {
|
||||
int flags;
|
||||
int harderror; /* Code of hard error */
|
||||
struct socket * sock;
|
||||
struct file * file; /* If == NULL, device is not ready, yet */
|
||||
int magic;
|
||||
|
||||
spinlock_t queue_lock;
|
||||
struct list_head queue_head;/* Requests are added here... */
|
||||
struct request *active_req;
|
||||
wait_queue_head_t active_wq;
|
||||
|
||||
struct semaphore tx_lock;
|
||||
struct gendisk *disk;
|
||||
int blksize;
|
||||
|
|
|
@ -20,29 +20,29 @@
|
|||
#define NCP_DEALLOC_SLOT_REQUEST (0x5555)
|
||||
|
||||
struct ncp_request_header {
|
||||
__u16 type __attribute__((packed));
|
||||
__u8 sequence __attribute__((packed));
|
||||
__u8 conn_low __attribute__((packed));
|
||||
__u8 task __attribute__((packed));
|
||||
__u8 conn_high __attribute__((packed));
|
||||
__u8 function __attribute__((packed));
|
||||
__u8 data[0] __attribute__((packed));
|
||||
};
|
||||
__u16 type;
|
||||
__u8 sequence;
|
||||
__u8 conn_low;
|
||||
__u8 task;
|
||||
__u8 conn_high;
|
||||
__u8 function;
|
||||
__u8 data[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
#define NCP_REPLY (0x3333)
|
||||
#define NCP_WATCHDOG (0x3E3E)
|
||||
#define NCP_POSITIVE_ACK (0x9999)
|
||||
|
||||
struct ncp_reply_header {
|
||||
__u16 type __attribute__((packed));
|
||||
__u8 sequence __attribute__((packed));
|
||||
__u8 conn_low __attribute__((packed));
|
||||
__u8 task __attribute__((packed));
|
||||
__u8 conn_high __attribute__((packed));
|
||||
__u8 completion_code __attribute__((packed));
|
||||
__u8 connection_state __attribute__((packed));
|
||||
__u8 data[0] __attribute__((packed));
|
||||
};
|
||||
__u16 type;
|
||||
__u8 sequence;
|
||||
__u8 conn_low;
|
||||
__u8 task;
|
||||
__u8 conn_high;
|
||||
__u8 completion_code;
|
||||
__u8 connection_state;
|
||||
__u8 data[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
#define NCP_VOLNAME_LEN (16)
|
||||
#define NCP_NUMBER_OF_VOLUMES (256)
|
||||
|
@ -128,37 +128,37 @@ struct nw_nfs_info {
|
|||
};
|
||||
|
||||
struct nw_info_struct {
|
||||
__u32 spaceAlloc __attribute__((packed));
|
||||
__le32 attributes __attribute__((packed));
|
||||
__u16 flags __attribute__((packed));
|
||||
__le32 dataStreamSize __attribute__((packed));
|
||||
__le32 totalStreamSize __attribute__((packed));
|
||||
__u16 numberOfStreams __attribute__((packed));
|
||||
__le16 creationTime __attribute__((packed));
|
||||
__le16 creationDate __attribute__((packed));
|
||||
__u32 creatorID __attribute__((packed));
|
||||
__le16 modifyTime __attribute__((packed));
|
||||
__le16 modifyDate __attribute__((packed));
|
||||
__u32 modifierID __attribute__((packed));
|
||||
__le16 lastAccessDate __attribute__((packed));
|
||||
__u16 archiveTime __attribute__((packed));
|
||||
__u16 archiveDate __attribute__((packed));
|
||||
__u32 archiverID __attribute__((packed));
|
||||
__u16 inheritedRightsMask __attribute__((packed));
|
||||
__le32 dirEntNum __attribute__((packed));
|
||||
__le32 DosDirNum __attribute__((packed));
|
||||
__u32 volNumber __attribute__((packed));
|
||||
__u32 EADataSize __attribute__((packed));
|
||||
__u32 EAKeyCount __attribute__((packed));
|
||||
__u32 EAKeySize __attribute__((packed));
|
||||
__u32 NSCreator __attribute__((packed));
|
||||
__u8 nameLen __attribute__((packed));
|
||||
__u8 entryName[256] __attribute__((packed));
|
||||
__u32 spaceAlloc;
|
||||
__le32 attributes;
|
||||
__u16 flags;
|
||||
__le32 dataStreamSize;
|
||||
__le32 totalStreamSize;
|
||||
__u16 numberOfStreams;
|
||||
__le16 creationTime;
|
||||
__le16 creationDate;
|
||||
__u32 creatorID;
|
||||
__le16 modifyTime;
|
||||
__le16 modifyDate;
|
||||
__u32 modifierID;
|
||||
__le16 lastAccessDate;
|
||||
__u16 archiveTime;
|
||||
__u16 archiveDate;
|
||||
__u32 archiverID;
|
||||
__u16 inheritedRightsMask;
|
||||
__le32 dirEntNum;
|
||||
__le32 DosDirNum;
|
||||
__u32 volNumber;
|
||||
__u32 EADataSize;
|
||||
__u32 EAKeyCount;
|
||||
__u32 EAKeySize;
|
||||
__u32 NSCreator;
|
||||
__u8 nameLen;
|
||||
__u8 entryName[256];
|
||||
/* libncp may depend on there being nothing after entryName */
|
||||
#ifdef __KERNEL__
|
||||
struct nw_nfs_info nfs;
|
||||
#endif
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
/* modify mask - use with MODIFY_DOS_INFO structure */
|
||||
#define DM_ATTRIBUTES (cpu_to_le32(0x02))
|
||||
|
@ -176,26 +176,26 @@ struct nw_info_struct {
|
|||
#define DM_MAXIMUM_SPACE (cpu_to_le32(0x2000))
|
||||
|
||||
struct nw_modify_dos_info {
|
||||
__le32 attributes __attribute__((packed));
|
||||
__le16 creationDate __attribute__((packed));
|
||||
__le16 creationTime __attribute__((packed));
|
||||
__u32 creatorID __attribute__((packed));
|
||||
__le16 modifyDate __attribute__((packed));
|
||||
__le16 modifyTime __attribute__((packed));
|
||||
__u32 modifierID __attribute__((packed));
|
||||
__u16 archiveDate __attribute__((packed));
|
||||
__u16 archiveTime __attribute__((packed));
|
||||
__u32 archiverID __attribute__((packed));
|
||||
__le16 lastAccessDate __attribute__((packed));
|
||||
__u16 inheritanceGrantMask __attribute__((packed));
|
||||
__u16 inheritanceRevokeMask __attribute__((packed));
|
||||
__u32 maximumSpace __attribute__((packed));
|
||||
};
|
||||
__le32 attributes;
|
||||
__le16 creationDate;
|
||||
__le16 creationTime;
|
||||
__u32 creatorID;
|
||||
__le16 modifyDate;
|
||||
__le16 modifyTime;
|
||||
__u32 modifierID;
|
||||
__u16 archiveDate;
|
||||
__u16 archiveTime;
|
||||
__u32 archiverID;
|
||||
__le16 lastAccessDate;
|
||||
__u16 inheritanceGrantMask;
|
||||
__u16 inheritanceRevokeMask;
|
||||
__u32 maximumSpace;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct nw_search_sequence {
|
||||
__u8 volNumber __attribute__((packed));
|
||||
__u32 dirBase __attribute__((packed));
|
||||
__u32 sequence __attribute__((packed));
|
||||
};
|
||||
__u8 volNumber;
|
||||
__u32 dirBase;
|
||||
__u32 sequence;
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* _LINUX_NCP_H */
|
||||
|
|
|
@ -201,34 +201,6 @@ static inline struct ncp_inode_info *NCP_FINFO(struct inode *inode)
|
|||
return container_of(inode, struct ncp_inode_info, vfs_inode);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_NCP_MALLOC
|
||||
|
||||
#include <linux/slab.h>
|
||||
|
||||
extern int ncp_malloced;
|
||||
extern int ncp_current_malloced;
|
||||
|
||||
static inline void *
|
||||
ncp_kmalloc(unsigned int size, int priority)
|
||||
{
|
||||
ncp_malloced += 1;
|
||||
ncp_current_malloced += 1;
|
||||
return kmalloc(size, priority);
|
||||
}
|
||||
|
||||
static inline void ncp_kfree_s(void *obj, int size)
|
||||
{
|
||||
ncp_current_malloced -= 1;
|
||||
kfree(obj);
|
||||
}
|
||||
|
||||
#else /* DEBUG_NCP_MALLOC */
|
||||
|
||||
#define ncp_kmalloc(s,p) kmalloc(s,p)
|
||||
#define ncp_kfree_s(o,s) kfree(o)
|
||||
|
||||
#endif /* DEBUG_NCP_MALLOC */
|
||||
|
||||
/* linux/fs/ncpfs/inode.c */
|
||||
int ncp_notify_change(struct dentry *, struct iattr *);
|
||||
struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue