Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 73829
b: refs/heads/master
c: 907135a
h: refs/heads/master
i:
  73827: 17157c0
v: v3
  • Loading branch information
David Brownell authored and Jean Delvare committed Nov 15, 2007
1 parent 8a8a7d5 commit 0583069
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 40 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 279e1dab949d33737557babfe9f74e0b74fbe39a
refs/heads/master: 907135aaa0cc120a347222c8f274ecc5ca0db641
3 changes: 3 additions & 0 deletions trunk/arch/avr32/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ config AVR32
There is an AVR32 Linux project with a web page at
http://avr32linux.org/.

config UID16
bool

config GENERIC_GPIO
bool
default y
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/avr32/mach-at32ap/at32ap7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ static struct resource at32ap700x_rtc0_resource[] = {
static struct resource at32_wdt0_resource[] = {
{
.start = 0xfff000b0,
.end = 0xfff000cf,
.end = 0xfff000bf,
.flags = IORESOURCE_MEM,
},
};
Expand Down Expand Up @@ -690,7 +690,7 @@ static struct resource atmel_usart0_resource[] = {
IRQ(6),
};
DEFINE_DEV_DATA(atmel_usart, 0);
DEV_CLK(usart, atmel_usart0, pba, 3);
DEV_CLK(usart, atmel_usart0, pba, 4);

static struct atmel_uart_data atmel_usart1_data = {
.use_dma_tx = 1,
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/avr32/mach-at32ap/hsmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#define DEBUG
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/init.h>
Expand Down
4 changes: 1 addition & 3 deletions trunk/arch/avr32/mach-at32ap/intc.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include <linux/irq.h>
#include <linux/platform_device.h>

#include <asm/intc.h>
#include <asm/io.h>

#include "intc.h"
Expand Down Expand Up @@ -137,8 +136,7 @@ void __init init_IRQ(void)
panic("Interrupt controller initialization failed!\n");
}

unsigned long intc_get_pending(unsigned int group)
unsigned long intc_get_pending(int group)
{
return intc_readl(&intc0, INTREQ0 + 4 * group);
}
EXPORT_SYMBOL_GPL(intc_get_pending);
60 changes: 59 additions & 1 deletion trunk/drivers/i2c/i2c-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@

static struct i2c_driver i2cdev_driver;

/*
* An i2c_dev represents an i2c_adapter ... an I2C or SMBus master, not a
* slave (i2c_client) with which messages will be exchanged. It's coupled
* with a character special file which is accessed by user mode drivers.
*
* The list of i2c_dev structures is parallel to the i2c_adapter lists
* maintained by the driver model, and is updated using notifications
* delivered to the i2cdev_driver.
*/
struct i2c_dev {
struct list_head list;
struct i2c_adapter *adap;
Expand Down Expand Up @@ -103,6 +112,25 @@ static ssize_t show_adapter_name(struct device *dev,
}
static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);

/* ------------------------------------------------------------------------- */

/*
* After opening an instance of this character special file, a file
* descriptor starts out associated only with an i2c_adapter (and bus).
*
* Using the I2C_RDWR ioctl(), you can then *immediately* issue i2c_msg
* traffic to any devices on the bus used by that adapter. That's because
* the i2c_msg vectors embed all the addressing information they need, and
* are submitted directly to an i2c_adapter. However, SMBus-only adapters
* don't support that interface.
*
* To use read()/write() system calls on that file descriptor, or to use
* SMBus interfaces (and work with SMBus-only hosts!), you must first issue
* an I2C_SLAVE (or I2C_SLAVE_FORCE) ioctl. That configures an anonymous
* (never registered) i2c_client so it holds the addressing information
* needed by those system calls and by this SMBus interface.
*/

static ssize_t i2cdev_read (struct file *file, char __user *buf, size_t count,
loff_t *offset)
{
Expand Down Expand Up @@ -172,6 +200,16 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
switch ( cmd ) {
case I2C_SLAVE:
case I2C_SLAVE_FORCE:
/* NOTE: devices set up to work with "new style" drivers
* can't use I2C_SLAVE, even when the device node is not
* bound to a driver. Only I2C_SLAVE_FORCE will work.
*
* Setting the PEC flag here won't affect kernel drivers,
* which will be using the i2c_client node registered with
* the driver model core. Likewise, when that client has
* the PEC flag already set, the i2c-dev driver won't see
* (or use) this setting.
*/
if ((arg > 0x3ff) ||
(((client->flags & I2C_M_TEN) == 0) && arg > 0x7f))
return -EINVAL;
Expand Down Expand Up @@ -386,6 +424,13 @@ static int i2cdev_open(struct inode *inode, struct file *file)
if (!adap)
return -ENODEV;

/* This creates an anonymous i2c_client, which may later be
* pointed to some address using I2C_SLAVE or I2C_SLAVE_FORCE.
*
* This client is ** NEVER REGISTERED ** with the driver model
* or I2C core code!! It just holds private copies of addressing
* information and maybe a PEC flag.
*/
client = kzalloc(sizeof(*client), GFP_KERNEL);
if (!client) {
i2c_put_adapter(adap);
Expand All @@ -394,7 +439,6 @@ static int i2cdev_open(struct inode *inode, struct file *file)
snprintf(client->name, I2C_NAME_SIZE, "i2c-dev %d", adap->nr);
client->driver = &i2cdev_driver;

/* registered with adapter, passed as client to user */
client->adapter = adap;
file->private_data = client;

Expand Down Expand Up @@ -422,6 +466,14 @@ static const struct file_operations i2cdev_fops = {
.release = i2cdev_release,
};

/* ------------------------------------------------------------------------- */

/*
* The legacy "i2cdev_driver" is used primarily to get notifications when
* I2C adapters are added or removed, so that each one gets an i2c_dev
* and is thus made available to userspace driver code.
*/

static struct class *i2c_dev_class;

static int i2cdev_attach_adapter(struct i2c_adapter *adap)
Expand Down Expand Up @@ -486,6 +538,12 @@ static struct i2c_driver i2cdev_driver = {
.detach_client = i2cdev_detach_client,
};

/* ------------------------------------------------------------------------- */

/*
* module load/unload record keeping
*/

static int __init i2c_dev_init(void)
{
int res;
Expand Down
51 changes: 24 additions & 27 deletions trunk/drivers/net/skge.c
Original file line number Diff line number Diff line change
Expand Up @@ -2512,32 +2512,31 @@ static int skge_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
return err;
}

static void skge_ramset(struct skge_hw *hw, u16 q, u32 start, size_t len)
/* Assign Ram Buffer allocation to queue */
static void skge_ramset(struct skge_hw *hw, u16 q, u32 start, u32 space)
{
u32 end;

start /= 8;
len /= 8;
end = start + len - 1;
/* convert from K bytes to qwords used for hw register */
start *= 1024/8;
space *= 1024/8;
end = start + space - 1;

skge_write8(hw, RB_ADDR(q, RB_CTRL), RB_RST_CLR);
skge_write32(hw, RB_ADDR(q, RB_START), start);
skge_write32(hw, RB_ADDR(q, RB_END), end);
skge_write32(hw, RB_ADDR(q, RB_WP), start);
skge_write32(hw, RB_ADDR(q, RB_RP), start);
skge_write32(hw, RB_ADDR(q, RB_END), end);

if (q == Q_R1 || q == Q_R2) {
u32 tp = space - space/4;

/* Set thresholds on receive queue's */
skge_write32(hw, RB_ADDR(q, RB_RX_UTPP),
start + (2*len)/3);
skge_write32(hw, RB_ADDR(q, RB_RX_LTPP),
start + (len/3));
} else {
/* Enable store & forward on Tx queue's because
* Tx FIFO is only 4K on Genesis and 1K on Yukon
*/
skge_write32(hw, RB_ADDR(q, RB_RX_UTPP), tp);
skge_write32(hw, RB_ADDR(q, RB_RX_LTPP), space/4);
} else if (hw->chip_id != CHIP_ID_GENESIS)
/* Genesis Tx Fifo is too small for normal store/forward */
skge_write8(hw, RB_ADDR(q, RB_CTRL), RB_ENA_STFWD);
}

skge_write8(hw, RB_ADDR(q, RB_CTRL), RB_ENA_OP_MD);
}
Expand Down Expand Up @@ -2565,7 +2564,7 @@ static int skge_up(struct net_device *dev)
struct skge_port *skge = netdev_priv(dev);
struct skge_hw *hw = skge->hw;
int port = skge->port;
u32 chunk, ram_addr;
u32 ramaddr, ramsize, rxspace;
size_t rx_size, tx_size;
int err;

Expand Down Expand Up @@ -2620,14 +2619,15 @@ static int skge_up(struct net_device *dev)
spin_unlock_bh(&hw->phy_lock);

/* Configure RAMbuffers */
chunk = hw->ram_size / ((hw->ports + 1)*2);
ram_addr = hw->ram_offset + 2 * chunk * port;
ramsize = (hw->ram_size - hw->ram_offset) / hw->ports;
ramaddr = hw->ram_offset + port * ramsize;
rxspace = 8 + (2*(ramsize - 16))/3;

skge_ramset(hw, rxqaddr[port], ram_addr, chunk);
skge_qset(skge, rxqaddr[port], skge->rx_ring.to_clean);
skge_ramset(hw, rxqaddr[port], ramaddr, rxspace);
skge_ramset(hw, txqaddr[port], ramaddr + rxspace, ramsize - rxspace);

skge_qset(skge, rxqaddr[port], skge->rx_ring.to_clean);
BUG_ON(skge->tx_ring.to_use != skge->tx_ring.to_clean);
skge_ramset(hw, txqaddr[port], ram_addr+chunk, chunk);
skge_qset(skge, txqaddr[port], skge->tx_ring.to_use);

/* Start receiver BMU */
Expand Down Expand Up @@ -3591,15 +3591,12 @@ static int skge_reset(struct skge_hw *hw)
if (hw->chip_id == CHIP_ID_GENESIS) {
if (t8 == 3) {
/* special case: 4 x 64k x 36, offset = 0x80000 */
hw->ram_size = 0x100000;
hw->ram_offset = 0x80000;
hw->ram_size = 1024;
hw->ram_offset = 512;
} else
hw->ram_size = t8 * 512;
}
else if (t8 == 0)
hw->ram_size = 0x20000;
else
hw->ram_size = t8 * 4096;
} else /* Yukon */
hw->ram_size = t8 ? t8 * 4 : 128;

hw->intr_mask = IS_HW_ERR;

Expand Down
2 changes: 0 additions & 2 deletions trunk/include/asm-avr32/sysreg.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,6 @@
#define SYSREG_IRP_SIZE 6

/* Bitfields in PCCR */
#define SYSREG_PCCR_E_OFFSET 0
#define SYSREG_PCCR_E_SIZE 1
#define SYSREG_PCCR_R_OFFSET 1
#define SYSREG_PCCR_R_SIZE 1
#define SYSREG_PCCR_C_OFFSET 2
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/pcmcia/cs_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include <sys/types.h>
#endif

#if defined(__arm__) || defined(__mips__) || defined(__avr32__)
#if defined(__arm__) || defined(__mips__)
/* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */
typedef u_int ioaddr_t;
#else
Expand Down
3 changes: 2 additions & 1 deletion trunk/kernel/exit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1386,7 +1386,8 @@ static int wait_task_stopped(struct task_struct *p, int delayed_group_leader,
int why = (p->ptrace & PT_PTRACED) ? CLD_TRAPPED : CLD_STOPPED;

exit_code = p->exit_code;
if (unlikely(!exit_code) || unlikely(p->exit_state))
if (unlikely(!exit_code) ||
unlikely(p->state & TASK_TRACED))
goto bail_ref;
return wait_noreap_copyout(p, pid, uid,
why, (exit_code << 8) | 0x7f,
Expand Down
3 changes: 1 addition & 2 deletions trunk/mm/slob.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,7 @@ static void *slob_alloc(size_t size, gfp_t gfp, int align, int node)
/* Improve fragment distribution and reduce our average
* search time by starting our next search here. (see
* Knuth vol 1, sec 2.5, pg 449) */
if (prev != free_slob_pages.prev &&
free_slob_pages.next != prev->next)
if (free_slob_pages.next != prev->next)
list_move_tail(&free_slob_pages, prev->next);
break;
}
Expand Down

0 comments on commit 0583069

Please sign in to comment.