Commit f3da3d88 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.36pre5

parent eab2ce74
......@@ -7878,22 +7878,26 @@ CONFIG_USB_UHCI
The Universal Host Controller Interface is a standard by Intel for
accessing the USB hardware in the PC (which is also called the USB
host controller). If your USB host controller conforms to this
standard, say Y. All recent boards with Intel PCI chipsets conform
to this standard. If unsure, say Y.
standard, say Y. All recent boards with Intel PCI chipsets (like
intel 430TX, 440FX, 440LX, 440BX, i810, i820) conform to this standard.
Also all VIA PCI chipsets (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo
Pro II or Apollo Pro 133).
If unsure, say Y.
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called usb-uhci.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
OHCI-HCD (Compaq, iMacs, OPTi, SiS, and others) support?
OHCI-HCD (Compaq, iMacs, OPTi, SiS, ALi, and others) support?
CONFIG_USB_OHCI_HCD
The Open Host Controller Interface is a standard by
Compaq/Microsoft/National for accessing the USB PC hardware (also
called USB host controller). If your USB host controller conforms
to this standard, say Y. The USB host controllers on most
non-Intel architectures and on several x86 compatibles with
non-Intel chipsets conform to this standard.
non-Intel architectures and on several x86 compatibles with non-Intel
chipsets - like SiS (aktual 610, 610 and so on) or ALi (ALi IV, ALi V,
Aladin Pro..) - conform to this standard.
You may want to read the file drivers/usb/README.ohci_hcd.
......
......@@ -23,6 +23,7 @@
*
* **********************
*/
#include <linux/module.h>
#include <linux/config.h> /* for CONFIG_INET */
#include <linux/init.h>
......@@ -43,7 +44,8 @@ static int prepare_tx(struct net_device *dev, struct archdr *pkt, int length,
int bufnum);
struct ArcProto rawmode_proto = {
struct ArcProto rawmode_proto =
{
'r',
XMTU,
rx,
......@@ -90,7 +92,7 @@ void cleanup_module(void)
static void rx(struct net_device *dev, int bufnum,
struct archdr *pkthdr, int length)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
struct sk_buff *skb;
struct archdr *pkt = pkthdr;
int ofs;
......@@ -103,17 +105,15 @@ static void rx(struct net_device *dev, int bufnum,
ofs = 256 - length;
skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
if (skb == NULL)
{
if (skb == NULL) {
BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
lp->stats.rx_dropped++;
return;
}
skb_put(skb, length + ARC_HDR_SIZE);
skb->dev = dev;
pkt = (struct archdr *)skb->data;
pkt = (struct archdr *) skb->data;
skb->mac.raw = skb->data;
skb_pull(skb, ARC_HDR_SIZE);
......@@ -141,7 +141,7 @@ static int build_header(struct sk_buff *skb, unsigned short type,
{
struct net_device *dev = skb->dev;
int hdr_size = ARC_HDR_SIZE;
struct archdr *pkt = (struct archdr *)skb_push(skb, hdr_size);
struct archdr *pkt = (struct archdr *) skb_push(skb, hdr_size);
/*
* Set the source hardware address.
......@@ -154,8 +154,7 @@ static int build_header(struct sk_buff *skb, unsigned short type,
/* see linux/net/ethernet/eth.c to see where I got the following */
if (dev->flags & (IFF_LOOPBACK|IFF_NOARP))
{
if (dev->flags & (IFF_LOOPBACK | IFF_NOARP)) {
/*
* FIXME: fill in the last byte of the dest ipaddr here to better
* comply with RFC1051 in "noarp" mode.
......@@ -163,7 +162,6 @@ static int build_header(struct sk_buff *skb, unsigned short type,
pkt->hard.dest = 0;
return hdr_size;
}
/* otherwise, just fill it in and go! */
pkt->hard.dest = daddr;
......@@ -174,7 +172,7 @@ static int build_header(struct sk_buff *skb, unsigned short type,
static int prepare_tx(struct net_device *dev, struct archdr *pkt, int length,
int bufnum)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
struct arc_hardware *hard = &pkt->hard;
int ofs;
......@@ -183,25 +181,19 @@ static int prepare_tx(struct net_device *dev, struct archdr *pkt, int length,
length -= ARC_HDR_SIZE; /* hard header is not included in packet length */
if (length > XMTU)
{
if (length > XMTU) {
/* should never happen! other people already check for this. */
BUGMSG(D_NORMAL, "Bug! prepare_tx with size %d (> %d)\n",
length, XMTU);
length = XMTU;
}
if (length > MinTU)
{
if (length > MinTU) {
hard->offset[0] = 0;
hard->offset[1] = ofs = 512 - length;
}
else if (length > MTU)
{
} else if (length > MTU) {
hard->offset[0] = 0;
hard->offset[1] = ofs = 512 - length - 3;
}
else
} else
hard->offset[0] = ofs = 256 - length;
lp->hw.copy_to_card(dev, bufnum, 0, hard, ARC_HDR_SIZE);
......
......@@ -43,12 +43,12 @@
static int arcrimi_probe(struct net_device *dev);
static int arcrimi_found(struct net_device *dev);
static void arcrimi_command (struct net_device *dev, int command);
static int arcrimi_status (struct net_device *dev);
static void arcrimi_setmask (struct net_device *dev, int mask);
static int arcrimi_reset (struct net_device *dev, int really_reset);
static void arcrimi_command(struct net_device *dev, int command);
static int arcrimi_status(struct net_device *dev);
static void arcrimi_setmask(struct net_device *dev, int mask);
static int arcrimi_reset(struct net_device *dev, int really_reset);
static void arcrimi_openclose(struct net_device *dev, bool open);
static void arcrimi_copy_to_card (struct net_device *dev, int bufnum, int offset,
static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count);
static void arcrimi_copy_from_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count);
......@@ -97,18 +97,15 @@ static int __init arcrimi_probe(struct net_device *dev)
"must specify the shmem and irq!\n");
return -ENODEV;
}
if (check_mem_region(dev->mem_start, BUFFER_SIZE)) {
BUGMSG(D_NORMAL, "Card memory already allocated\n");
return -ENODEV;
}
if (dev->dev_addr[0] == 0) {
BUGMSG(D_NORMAL, "You need to specify your card's station "
"ID!\n");
return -ENODEV;
}
return arcrimi_found(dev);
}
......@@ -178,7 +175,6 @@ static int __init arcrimi_found(struct net_device *dev)
BUGMSG(D_NORMAL, "Can't remap device memory!\n");
goto err_free_dev_priv;
}
/* Fill in the fields of the device structure with generic
* values.
*/
......@@ -198,9 +194,9 @@ static int __init arcrimi_found(struct net_device *dev)
return 0;
err_free_dev_priv:
err_free_dev_priv:
kfree(dev->priv);
err_free_irq:
err_free_irq:
free_irq(dev->irq, dev);
return -EIO;
}
......@@ -222,10 +218,9 @@ static int arcrimi_reset(struct net_device *dev, int really_reset)
BUGMSG(D_INIT, "Resetting %s (status=%02Xh)\n", dev->name, ASTATUS());
if (really_reset) {
writeb(TESTvalue, ioaddr-0x800); /* fake reset */
writeb(TESTvalue, ioaddr - 0x800); /* fake reset */
return 0;
}
ACOMMAND(CFLAGScmd | RESETclear); /* clear flags & end reset */
ACOMMAND(CFLAGScmd | CONFIGclear);
......@@ -273,7 +268,7 @@ static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count)
{
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
void *memaddr = lp->mem_start + 0x800 + bufnum*512 + offset;
void *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset;
TIME("memcpy_toio", count, memcpy_toio(memaddr, buf, count));
}
......@@ -282,7 +277,7 @@ static void arcrimi_copy_from_card(struct net_device *dev, int bufnum, int offse
void *buf, int count)
{
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
void *memaddr = lp->mem_start + 0x800 + bufnum*512 + offset;
void *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset;
TIME("memcpy_fromio", count, memcpy_fromio(buf, memaddr, count));
}
......@@ -360,7 +355,7 @@ static int __init arcrimi_setup(char *s)
return 1;
dev = alloc_bootmem(sizeof(struct net_device) + 10);
memset(dev, 0, sizeof(struct net_device) + 10);
dev->name = (char *)(dev+1);
dev->name = (char *) (dev + 1);
dev->init = arcrimi_probe;
switch (ints[0]) {
......
This diff is collapsed.
......@@ -60,31 +60,24 @@ static int __init com20020isa_probe(struct net_device *dev)
BUGLVL(D_NORMAL) printk(VERSION);
ioaddr = dev->base_addr;
if (!ioaddr)
{
if (!ioaddr) {
BUGMSG(D_NORMAL, "No autoprobe (yet) for IO mapped cards; you "
"must specify the base address!\n");
return -ENODEV;
}
if (check_region(ioaddr, ARCNET_TOTAL_SIZE))
{
if (check_region(ioaddr, ARCNET_TOTAL_SIZE)) {
BUGMSG(D_NORMAL, "IO region %xh-%xh already allocated.\n",
ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
return -ENXIO;
}
if (ASTATUS() == 0xFF)
{
if (ASTATUS() == 0xFF) {
BUGMSG(D_NORMAL, "IO address %x empty\n", ioaddr);
return -ENODEV;
}
if (com20020_check(dev))
return -ENODEV;
if (!dev->irq)
{
if (!dev->irq) {
/* if we do this, we're sure to get an IRQ since the
* card has just reset and the NORXflag is on until
* we tell it to start receiving.
......@@ -97,22 +90,19 @@ static int __init com20020isa_probe(struct net_device *dev)
outb(0, _INTMASK);
dev->irq = probe_irq_off(airqmask);
if (dev->irq <= 0)
{
if (dev->irq <= 0) {
BUGMSG(D_INIT_REASONS, "Autoprobe IRQ failed first time\n");
airqmask = probe_irq_on();
outb(NORXflag, _INTMASK);
udelay(5);
outb(0, _INTMASK);
dev->irq = probe_irq_off(airqmask);
if (dev->irq <= 0)
{
if (dev->irq <= 0) {
BUGMSG(D_NORMAL, "Autoprobe IRQ failed.\n");
return -ENODEV;
}
}
}
return com20020_found(dev, 0);
}
......@@ -209,8 +199,8 @@ static int __init com20020isa_setup(char *s)
return 1;
dev = alloc_bootmem(sizeof(struct net_device) + sizeof(struct arcnet_local) + 10);
memset(dev, 0, sizeof(struct net_device) + sizeof(struct arcnet_local) + 10);
lp = dev->priv = (struct arcnet_local *)(dev+1);
dev->name = (char *)(lp+1);
lp = dev->priv = (struct arcnet_local *) (dev + 1);
dev->name = (char *) (lp + 1);
dev->init = com20020isa_probe;
switch (ints[0]) {
......
......@@ -43,7 +43,8 @@
#define VERSION "arcnet: COM20020 PCI support\n"
#ifdef MODULE
static struct net_device *cards[16];
#define MAX_CARDS 16
static struct net_device *cards[MAX_CARDS];
static int numcards;
#endif
......@@ -68,8 +69,7 @@ static int __init com20020pci_probe(char *name_template, int node, int backplane
BUGLVL(D_NORMAL) printk(VERSION);
while ((pdev = pci_find_device(0x1571, 0xa004, pdev)))
{
while ((pdev = pci_find_device(0x1571, 0xa004, pdev))) {
if (pci_enable_device(pdev))
continue;
dev = dev_alloc(name_template ? : "arc%d", &err);
......@@ -92,26 +92,24 @@ static int __init com20020pci_probe(char *name_template, int node, int backplane
BUGMSG(D_INIT, "PCI BIOS reports a device at %Xh, IRQ %d\n",
ioaddr, dev->irq);
if (check_region(ioaddr, ARCNET_TOTAL_SIZE))
{
if (check_region(ioaddr, ARCNET_TOTAL_SIZE)) {
BUGMSG(D_INIT, "IO region %xh-%xh already allocated.\n",
ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
continue;
}
if (ASTATUS() == 0xFF)
{
if (ASTATUS() == 0xFF) {
BUGMSG(D_NORMAL, "IO address %Xh was reported by PCI BIOS, "
"but seems empty!\n", ioaddr);
continue;
}
if (com20020_check(dev))
continue;
if (!com20020_found(dev, SA_SHIRQ))
{
if (!com20020_found(dev, SA_SHIRQ)) {
#ifdef MODULE
if(numcards==MAX_CARDS)
printk(KERN_WARNING "com20020pci: Too many cards. Ignoring.\n");
else
cards[numcards++] = dev;
#endif
gotone++;
......@@ -148,8 +146,7 @@ void cleanup_module(void)
struct net_device *dev;
int count;
for (count = 0; count < numcards; count++)
{
for (count = 0; count < numcards; count++) {
dev = cards[count];
if (dev->start)
......
......@@ -46,12 +46,12 @@ static char *clockrates[] =
"156.25 Kb/s", "Reserved", "Reserved",
"Reserved"};
static void com20020_command (struct net_device *dev, int command);
static int com20020_status (struct net_device *dev);
static void com20020_setmask (struct net_device *dev, int mask);
static int com20020_reset (struct net_device *dev, int really_reset);
static void com20020_command(struct net_device *dev, int command);
static int com20020_status(struct net_device *dev);
static void com20020_setmask(struct net_device *dev, int mask);
static int com20020_reset(struct net_device *dev, int really_reset);
static void com20020_openclose(struct net_device *dev, bool open);
static void com20020_copy_to_card (struct net_device *dev, int bufnum,
static void com20020_copy_to_card(struct net_device *dev, int bufnum,
int offset, void *buf, int count);
static void com20020_copy_from_card(struct net_device *dev, int bufnum,
int offset, void *buf, int count);
......@@ -108,12 +108,10 @@ int __init com20020_check(struct net_device *dev)
status = ASTATUS();
if ((status & 0x99) != (NORXflag | TXFREEflag | RESETflag))
{
if ((status & 0x99) != (NORXflag | TXFREEflag | RESETflag)) {
BUGMSG(D_NORMAL, "status invalid (%Xh).\n", status);
return -ENODEV;
}
BUGMSG(D_INIT_REASONS, "status after reset: %X\n", status);
/* Enable TX */
......@@ -130,13 +128,11 @@ int __init com20020_check(struct net_device *dev)
outb(0 | RDDATAflag | AUTOINCflag, _ADDR_HI);
outb(0, _ADDR_LO);
if ((status = inb(_MEMDATA)) != TESTvalue)
{
if ((status = inb(_MEMDATA)) != TESTvalue) {
BUGMSG(D_NORMAL, "Signature byte not found (%02Xh != D1h).\n",
status);
return -ENODEV;
}
return 0;
}
......@@ -150,7 +146,7 @@ int __init com20020_found(struct net_device *dev, int shared)
/* Initialize the rest of the device structure. */
lp = (struct arcnet_local *)dev->priv;
lp = (struct arcnet_local *) dev->priv;
lp->hw.command = com20020_command;
lp->hw.status = com20020_status;
......@@ -183,12 +179,10 @@ int __init com20020_found(struct net_device *dev, int shared)
/* reserve the irq */
if (request_irq(dev->irq, &arcnet_interrupt, shared,
"arcnet (COM20020)", dev))
{
"arcnet (COM20020)", dev)) {
BUGMSG(D_NORMAL, "Can't get IRQ %d!\n", dev->irq);
return -ENODEV;
}
/* reserve the I/O region - guaranteed to work by check_region */
request_region(ioaddr, ARCNET_TOTAL_SIZE, "arcnet (COM20020)");
dev->base_addr = ioaddr;
......@@ -201,19 +195,15 @@ int __init com20020_found(struct net_device *dev, int shared)
if (lp->timeout != 3)
BUGMSG(D_NORMAL, "Using extended timeout value of %d.\n", lp->timeout);
if (lp->setup)
{
if (lp->setup) {
BUGMSG(D_NORMAL, "Using CKP %d - data rate %s.\n",
lp->setup >> 1, clockrates[lp->setup >> 1]);
}
if (!dev->init && register_netdev(dev))
{
if (!dev->init && register_netdev(dev)) {
free_irq(dev->irq, dev);
release_region(ioaddr, ARCNET_TOTAL_SIZE);
return -EIO;
}
return 0;
}
......@@ -228,7 +218,7 @@ int __init com20020_found(struct net_device *dev, int shared)
*/
static int com20020_reset(struct net_device *dev, int really_reset)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
short ioaddr = dev->base_addr;
u_char inbyte;
......@@ -239,25 +229,21 @@ static int com20020_reset(struct net_device *dev, int really_reset)
/* power-up defaults */
SETCONF(lp->config);
if (really_reset)
{
if (really_reset) {
/* reset the card */
ARCRESET;
mdelay(RESETtime * 2); /* COM20020 seems to be slower sometimes */
}
/* clear flags & end reset */
ACOMMAND(CFLAGScmd | RESETclear | CONFIGclear);
/* verify that the ARCnet signature byte is present */
com20020_copy_from_card(dev, 0, 0, &inbyte, 1);
if (inbyte != TESTvalue)
{
if (inbyte != TESTvalue) {
BUGMSG(D_NORMAL, "reset failed: TESTvalue not present.\n");
return 1;
}
/* enable extended (512-byte) packets */
ACOMMAND(CONFIGcmd | EXTconf);
......@@ -289,13 +275,12 @@ static int com20020_status(struct net_device *dev)
static void com20020_openclose(struct net_device *dev, bool open)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
int ioaddr = dev->base_addr;
if (open)
MOD_INC_USE_COUNT;
else
{
else {
/* disable transmitter */
lp->config &= ~TXENcfg;
SETCONF(lp->config);
......@@ -317,16 +302,14 @@ static void com20020_set_mc_list(struct net_device *dev)
struct arcnet_local *lp = dev->priv;
int ioaddr = dev->base_addr;
if ((dev->flags & IFF_PROMISC) && (dev->flags & IFF_UP))
{ /* Enable promiscuous mode */
if ((dev->flags & IFF_PROMISC) && (dev->flags & IFF_UP)) { /* Enable promiscuous mode */
if (!(lp->setup & PROMISCset))
BUGMSG(D_NORMAL, "Setting promiscuous flag...\n");
REGSETUP;
SETCONF(lp->config);
lp->setup |= PROMISCset;
outb(lp->setup, _SETUP);
}
else
} else
/* Disable promiscuous mode, use normal mode */
{
if ((lp->setup & PROMISCset))
......@@ -348,7 +331,7 @@ static void com20020_set_mc_list(struct net_device *dev)
SETCONF(lp->config);
BUGMSG(D_EXTRA, "New NextID detected: %X\n", inb(ioaddr + 7));
}
*/
*/
#ifdef MODULE
......
......@@ -43,12 +43,12 @@
/* Internal function declarations */
static int com90io_found(struct net_device *dev);
static void com90io_command (struct net_device *dev, int command);
static int com90io_status (struct net_device *dev);
static void com90io_setmask (struct net_device *dev, int mask);
static int com90io_reset (struct net_device *dev, int really_reset);
static void com90io_command(struct net_device *dev, int command);
static int com90io_status(struct net_device *dev);
static void com90io_setmask(struct net_device *dev, int mask);
static int com90io_reset(struct net_device *dev, int really_reset);
static void com90io_openclose(struct net_device *dev, bool open);
static void com90io_copy_to_card (struct net_device *dev, int bufnum, int offset,
static void com90io_copy_to_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count);
static void com90io_copy_from_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count);
......@@ -108,6 +108,7 @@ static void put_buffer_byte(struct net_device *dev, unsigned offset, u_char datu
outb(datum, _MEMDATA);
}
#endif
......@@ -162,18 +163,15 @@ static int __init com90io_probe(struct net_device *dev)
"must specify the base address!\n");
return -ENODEV;
}
if (check_region(ioaddr, ARCNET_TOTAL_SIZE)) {
BUGMSG(D_INIT_REASONS, "IO check_region %x-%x failed.\n",
ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
return -ENXIO;
}
if (ASTATUS() == 0xFF) {
BUGMSG(D_INIT_REASONS, "IO address %x empty\n", ioaddr);
return -ENODEV;
}
inb(_RESET);
mdelay(RESETtime);
......@@ -183,7 +181,6 @@ static int __init com90io_probe(struct net_device *dev)
BUGMSG(D_INIT_REASONS, "Status invalid (%Xh).\n", status);
return -ENODEV;
}
BUGMSG(D_INIT_REASONS, "Status after reset: %X\n", status);
ACOMMAND(CFLAGScmd | RESETclear | CONFIGclear);
......@@ -196,7 +193,6 @@ static int __init com90io_probe(struct net_device *dev)
BUGMSG(D_INIT_REASONS, "Eternal reset (status=%Xh)\n", status);
return -ENODEV;
}
outb((0x16 | IOMAPflag) & ~ENABLE16flag, _CONFIG);
/* Read first loc'n of memory */
......@@ -209,7 +205,6 @@ static int __init com90io_probe(struct net_device *dev)
" (%Xh instead).\n", status);
return -ENODEV;
}
if (!dev->irq) {
/*
* if we do this, we're sure to get an IRQ since the
......@@ -228,7 +223,6 @@ static int __init com90io_probe(struct net_device *dev)
return -ENODEV;
}
}
return com90io_found(dev);
}
......@@ -246,7 +240,6 @@ static int __init com90io_found(struct net_device *dev)
BUGMSG(D_NORMAL, "Can't get IRQ %d!\n", dev->irq);
return -ENODEV;
}
/* Reserve the I/O region - guaranteed to work by check_region */
request_region(dev->base_addr, ARCNET_TOTAL_SIZE, "arcnet (COM90xx-IO)");
......@@ -308,7 +301,6 @@ static int com90io_reset(struct net_device *dev, int really_reset)
inb(_RESET);
mdelay(RESETtime);
}
/* Set the thing to IO-mapped, 8-bit mode */
lp->config = (0x1C | IOMAPflag) & ~ENABLE16flag;
SETCONF();
......@@ -321,7 +313,6 @@ static int com90io_reset(struct net_device *dev, int really_reset)
BUGMSG(D_NORMAL, "reset failed: TESTvalue not present.\n");
return 1;
}
/* enable extended (512-byte) packets */
ACOMMAND(CONFIGcmd | EXTconf);
......@@ -364,14 +355,14 @@ static void com90io_openclose(struct net_device *dev, int open)
static void com90io_copy_to_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count)
{
TIME("put_whole_buffer", count, put_whole_buffer(dev, bufnum*512 + offset, count, buf));
TIME("put_whole_buffer", count, put_whole_buffer(dev, bufnum * 512 + offset, count, buf));
}
static void com90io_copy_from_card(struct net_device *dev, int bufnum, int offset,
void *buf, int count)
{
TIME("get_whole_buffer", count, get_whole_buffer(dev, bufnum*512 + offset, count, buf));
TIME("get_whole_buffer", count, get_whole_buffer(dev, bufnum * 512 + offset, count, buf));
}
......@@ -445,7 +436,7 @@ static int __init com90io_setup(char *s)
return 1;
dev = alloc_bootmem(sizeof(struct net_device) + 10);
memset(dev, 0, sizeof(struct net_device) + 10);
dev->name = (char *)(dev+1);
dev->name = (char *) (dev + 1);
dev->init = com90io_probe;
switch (ints[0]) {
......
This diff is collapsed.
......@@ -44,7 +44,8 @@ static int prepare_tx(struct net_device *dev, struct archdr *pkt, int length,
int bufnum);
struct ArcProto rfc1051_proto = {
struct ArcProto rfc1051_proto =
{
's',
XMTU - RFC1051_HDR_SIZE,
rx,
......@@ -90,8 +91,8 @@ void cleanup_module(void)
*/
static unsigned short type_trans(struct sk_buff *skb, struct net_device *dev)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct archdr *pkt = (struct archdr *)skb->data;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
struct archdr *pkt = (struct archdr *) skb->data;
struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
......@@ -101,16 +102,13 @@ static unsigned short type_trans(struct sk_buff *skb, struct net_device *dev)
if (pkt->hard.dest == 0)
skb->pkt_type = PACKET_BROADCAST;
else if (dev->flags & IFF_PROMISC)
{
else if (dev->flags & IFF_PROMISC) {
/* if we're not sending to ourselves :) */
if (pkt->hard.dest != dev->dev_addr[0])
skb->pkt_type = PACKET_OTHERHOST;
}
/* now return the protocol number */
switch (soft->proto)
{
switch (soft->proto) {
case ARC_P_IP_RFC1051:
return htons(ETH_P_IP);
case ARC_P_ARP_RFC1051:
......@@ -130,7 +128,7 @@ static unsigned short type_trans(struct sk_buff *skb, struct net_device *dev)
static void rx(struct net_device *dev, int bufnum,
struct archdr *pkthdr, int length)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
struct sk_buff *skb;
struct archdr *pkt = pkthdr;
int ofs;
......@@ -143,17 +141,15 @@ static void rx(struct net_device *dev, int bufnum,
ofs = 256 - length;
skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
if (skb == NULL)
{
if (skb == NULL) {
BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
lp->stats.rx_dropped++;
return;
}
skb_put(skb, length + ARC_HDR_SIZE);
skb->dev = dev;
pkt = (struct archdr *)skb->data;
pkt = (struct archdr *) skb->data;
/* up to sizeof(pkt->soft) has already been copied from the card */
memcpy(pkt, pkthdr, sizeof(struct archdr));
......@@ -176,14 +172,13 @@ static int build_header(struct sk_buff *skb, unsigned short type,
uint8_t daddr)
{
struct net_device *dev = skb->dev;
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
struct archdr *pkt = (struct archdr *)skb_push(skb, hdr_size);
struct archdr *pkt = (struct archdr *) skb_push(skb, hdr_size);
struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
/* set the protocol ID according to RFC1051 */
switch (type)
{
switch (type) {
case ETH_P_IP:
soft->proto = ARC_P_IP_RFC1051;
break;
......@@ -210,8 +205,7 @@ static int build_header(struct sk_buff *skb, unsigned short type,
/* see linux/net/ethernet/eth.c to see where I got the following */
if (dev->flags & (IFF_LOOPBACK|IFF_NOARP))
{
if (dev->flags & (IFF_LOOPBACK | IFF_NOARP)) {
/*
* FIXME: fill in the last byte of the dest ipaddr here to better
* comply with RFC1051 in "noarp" mode.
......@@ -219,7 +213,6 @@ static int build_header(struct sk_buff *skb, unsigned short type,
pkt->hard.dest = 0;
return hdr_size;
}
/* otherwise, just fill it in and go! */
pkt->hard.dest = daddr;
......@@ -230,7 +223,7 @@ static int build_header(struct sk_buff *skb, unsigned short type,
static int prepare_tx(struct net_device *dev, struct archdr *pkt, int length,
int bufnum)
{
struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
struct arcnet_local *lp = (struct arcnet_local *) dev->priv;
struct arc_hardware *hard = &pkt->hard;
int ofs;
......@@ -239,25 +232,19 @@ static int prepare_tx(struct net_device *dev, struct archdr *pkt, int length,
length -= ARC_HDR_SIZE; /* hard header is not included in packet length */
if (length > XMTU)
{
if (length > XMTU) {
/* should never happen! other people already check for this. */
BUGMSG(D_NORMAL, "Bug! prepare_tx with size %d (> %d)\n",
length, XMTU);
length = XMTU;
}
if (length > MinTU)
{
if (length > MinTU) {
hard->offset[0] = 0;
hard->offset[1] = ofs = 512 - length;
}
else if (length > MTU)
{
} else if (length > MTU) {
hard->offset[0] = 0;
hard->offset[1] = ofs = 512 - length - 3;
}
else
} else
hard->offset[0] = ofs = 256 - length;
lp->hw.copy_to_card(dev, bufnum, 0, hard, ARC_HDR_SIZE);
......
This diff is collapsed.
......@@ -672,7 +672,7 @@ struct pci_dev * __init pci_scan_slot(struct pci_dev *temp)
first_dev = dev;
}
DBG("PCI: %02x:%02x [%04x/%04x] %06x %02x\n", bus->number, dev->devfn, dev->vendor, dev->device, class, hdr_type);
DBG("PCI: %02x:%02x [%04x/%04x] %06x %02x\n", bus->number, dev->devfn, dev->vendor, dev->device, dev->class, hdr_type);
/*
* Put it into the global PCI device chain. It's used to
......
......@@ -185,8 +185,8 @@ int cb_setup_cis_mem(socket_info_t *s, int space)
/* Not configured? Then set up temporary map */
br = (space == 7) ? CB_ROM_BASE : CB_BAR(space-1);
pci_writel(s->cap.cardbus, 0, br, 0xffffffff);
pci_readl(s->cap.cardbus, 0, br, &sz);
pci_writel(s->cap.cb_dev->subordinate->number, 0, br, 0xffffffff);
pci_readl(s->cap.cb_dev->subordinate->number, 0, br, &sz);
sz &= PCI_BASE_ADDRESS_MEM_MASK;
sz = FIND_FIRST_BIT(sz);
if (sz < PAGE_SIZE) sz = PAGE_SIZE;
......@@ -199,8 +199,8 @@ int cb_setup_cis_mem(socket_info_t *s, int space)
s->cb_cis_virt = ioremap(base, sz);
DEBUG(1, " phys 0x%08lx-0x%08lx, virt 0x%08lx\n",
base, base+sz-1, (u_long)s->cb_cis_virt);
pci_writel(s->cap.cardbus, 0, br, base | 1);
pci_writeb(s->cap.cardbus, 0, PCI_COMMAND, PCI_COMMAND_MEMORY);
pci_writel(s->cap.cb_dev->subordinate->number, 0, br, base | 1);
pci_writeb(s->cap.cb_dev->subordinate->number, 0, PCI_COMMAND, PCI_COMMAND_MEMORY);
m->map = 0; m->flags = MAP_ACTIVE;
m->start = base; m->stop = base+sz-1;
s->ss_entry->set_bridge(s->sock, m);
......@@ -228,8 +228,8 @@ void cb_release_cis_mem(socket_info_t *s)
CB_ROM_BASE : CB_BAR(s->cb_cis_space-1);
m->map = 0; m->flags = 0;
s->ss_entry->set_bridge(s->sock, m);
pci_writeb(s->cap.cardbus, 0, PCI_COMMAND, 0);
pci_writel(s->cap.cardbus, 0, br, 0);
pci_writeb(s->cap.cb_dev->subordinate->number, 0, PCI_COMMAND, 0);
pci_writel(s->cap.cb_dev->subordinate->number, 0, br, 0);
release_mem_region(m->start, m->stop - m->start + 1);
m->start = 0;
}
......@@ -249,7 +249,7 @@ void read_cb_mem(socket_info_t *s, u_char fn, int space,
if (space == 0) {
if (addr+len > 0x100) goto fail;
for (; len; addr++, ptr++, len--)
pci_readb(s->cap.cardbus, fn, addr, (u_char *)ptr);
pci_readb(s->cap.cb_dev->subordinate->number, fn, addr, (u_char *)ptr);
} else {
if (cb_setup_cis_mem(s, space) != 0) goto fail;
if (space == 7) {
......@@ -278,57 +278,62 @@ void read_cb_mem(socket_info_t *s, u_char fn, int space,
int cb_alloc(socket_info_t *s)
{
struct pci_bus *bus;
struct pci_dev tmp;
u_short vend, v, dev;
u_char i, hdr, fn, bus = s->cap.cardbus;
u_char i, hdr, fn;
cb_config_t *c;
bus = s->cap.cb_dev->subordinate;
memset(&tmp, 0, sizeof(tmp));
tmp.bus = s->cap.cb_bus; tmp.devfn = 0;
tmp.bus = bus; tmp.devfn = 0;
printk("bus=%p, number=%d\n", bus, bus->number);
pci_read_config_word(&tmp, PCI_VENDOR_ID, &vend);
pci_read_config_word(&tmp, PCI_DEVICE_ID, &dev);
printk(KERN_INFO "cs: cb_alloc(bus %d): vendor 0x%04x, "
"device 0x%04x\n", bus, vend, dev);
"device 0x%04x\n", bus->number, vend, dev);
pci_read_config_byte(&tmp, PCI_HEADER_TYPE, &hdr);
fn = 1;
if (hdr & 0x80) {
/* Count functions */
for (fn = 0; fn < 8; fn++) {
do {
tmp.devfn = fn;
pci_read_config_word(&tmp, PCI_VENDOR_ID, &v);
if (v != vend) break;
fn++;
} while (fn < 8);
}
} else fn = 1;
s->functions = fn;
c = kmalloc(fn * sizeof(struct cb_config_t), GFP_ATOMIC);
if (!c) return CS_OUT_OF_RESOURCE;
memset(c, 0, fn * sizeof(struct cb_config_t));
s->cb_config = c;
for (i = 0; i < fn; i++) {
c[i].dev.bus = s->cap.cb_bus;
c[i].dev.devfn = i;
struct pci_dev *dev = &c[i].dev;
dev->bus = bus;
dev->devfn = i;
if (i < fn-1) {
c[i].dev.sibling = c[i].dev.next = &c[i+1].dev;
dev->sibling = dev->next = &c[i+1].dev;
}
dev->vendor = vend;
pci_read_config_word(dev, PCI_DEVICE_ID, &dev->device);
pci_read_config_dword(dev, PCI_CLASS_REVISION, &dev->class);
dev->class >>= 8;
dev->hdr_type = hdr;
#ifdef CONFIG_PROC_FS
pci_proc_attach_device(dev);
#endif
}
s->cap.cb_bus->devices = &c[0].dev;
/* Link into PCI device chain */
bus->devices = &c[0].dev;
c[fn-1].dev.next = pci_devices;
pci_devices = &c[0].dev;
for (i = 0; i < fn; i++) {
c[i].dev.vendor = vend;
pci_readw(bus, i, PCI_DEVICE_ID, &c[i].dev.device);
pci_readl(bus, i, PCI_CLASS_REVISION, &c[i].dev.class);
c[i].dev.class >>= 8;
c[i].dev.hdr_type = hdr;
#ifdef CONFIG_PROC_FS
pci_proc_attach_device(&c[i].dev);
#endif
}
s->cb_config = c;
return CS_SUCCESS;
}
......@@ -336,6 +341,7 @@ int cb_alloc(socket_info_t *s)
void cb_free(socket_info_t *s)
{
cb_config_t *c = s->cb_config;
struct pci_bus *bus = s->cap.cb_dev->subordinate;
if (c) {
struct pci_dev **p;
......@@ -343,7 +349,7 @@ void cb_free(socket_info_t *s)
p = &pci_devices;
while (*p) {
struct pci_dev * dev = *p;
if (dev->bus != s->cap.cb_bus) {
if (dev->bus != bus) {
p = &dev->next;
continue;
}
......@@ -352,10 +358,10 @@ void cb_free(socket_info_t *s)
pci_proc_detach_device(dev);
#endif
}
s->cap.cb_bus->devices = NULL;
bus->devices = NULL;
kfree(s->cb_config);
s->cb_config = NULL;
printk(KERN_INFO "cs: cb_free(bus %d)\n", s->cap.cardbus);
printk(KERN_INFO "cs: cb_free(bus %d)\n", s->cap.cb_dev->subordinate->number);
}
}
......@@ -375,11 +381,11 @@ int cb_config(socket_info_t *s)
{
cb_config_t *c = s->cb_config;
u_char fn = s->functions;
u_char i, j, bus = s->cap.cardbus, *name;
u_char i, j, bus = s->cap.cb_dev->subordinate->number, *name;
u_int sz, align, m, mask[3], num[3], base[3];
int irq, try, ret;
printk(KERN_INFO "cs: cb_config(bus %d)\n", s->cap.cardbus);
printk(KERN_INFO "cs: cb_config(bus %d)\n", s->cap.cb_dev->subordinate->number);
/* Determine IO and memory space needs */
num[B_IO] = num[B_M1] = num[B_M2] = 0;
......@@ -524,7 +530,7 @@ void cb_release(socket_info_t *s)
{
cb_config_t *c = s->cb_config;
DEBUG(0, "cs: cb_release(bus %d)\n", s->cap.cardbus);
DEBUG(0, "cs: cb_release(bus %d)\n", s->cap.cb_dev->subordinate->number);
if (s->win[0].size > 0)
release_mem_region(s->win[0].base, s->win[0].size);
......@@ -556,7 +562,7 @@ void cb_release(socket_info_t *s)
void cb_enable(socket_info_t *s)
{
u_char i, j, bus = s->cap.cardbus;
u_char i, j, bus = s->cap.cb_dev->subordinate->number;
cb_config_t *c = s->cb_config;
DEBUG(0, "cs: cb_enable(bus %d)\n", bus);
......@@ -630,7 +636,7 @@ void cb_disable(socket_info_t *s)
u_char i;
cb_bridge_map m = { 0, 0, 0, 0xffff };
DEBUG(0, "cs: cb_disable(bus %d)\n", s->cap.cardbus);
DEBUG(0, "cs: cb_disable(bus %d)\n", s->cap.cb_dev->subordinate->number);
/* Turn off bridge windows */
if (s->cb_cis_map.start)
......
......@@ -367,7 +367,7 @@ int pcmcia_get_first_tuple(client_handle_t handle, tuple_t *tuple)
#ifdef CONFIG_CARDBUS
if (s->state & SOCKET_CARDBUS) {
u_int ptr;
pcibios_read_config_dword(s->cap.cardbus, 0, 0x28, &ptr);
pcibios_read_config_dword(s->cap.cb_dev->subordinate->number, 0, 0x28, &ptr);
tuple->CISOffset = ptr & ~7;
SPACE(tuple->Flags) = (ptr & 7);
} else
......
......@@ -46,6 +46,7 @@
#include <linux/delay.h>
#include <linux/proc_fs.h>
#include <linux/compile.h>
#include <linux/pci.h>
#include <asm/system.h>
#include <asm/irq.h>
......@@ -994,7 +995,7 @@ int pcmcia_get_configuration_info(client_handle_t handle,
config->Function = fn;
config->Vcc = s->socket.Vcc;
config->Vpp1 = config->Vpp2 = s->socket.Vpp;
config->Option = s->cap.cardbus;
config->Option = s->cap.cb_dev->subordinate->number;
if (s->cb_config) {
config->Attributes = CONF_VALID_CLIENT;
config->IntType = INT_CARDBUS;
......
......@@ -1615,7 +1615,7 @@ static void __init add_cb_bridge(int type, struct pci_dev *dev0)
break;
}
request_mem_region(s->cb_phys, 0x1000, "i82365");
s->cap.cb_bus = dev->subordinate;
s->cap.cb_dev = dev;
add_socket(0, 0, type);
}
if (ns == 0) return;
......
......@@ -30,7 +30,7 @@
static struct pci_simple_probe_entry controller_list[] = {
{ PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1225, 0, 0, &yenta_operations },
{ 0x1180, 0x0475, 0, 0, &yenta_operations },
{ 0x1180, 0x0475, 0, 0, &ricoh_operations },
{ 0, 0, 0, 0, NULL }
};
......
......@@ -36,3 +36,5 @@ struct pci_socket_ops {
};
extern struct pci_socket_ops yenta_operations;
extern struct pci_socket_ops ricoh_operations;
This diff is collapsed.
......@@ -4,35 +4,6 @@
#include <asm/io.h>
#include "pci_socket.h"
/*
* Generate easy-to-use ways of reading a cardbus sockets
* regular memory space ("cb_xxx"), configuration space
* ("config_xxx") and compatibility space ("exca_xxxx")
*/
#define cb_readb(sock,reg) readb((sock)->base + (reg))
#define cb_readw(sock,reg) readw((sock)->base + (reg))
#define cb_readl(sock,reg) readl((sock)->base + (reg))
#define cb_writeb(sock,reg,val) writeb((val), (sock)->base + (reg))
#define cb_writew(sock,reg,val) writew((val), (sock)->base + (reg))
#define cb_writel(sock,reg,val) writel((val), (sock)->base + (reg))
#define config_readb(sock,offset) ({ __u8 __val; pci_read_config_byte((sock)->dev, (offset), &__val); __val; })
#define config_readw(sock,offset) ({ __u16 __val; pci_read_config_word((sock)->dev, (offset), &__val); __val; })
#define config_readl(sock,offset) ({ __u32 __val; pci_read_config_dword((sock)->dev, (offset), &__val); __val; })
#define config_writeb(sock,offset,val) pci_write_config_byte((sock)->dev, (offset), (val))
#define config_writew(sock,offset,val) pci_write_config_word((sock)->dev, (offset), (val))
#define config_writel(sock,offset,val) pci_write_config_dword((sock)->dev, (offset), (val))
#define exca_readb(sock,reg) cb_readb((sock),(reg)+0x0800)
#define exca_readw(sock,reg) cb_readw((sock),(reg)+0x0800)
#define exca_readl(sock,reg) cb_readl((sock),(reg)+0x0800)
#define exca_writeb(sock,reg,val) cb_writeb((sock),(reg)+0x0800,(val))
#define exca_writew(sock,reg,val) cb_writew((sock),(reg)+0x0800,(val))
#define exca_writel(sock,reg,val) cb_writel((sock),(reg)+0x0800,(val))
#define CB_SOCKET_EVENT 0x00
#define CB_CSTSEVENT 0x00000001 /* Card status event */
#define CB_CD1EVENT 0x00000002 /* Card detect 1 change event */
......@@ -81,17 +52,20 @@
#define CB_CVSTEST 0x00004000 /* Card VS test */
#define CB_SOCKET_CONTROL 0x10
#define CB_VPPCTRL 0 /* Shift for Vpp */
#define CB_VCCCTRL 4 /* Shift for Vcc */
#define CB_STOPCLK 0x00000080 /* CLKRUN can slow CB clock when idle */
#define CB_PWRBITS 0x7
#define CB_PWROFF 0x0
#define CB_PWR12V 0x1 /* Only valid for Vpp */
#define CB_PWR5V 0x2
#define CB_PWR3V 0x3
#define CB_PWRXV 0x4
#define CB_PWRYV 0x5
#define CB_SC_VPP_MASK 0x00000007
#define CB_SC_VPP_OFF 0x00000000
#define CB_SC_VPP_12V 0x00000001
#define CB_SC_VPP_5V 0x00000002
#define CB_SC_VPP_3V 0x00000003
#define CB_SC_VPP_XV 0x00000004
#define CB_SC_VPP_YV 0x00000005
#define CB_SC_VCC_MASK 0x00000070
#define CB_SC_VCC_OFF 0x00000000
#define CB_SC_VCC_5V 0x00000020
#define CB_SC_VCC_3V 0x00000030
#define CB_SC_VCC_XV 0x00000040
#define CB_SC_VCC_YV 0x00000050
#define CB_SC_CCLK_STOP 0x00000080
#define CB_SOCKET_POWER 0x20
#define CB_SKTACCES 0x02000000 /* A PC card access has occurred (clear on read) */
......@@ -115,6 +89,7 @@
#define CB_BRIDGE_PREFETCH0 0x00000100
#define CB_BRIDGE_PREFETCH1 0x00000200
#define CB_BRIDGE_POSTEN 0x00000400
#define CB_LEGACY_MODE_BASE 0x44
/*
* ExCA area extensions in Yenta
......
......@@ -10,7 +10,7 @@ comment 'USB Controllers'
dep_tristate ' UHCI (Intel PIIX4, VIA, and others) support' CONFIG_USB_UHCI \
$CONFIG_USB
dep_tristate ' OHCI-HCD (Compaq, iMacs, OPTi, SiS, and others) support' \
dep_tristate ' OHCI-HCD (Compaq, iMacs, OPTi, SiS, ALi, and others) support' \
CONFIG_USB_OHCI_HCD $CONFIG_USB
comment 'Miscellaneous USB options'
......
#!/usr/bin/perl
# Reads /proc/bus/usb/devices and selectively lists and/or
# interprets it.
$DEVFILENAME = "/proc/bus/usb/devices";
$PROGNAME = $0;
$TAGS = $ARGV[0]; # save user TAGS
if (length ($TAGS) == 0)
{
print "usage: $PROGNAME tags\n";
print " where 'tags' can be any number of 'TDPCIE' or 'A(LL)'\n";
exit 1;
}
$ALL = ($TAGS =~ /all/i) || ($TAGS =~ /a/i);
# TBD: Check that $TAGS is valid.
if (! $ALL)
{
}
if (! open (DEVNUM, "<$DEVFILENAME"))
{
print "$PROGNAME: cannot open '$DEVFILENAME'\n";
exit 1;
}
while ($line = <DEVNUM>) # read a text line from DEVNUM
{
if (($ALL) || ($line =~ /^[$TAGS]:/i)) # any of TAGS at beg. of line?
{
print "$line"; # still has newline char on it
# TBD: add more/paging functionality.
}
} # end while DEVNUM
close (DEVNUM);
# END.
......@@ -17,6 +17,7 @@
#include <linux/smp_lock.h>
#include <linux/quotaops.h>
#include <linux/pagemap.h>
#include <linux/dcache.h>
#include <asm/uaccess.h>
#include <asm/unaligned.h>
......@@ -550,83 +551,6 @@ static inline int may_create(struct inode *dir, struct dentry *child) {
return permission(dir,MAY_WRITE | MAY_EXEC);
}
static inline struct dentry *get_parent(struct dentry *dentry)
{
return dget(dentry->d_parent);
}
static inline void unlock_dir(struct dentry *dir)
{
up(&dir->d_inode->i_sem);
dput(dir);
}
/*
* We need to do a check-parent every time
* after we have locked the parent - to verify
* that the parent is still our parent and
* that we are still hashed onto it..
*
* This is requied in case two processes race
* on removing (or moving) the same entry: the
* parent lock will serialize them, but the
* other process will be too late..
*/
#define check_parent(dir, dentry) \
((dir) == (dentry)->d_parent && !list_empty(&dentry->d_hash))
/*
* Locking the parent is needed to:
* - serialize directory operations
* - make sure the parent doesn't change from
* under us in the middle of an operation.
*
* NOTE! Right now we'd rather use a "struct inode"
* for this, but as I expect things to move toward
* using dentries instead for most things it is
* probably better to start with the conceptually
* better interface of relying on a path of dentries.
*/
static inline struct dentry *lock_parent(struct dentry *dentry)
{
struct dentry *dir = dget(dentry->d_parent);
down(&dir->d_inode->i_sem);
return dir;
}
/*
* Whee.. Deadlock country. Happily there are only two VFS
* operations that do this..
*/
static inline void double_lock(struct dentry *d1, struct dentry *d2)
{
struct semaphore *s1 = &d1->d_inode->i_sem;
struct semaphore *s2 = &d2->d_inode->i_sem;
if (s1 != s2) {
if ((unsigned long) s1 < (unsigned long) s2) {
struct semaphore *tmp = s2;
s2 = s1; s1 = tmp;
}
down(s1);
}
down(s2);
}
static inline void double_unlock(struct dentry *d1, struct dentry *d2)
{
struct semaphore *s1 = &d1->d_inode->i_sem;
struct semaphore *s2 = &d2->d_inode->i_sem;
up(s1);
if (s1 != s2)
up(s2);
dput(d1);
dput(d2);
}
/*
* Special case: O_CREAT|O_EXCL implies O_NOFOLLOW for security
* reasons.
......
......@@ -22,7 +22,7 @@
#ifdef __KERNEL__
#ifndef bool
# define bool int
#define bool int
#endif
......@@ -176,24 +176,22 @@ extern int arcnet_debug;
/* information needed to define an encapsulation driver */
struct ArcProto
{
struct ArcProto {
char suffix; /* a for RFC1201, e for ether-encap, etc. */
int mtu; /* largest possible packet */
void (*rx)(struct net_device *dev, int bufnum,
struct archdr *pkthdr, int length);
int (*build_header)(struct sk_buff *skb, unsigned short ethproto,
void (*rx) (struct net_device * dev, int bufnum,
struct archdr * pkthdr, int length);
int (*build_header) (struct sk_buff * skb, unsigned short ethproto,
uint8_t daddr);
/* these functions return '1' if the skb can now be freed */
int (*prepare_tx)(struct net_device *dev, struct archdr *pkt, int length,
int (*prepare_tx) (struct net_device * dev, struct archdr * pkt, int length,
int bufnum);
int (*continue_tx)(struct net_device *dev, int bufnum);
int (*continue_tx) (struct net_device * dev, int bufnum);
};
extern struct ArcProto *arc_proto_map[256],
*arc_proto_default, *arc_bcast_proto;
extern struct ArcProto *arc_proto_map[256], *arc_proto_default, *arc_bcast_proto;
extern struct ArcProto arc_proto_null;
......@@ -201,8 +199,7 @@ extern struct ArcProto arc_proto_null;
* "Incoming" is information needed for each address that could be sending
* to us. Mostly for partially-received split packets.
*/
struct Incoming
{
struct Incoming {
struct sk_buff *skb; /* packet data buffer */
uint16_t sequence; /* sequence number of assembly */
uint8_t lastpacket, /* number of last packet (from 1) */
......@@ -211,8 +208,7 @@ struct Incoming
/* only needed for RFC1201 */
struct Outgoing
{
struct Outgoing {
struct ArcProto *proto; /* protocol driver that owns this:
* if NULL, no packet is pending.
*/
......@@ -225,8 +221,7 @@ struct Outgoing
};
struct arcnet_local
{
struct arcnet_local {
struct net_device_stats stats;
uint8_t config, /* current value of CONFIG register */
......@@ -283,16 +278,16 @@ struct arcnet_local
/* hardware-specific functions */
struct {
void (*command) (struct net_device *dev, int cmd);
int (*status) (struct net_device *dev);
void (*intmask) (struct net_device *dev, int mask);
bool (*reset) (struct net_device *dev, bool really_reset);
void (*open_close)(struct net_device *dev, bool open);
void (*open_close_ll)(struct net_device *dev, bool open);
void (*copy_to_card)(struct net_device *dev, int bufnum, int offset,
void (*command) (struct net_device * dev, int cmd);
int (*status) (struct net_device * dev);
void (*intmask) (struct net_device * dev, int mask);
bool (*reset) (struct net_device * dev, bool really_reset);
void (*open_close) (struct net_device * dev, bool open);
void (*open_close_ll) (struct net_device * dev, bool open);
void (*copy_to_card) (struct net_device * dev, int bufnum, int offset,
void *buf, int count);
void (*copy_from_card)(struct net_device *dev, int bufnum, int offset,
void (*copy_from_card) (struct net_device * dev, int bufnum, int offset,
void *buf, int count);
} hw;
......@@ -311,13 +306,13 @@ struct arcnet_local
#if ARCNET_DEBUG_MAX & D_SKB
void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc);
#else
# define arcnet_dump_skb(dev,skb,desc) ;
#define arcnet_dump_skb(dev,skb,desc) ;
#endif
#if (ARCNET_DEBUG_MAX & D_RX) || (ARCNET_DEBUG_MAX & D_TX)
void arcnet_dump_packet(struct net_device *dev, int bufnum, char *desc);
#else
# define arcnet_dump_packet(dev, bufnum, desc) ;
#define arcnet_dump_packet(dev, bufnum, desc) ;
#endif
void arcnet_unregister_proto(struct ArcProto *proto);
......
......@@ -996,6 +996,91 @@ extern int generic_buffer_fdatasync(struct inode *inode, unsigned long start_idx
extern int inode_change_ok(struct inode *, struct iattr *);
extern void inode_setattr(struct inode *, struct iattr *);
/*
* Common dentry functions for inclusion in the VFS
* or in other stackable file systems. Some of these
* functions were in linux/fs/ C (VFS) files.
*
*/
/*
* We need to do a check-parent every time
* after we have locked the parent - to verify
* that the parent is still our parent and
* that we are still hashed onto it..
*
* This is required in case two processes race
* on removing (or moving) the same entry: the
* parent lock will serialize them, but the
* other process will be too late..
*/
#define check_parent(dir, dentry) \
((dir) == (dentry)->d_parent && !list_empty(&dentry->d_hash))
/*
* Locking the parent is needed to:
* - serialize directory operations
* - make sure the parent doesn't change from
* under us in the middle of an operation.
*
* NOTE! Right now we'd rather use a "struct inode"
* for this, but as I expect things to move toward
* using dentries instead for most things it is
* probably better to start with the conceptually
* better interface of relying on a path of dentries.
*/
static inline struct dentry *lock_parent(struct dentry *dentry)
{
struct dentry *dir = dget(dentry->d_parent);
down(&dir->d_inode->i_sem);
return dir;
}
static inline struct dentry *get_parent(struct dentry *dentry)
{
return dget(dentry->d_parent);
}
static inline void unlock_dir(struct dentry *dir)
{
up(&dir->d_inode->i_sem);
dput(dir);
}
/*
* Whee.. Deadlock country. Happily there are only two VFS
* operations that does this..
*/
static inline void double_lock(struct dentry *d1, struct dentry *d2)
{
struct semaphore *s1 = &d1->d_inode->i_sem;
struct semaphore *s2 = &d2->d_inode->i_sem;
if (s1 != s2) {
if ((unsigned long) s1 < (unsigned long) s2) {
struct semaphore *tmp = s2;
s2 = s1; s1 = tmp;
}
down(s1);
}
down(s2);
}
static inline void double_unlock(struct dentry *d1, struct dentry *d2)
{
struct semaphore *s1 = &d1->d_inode->i_sem;
struct semaphore *s2 = &d2->d_inode->i_sem;
up(s1);
if (s1 != s2)
up(s2);
dput(d1);
dput(d2);
}
#endif /* __KERNEL__ */
#endif /* _LINUX_FS_H */
......@@ -438,6 +438,15 @@ extern unsigned long page_unuse(struct page *);
extern int shrink_mmap(int, int);
extern void truncate_inode_pages(struct inode *, loff_t);
/* generic vm_area_ops exported for stackable file systems */
extern int filemap_swapout(struct page * page, struct file *file);
extern pte_t filemap_swapin(struct vm_area_struct * vma,
unsigned long offset, unsigned long entry);
extern int filemap_sync(struct vm_area_struct * vma, unsigned long address,
size_t size, unsigned int flags);
extern struct page *filemap_nopage(struct vm_area_struct * area,
unsigned long address, int no_share);
/*
* GFP bitmasks..
*/
......
......@@ -117,6 +117,9 @@ extern struct screen_info screen_info;
#define VIDEO_TYPE_PMAC 0x60 /* PowerMacintosh frame buffer. */
#define VIDEO_TYPE_SGI 0x70 /* Various SGI graphics hardware */
#define VIDEO_TYPE_MIPS_G364 0x71 /* MIPS Magnum 4000 G364 video */
/*
* This character is the same as _POSIX_VDISABLE: it cannot be used as
* a c_cc[] character, but indicates that a particular special character
......
......@@ -52,8 +52,7 @@ typedef struct socket_cap_t {
u_int irq_mask;
u_int map_size;
u_char pci_irq;
u_char cardbus;
struct pci_bus *cb_bus;
struct pci_dev *cb_dev;
struct bus_operations *bus;
} socket_cap_t;
......
......@@ -225,6 +225,13 @@ EXPORT_SYMBOL(page_readlink);
EXPORT_SYMBOL(page_follow_link);
EXPORT_SYMBOL(block_symlink);
/* for stackable file systems (lofs, wrapfs, etc.) */
EXPORT_SYMBOL(add_to_page_cache);
EXPORT_SYMBOL(filemap_nopage);
EXPORT_SYMBOL(filemap_swapout);
EXPORT_SYMBOL(filemap_sync);
EXPORT_SYMBOL(remove_inode_page);
#if !defined(CONFIG_NFSD) && defined(CONFIG_NFSD_MODULE)
EXPORT_SYMBOL(do_nfsservctl);
#endif
......@@ -450,4 +457,5 @@ EXPORT_SYMBOL(get_fast_time);
/* library functions */
EXPORT_SYMBOL(strnicmp);
/* init task, for moving kthread roots - ought to export a function ?? */
EXPORT_SYMBOL(init_task_union);
......@@ -1298,7 +1298,7 @@ asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t *offset, size_t cou
* it in the page cache, and handles the special cases reasonably without
* having a lot of duplicated code.
*/
static struct page * filemap_nopage(struct vm_area_struct * area,
struct page * filemap_nopage(struct vm_area_struct * area,
unsigned long address, int no_share)
{
int error;
......@@ -1595,7 +1595,7 @@ static inline int filemap_sync_pmd_range(pgd_t * pgd,
return error;
}
static int filemap_sync(struct vm_area_struct * vma, unsigned long address,
int filemap_sync(struct vm_area_struct * vma, unsigned long address,
size_t size, unsigned int flags)
{
pgd_t * dir;
......
......@@ -87,7 +87,7 @@
#include <linux/rtnetlink.h>
#include <net/br.h>
#include <linux/proc_fs.h>
#include <linux/br.h>
#include <linux/delay.h>
#ifndef min
#define min(a, b) (((a) <= (b)) ? (a) : (b))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment