From 08eb400cbebc7717f546845df7b87ad6f8711cf5 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 4 Feb 2002 19:11:21 -0800 Subject: [PATCH] v2.4.6.5 -> v2.4.6.6 - me: fix more buffer head SMP races (non-x86 only - weak memory ordering) - Andrea Arkangeli: some bh cleanups from the buffer race condition fix - Tim Waugh: parport drievr documentation, init sanity - Ion Badulescu: starfire net driver update - David Miller: sparc and networking updates - Ivan Kokshaysky: alpha version of the inlined rw-semaphores - NIIBE Yutaka: SuperH update --- Documentation/Configure.help | 40 +- Documentation/fb/00-INDEX | 2 + Documentation/fb/pvr2fb.txt | 61 ++ Makefile | 2 +- arch/alpha/config.in | 4 +- arch/alpha/kernel/alpha_ksyms.c | 4 - drivers/block/ll_rw_blk.c | 10 - drivers/block/ps2esdi.c | 5 +- drivers/char/lp.c | 34 +- drivers/char/mem.c | 3 - drivers/net/pppoe.c | 14 +- drivers/net/starfire.c | 79 +- drivers/net/stnic.c | 6 + drivers/parport/ChangeLog | 8 + drivers/parport/Config.in | 8 + drivers/parport/Makefile | 1 + drivers/parport/init.c | 3 +- drivers/parport/parport_pc.c | 6 +- drivers/parport/parport_serial.c | 353 +++++++++ drivers/pcmcia/hd64465_ss.c | 2 +- drivers/scsi/aic7xxx_old.c | 4 +- drivers/video/Config.in | 20 +- drivers/video/Makefile | 2 +- drivers/video/dcfb.c | 504 ------------- drivers/video/fbmem.c | 9 +- drivers/video/pvr2fb.c | 1171 ++++++++++++++++++++++++++++++ fs/buffer.c | 40 +- include/asm-alpha/atomic.h | 5 + include/asm-alpha/rwsem.h | 208 ++++++ include/asm-i386/atomic.h | 6 + include/asm-ia64/atomic.h | 6 + include/asm-m68k/atomic.h | 6 + include/asm-mips/atomic.h | 6 + include/asm-mips64/atomic.h | 6 + include/asm-ppc/atomic.h | 5 + include/asm-s390/atomic.h | 5 + include/asm-s390x/atomic.h | 6 +- include/asm-sparc/atomic.h | 6 + include/asm-sparc/bitops.h | 10 +- include/asm-sparc64/atomic.h | 6 + include/linux/fs.h | 1 + include/linux/if_arp.h | 2 +- include/linux/netlink.h | 2 +- include/linux/parport.h | 1 + include/linux/skbuff.h | 1 + lib/rwsem.c | 2 +- net/core/dv.c | 22 +- net/core/skbuff.c | 28 +- net/ipv4/ip_output.c | 5 +- net/ipv4/raw.c | 3 +- net/ipv4/tcp_output.c | 2 +- net/netsyms.c | 1 + net/unix/af_unix.c | 2 +- 53 files changed, 2100 insertions(+), 648 deletions(-) create mode 100644 Documentation/fb/pvr2fb.txt create mode 100644 drivers/parport/parport_serial.c delete mode 100644 drivers/video/dcfb.c create mode 100644 drivers/video/pvr2fb.c create mode 100644 include/asm-alpha/rwsem.h diff --git a/Documentation/Configure.help b/Documentation/Configure.help index 932e50efc2f2..ee0eb7073267 100644 --- a/Documentation/Configure.help +++ b/Documentation/Configure.help @@ -3372,6 +3372,30 @@ CONFIG_FB_HGA As this card technology is 15 years old, most people will answer N here. +NEC PowerVR 2 display support +CONFIG_FB_PVR2 + Say Y here if you have a PowerVR 2 card in your box. If you plan to + run linux on your Dreamcast, you will have to say Y here. This driver + may or may not work on other PowerVR 2 cards, but is totally untested. + Use at your own risk. If unsure, say N. + + This driver is also available as a module ( = code which can be + inserted and removed from the running kernel whenever you want). + The module will be called pvr2fb.o. If you want to compile it as + a module, say M here and read Documentation/modules.txt. + + You can pass several parameters to the driver at boot time or at + module load time. The parameters look like "video=pvr2:XXX", where + the meaning of XXX can be found at the end of the main source file + (drivers/video/pvr2fb.c). Please see the file + Documentation/fb/pvr2fb.txt. + +Debug pvr2fb +CONFIG_FB_PVR2_DEBUG + Say Y here if you wish for the pvr2fb driver to print out debugging + messages. Most people will want to say N here. If unsure, you will + also want to say N. + Matrox unified accelerated driver (EXPERIMENTAL) CONFIG_FB_MATROX Say Y here if you have a Matrox Millennium, Matrox Millennium II, @@ -3712,6 +3736,12 @@ CONFIG_PARPORT_PC If unsure, say Y. +Parallel+serial PCI card support +CONFIG_PARPORT_SERIAL + This adds support for multi-IO PCI cards that have parallel and serial + ports. You should say Y or M here. If you say M, the module will be + called parport_serial.o. + Use FIFO/DMA if available CONFIG_PARPORT_PC_FIFO Many parallel port chipsets provide hardware that can speed up @@ -13492,10 +13522,12 @@ CONFIG_LP_CONSOLE doing that; to actually get it to happen you need to pass the option "console=lp0" to the kernel at boot time. - Note that kernel messages can get lost if the printer is out of - paper (or off, or unplugged, or too busy..), but this behaviour - can be changed. See drivers/char/lp.c (do this at your own risk). - + If the printer is out of paper (or off, or unplugged, or too + busy..) the kernel will stall until the printer is ready again. + By defining CONSOLE_LP_STRICT to 0 (at your own risk) you + can make the kernel continue when this happens, + but it'll lose the kernel messages. + If unsure, say N. Support for user-space parallel port device drivers diff --git a/Documentation/fb/00-INDEX b/Documentation/fb/00-INDEX index 54bb5161cbfe..92e89aeef52e 100644 --- a/Documentation/fb/00-INDEX +++ b/Documentation/fb/00-INDEX @@ -17,6 +17,8 @@ clgenfb.txt - info on the Cirrus Logic frame buffer driver matroxfb.txt - info on the Matrox frame buffer driver +pvr2fb.txt + - info on the PowerVR 2 frame buffer driver tgafb.txt - info on the TGA (DECChip 21030) frame buffer driver vesafb.txt diff --git a/Documentation/fb/pvr2fb.txt b/Documentation/fb/pvr2fb.txt new file mode 100644 index 000000000000..6e45c6e8eadb --- /dev/null +++ b/Documentation/fb/pvr2fb.txt @@ -0,0 +1,61 @@ +$Id: pvr2fb.txt,v 1.1 2001/05/24 05:09:16 mrbrown Exp $ + +What is pvr2fb? +=============== + +This is a driver for PowerVR 2 based graphics frame buffers, such as the +one found in the Dreamcast. + +Advantages: + + * It provides a nice large console (128 cols + 48 lines with 1024x768) + without using tiny, unreadable fonts. + * You can run XF86_FBDev on top of /dev/fb0 + * Most important: boot logo :-) + +Disadvantages: + + * Driver is currently limited to the Dreamcast PowerVR 2 implementation + at the time of this writing. + +Configuration +============= + +You can pass kernel command line options to pvr2fb with +`video=pvr2:option1,option2:value2,option3' (multiple options should be +separated by comma, values are separated from options by `:'). +Accepted options: + +font:X - default font to use. All fonts are supported, including the + SUN12x22 font which is very nice at high resolutions. + +mode:X - default video mode. The following video modes are supported: + 640x240-60, 640x480-60. + + Note: the 640x240 mode is currently broken, and should not be + used for any reason. It is only mentioned as a reference. + +inverse - invert colors on screen (for LCD displays) + +nomtrr - disables write combining on frame buffer. This slows down driver + but there is reported minor incompatibility between GUS DMA and + XFree under high loads if write combining is enabled (sound + dropouts). MTRR is enabled by default on systems that have it + configured and that support it. + +cable:X - cable type. This can be any of the following: vga, rgb, and + composite. If none is specified, we guess. + +output:X - output type. This can be any of the following: pal, ntsc, and + vga. If none is specified, we guess. + +X11 +=== + +XF86_FBDev should work, in theory. At the time of this writing it is +totally untested and may or may not even portray the beginnings of +working. If you end up testing this, please let me know! + +-- +Paul Mundt + diff --git a/Makefile b/Makefile index 41dfa84748d4..697c18111236 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 7 -EXTRAVERSION =-pre5 +EXTRAVERSION =-pre6 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) diff --git a/arch/alpha/config.in b/arch/alpha/config.in index 03d8e66bde10..bc3cf419924c 100644 --- a/arch/alpha/config.in +++ b/arch/alpha/config.in @@ -5,8 +5,8 @@ define_bool CONFIG_ALPHA y define_bool CONFIG_UID16 n -define_bool CONFIG_RWSEM_GENERIC_SPINLOCK y -define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n +define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n +define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y mainmenu_name "Kernel configuration of Linux for Alpha machines" diff --git a/arch/alpha/kernel/alpha_ksyms.c b/arch/alpha/kernel/alpha_ksyms.c index a23501e202b7..55a493a27c65 100644 --- a/arch/alpha/kernel/alpha_ksyms.c +++ b/arch/alpha/kernel/alpha_ksyms.c @@ -178,10 +178,6 @@ EXPORT_SYMBOL(down); EXPORT_SYMBOL(down_interruptible); EXPORT_SYMBOL(down_trylock); EXPORT_SYMBOL(up); -EXPORT_SYMBOL(down_read); -EXPORT_SYMBOL(down_write); -EXPORT_SYMBOL(up_read); -EXPORT_SYMBOL(up_write); /* * SMP-specific symbols. diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index a57c0b96f06c..1f6db063f2b7 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -960,16 +960,6 @@ void submit_bh(int rw, struct buffer_head * bh) } } -/* - * Default IO end handler, used by "ll_rw_block()". - */ -static void end_buffer_io_sync(struct buffer_head *bh, int uptodate) -{ - mark_buffer_uptodate(bh, uptodate); - unlock_buffer(bh); - atomic_dec(&bh->b_count); -} - /** * ll_rw_block: low-level access to block devices * @rw: whether to %READ or %WRITE or maybe %READA (readahead) diff --git a/drivers/block/ps2esdi.c b/drivers/block/ps2esdi.c index a0ca8e94dc9d..0fdeccda1526 100644 --- a/drivers/block/ps2esdi.c +++ b/drivers/block/ps2esdi.c @@ -415,8 +415,11 @@ static void __init ps2esdi_geninit(void) ps2esdi_gendisk.nr_real = ps2esdi_drives; - for (i = 0; i < (MAX_HD << 6); i++) + /* 128 was old default, maybe maxsect=255 is ok too? - Paul G. */ + for (i = 0; i < (MAX_HD << 6); i++) { + ps2esdi_maxsect[i] = 128; ps2esdi_blocksizes[i] = 1024; + } request_dma(dma_arb_level, "ed"); request_region(io_base, 4, "ed"); diff --git a/drivers/char/lp.c b/drivers/char/lp.c index 7092d6008631..30f216be3d83 100644 --- a/drivers/char/lp.c +++ b/drivers/char/lp.c @@ -609,8 +609,6 @@ static struct console lpcons = { /* --- initialisation code ------------------------------------- */ -#ifdef MODULE - static int parport_nr[LP_NO] = { [0 ... LP_NO-1] = LP_PARPORT_UNSPEC }; static char *parport[LP_NO] = { NULL, }; static int reset = 0; @@ -618,21 +616,18 @@ static int reset = 0; MODULE_PARM(parport, "1-" __MODULE_STRING(LP_NO) "s"); MODULE_PARM(reset, "i"); -#else - -static int parport_nr[LP_NO] = { [0 ... LP_NO-1] = LP_PARPORT_UNSPEC }; -static int reset = 0; - -static int parport_ptr = 0; - -void __init lp_setup(char *str, int *ints) +static int __init lp_setup (char *str) { - if (!str) { - if (ints[0] == 0 || ints[1] == 0) { + static int parport_ptr; // initially zero + int x; + + if (get_option (&str, &x)) { + if (x == 0) { /* disable driver on "lp=" or "lp=0" */ parport_nr[0] = LP_PARPORT_OFF; } else { - printk(KERN_WARNING "warning: 'lp=0x%x' is deprecated, ignored\n", ints[1]); + printk(KERN_WARNING "warning: 'lp=0x%x' is deprecated, ignored\n", x); + return 0; } } else if (!strncmp(str, "parport", 7)) { int n = simple_strtoul(str+7, NULL, 10); @@ -648,10 +643,9 @@ void __init lp_setup(char *str, int *ints) } else if (!strcmp(str, "reset")) { reset = 1; } + return 1; } -#endif - static int lp_register(int nr, struct parport *port) { char name[8]; @@ -782,8 +776,7 @@ int __init lp_init (void) return 0; } -#ifdef MODULE -int init_module(void) +static int __init lp_init_module (void) { if (parport[0]) { /* The user gave some parameters. Let's see what they were. */ @@ -811,7 +804,7 @@ int init_module(void) return lp_init(); } -void cleanup_module(void) +static void lp_cleanup_module (void) { unsigned int offset; @@ -829,4 +822,7 @@ void cleanup_module(void) parport_unregister_device(lp_table[offset].dev); } } -#endif + +__setup("lp=", lp_setup); +module_init(lp_init_module); +module_exit(lp_cleanup_module); diff --git a/drivers/char/mem.c b/drivers/char/mem.c index b623f2282473..dc8977570f5b 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c @@ -626,9 +626,6 @@ int __init chr_dev_init(void) mda_console_init(); #endif tty_init(); -#ifdef CONFIG_PRINTER - lp_init(); -#endif #ifdef CONFIG_M68K_PRINTER lp_m68k_init(); #endif diff --git a/drivers/net/pppoe.c b/drivers/net/pppoe.c index d0881887030b..7a1d33869258 100644 --- a/drivers/net/pppoe.c +++ b/drivers/net/pppoe.c @@ -567,17 +567,17 @@ int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, if (!dev) goto end; + po->pppoe_dev = dev; + if( ! (dev->flags & IFF_UP) ) - goto end; + goto err_put; memcpy(&po->pppoe_pa, &sp->sa_addr.pppoe, sizeof(struct pppoe_addr)); error = set_item(po); if (error < 0) - goto end; - - po->pppoe_dev = dev; + goto err_put; po->chan.hdrlen = (sizeof(struct pppoe_hdr) + dev->hard_header_len); @@ -586,6 +586,8 @@ int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, po->chan.ops = &pppoe_chan_ops; error = ppp_register_channel(&po->chan); + if (error) + goto err_put; sk->state = PPPOX_CONNECTED; } @@ -595,6 +597,10 @@ int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, end: release_sock(sk); return error; +err_put: + dev_put(po->pppoe_dev); + po->pppoe_dev = NULL; + goto end; } diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 5e52cc461856..fc1d5837c85b 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -85,13 +85,18 @@ - Fixed 2.2.x compatibility issues introduced in 1.3.1 - Fixed ethtool ioctl returning uninitialized memory + LK1.3.3 (Ion Badulescu) + - Initialize the TxMode register properly + - Set the MII registers _after_ resetting it + - Don't dereference dev->priv after unregister_netdev() has freed it + TODO: - implement tx_timeout() properly */ #define DRV_NAME "starfire" -#define DRV_VERSION "1.03+LK1.3.2" -#define DRV_RELDATE "June 04, 2001" +#define DRV_VERSION "1.03+LK1.3.3" +#define DRV_RELDATE "July 05, 2001" /* * Adaptec's license for their Novell drivers (which is where I got the @@ -192,12 +197,6 @@ static int full_duplex[MAX_UNITS] = {0, }; #define skb_first_frag_len(skb) (skb->len) #endif /* not ZEROCOPY */ -#if !defined(__OPTIMIZE__) -#warning You must compile this file with the correct options! -#warning See the last lines of the source file. -#error You must compile this driver with "-O". -#endif - #include #include #include @@ -208,7 +207,6 @@ static int full_duplex[MAX_UNITS] = {0, }; #include #include /* Processor type for cache alignment. */ #include -#include #ifdef HAS_FIRMWARE #include "starfire_firmware.h" @@ -559,7 +557,7 @@ struct netdev_private { unsigned int cur_tx, dirty_tx; unsigned int rx_buf_sz; /* Based on MTU+slack. */ unsigned int tx_full:1, /* The Tx queue is full. */ - /* These values are keep track of the transceiver/media in use. */ + /* These values keep track of the transceiver/media in use. */ autoneg:1, /* Autonegotiation allowed. */ full_duplex:1, /* Full-duplex operation. */ speed100:1; /* Set if speed == 100MBit. */ @@ -572,6 +570,7 @@ struct netdev_private { unsigned char phys[PHY_CNT]; /* MII device addresses. */ }; + static int mdio_read(struct net_device *dev, int phy_id, int location); static void mdio_write(struct net_device *dev, int phy_id, int location, int value); static int netdev_open(struct net_device *dev); @@ -589,7 +588,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); static int netdev_close(struct net_device *dev); static void netdev_media_change(struct net_device *dev); - + static int __devinit starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) @@ -615,9 +614,9 @@ static int __devinit starfire_init_one(struct pci_dev *pdev, if (pci_enable_device (pdev)) return -EIO; - ioaddr = pci_resource_start (pdev, 0); - io_size = pci_resource_len (pdev, 0); - if (!ioaddr || ((pci_resource_flags (pdev, 0) & IORESOURCE_MEM) == 0)) { + ioaddr = pci_resource_start(pdev, 0); + io_size = pci_resource_len(pdev, 0); + if (!ioaddr || ((pci_resource_flags(pdev, 0) & IORESOURCE_MEM) == 0)) { printk (KERN_ERR DRV_NAME " %d: no PCI MEM resources, aborting\n", card_idx); return -ENODEV; } @@ -777,14 +776,13 @@ err_out_cleardev: err_out_free_res: pci_release_regions (pdev); err_out_free_netdev: - unregister_netdev (dev); - kfree (dev); + unregister_netdev(dev); + kfree(dev); return -ENODEV; } - -/* Read the MII Management Data I/O (MDIO) interfaces. */ +/* Read the MII Management Data I/O (MDIO) interfaces. */ static int mdio_read(struct net_device *dev, int phy_id, int location) { long mdio_addr = dev->base_addr + MIICtrl + (phy_id<<7) + (location<<2); @@ -800,6 +798,7 @@ static int mdio_read(struct net_device *dev, int phy_id, int location) return result & 0xffff; } + static void mdio_write(struct net_device *dev, int phy_id, int location, int value) { long mdio_addr = dev->base_addr + MIICtrl + (phy_id<<7) + (location<<2); @@ -808,7 +807,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val return; } - + static int netdev_open(struct net_device *dev) { struct netdev_private *np = dev->priv; @@ -931,6 +930,8 @@ static int netdev_open(struct net_device *dev) /* Initialize other registers. */ /* Configure the PCI bus bursts and FIFO thresholds. */ np->tx_mode = 0x0C04; /* modified when link is up. */ + writel(0x8000 | np->tx_mode, ioaddr + TxMode); + writel(np->tx_mode, ioaddr + TxMode); np->tx_threshold = 4; writel(np->tx_threshold, ioaddr + TxThreshold); @@ -986,12 +987,12 @@ static void check_duplex(struct net_device *dev) struct netdev_private *np = dev->priv; u16 reg0; - mdio_write(dev, np->phys[0], MII_ADVERTISE, np->advertising); mdio_write(dev, np->phys[0], MII_BMCR, BMCR_RESET); udelay(500); while (mdio_read(dev, np->phys[0], MII_BMCR) & BMCR_RESET); reg0 = mdio_read(dev, np->phys[0], MII_BMCR); + mdio_write(dev, np->phys[0], MII_ADVERTISE, np->advertising); if (np->autoneg) { reg0 |= BMCR_ANENABLE | BMCR_ANRESTART; @@ -1098,6 +1099,7 @@ static void init_ring(struct net_device *dev) return; } + static int start_tx(struct sk_buff *skb, struct net_device *dev) { struct netdev_private *np = dev->priv; @@ -1214,6 +1216,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) return 0; } + /* The interrupt handler does all of the Rx thread work and cleans up after the Tx thread. */ static void intr_handler(int irq, void *dev_instance, struct pt_regs *rgs) @@ -1350,6 +1353,7 @@ static void intr_handler(int irq, void *dev_instance, struct pt_regs *rgs) #endif } + /* This routine is logically part of the interrupt handler, but separated for clarity and better register allocation. */ static int netdev_rx(struct net_device *dev) @@ -1407,11 +1411,9 @@ static int netdev_rx(struct net_device *dev) memcpy(skb_put(skb, pkt_len), np->rx_info[entry].skb->tail, pkt_len); #endif } else { - char *temp; - pci_unmap_single(np->pci_dev, np->rx_info[entry].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE); skb = np->rx_info[entry].skb; - temp = skb_put(skb, pkt_len); + skb_put(skb, pkt_len); np->rx_info[entry].skb = NULL; np->rx_info[entry].mapping = 0; } @@ -1570,6 +1572,7 @@ static void netdev_error(struct net_device *dev, int intr_status) np->stats.tx_fifo_errors++; } + static struct net_device_stats *get_stats(struct net_device *dev) { long ioaddr = dev->base_addr; @@ -1596,6 +1599,7 @@ static struct net_device_stats *get_stats(struct net_device *dev) return &np->stats; } + /* The little-endian AUTODIN II ethernet CRC calculations. A big-endian version is also available. This is slow but compact code. Do not use this routine for bulk data, @@ -1622,6 +1626,7 @@ static inline unsigned ether_crc_le(int length, unsigned char *data) return crc; } + static void set_rx_mode(struct net_device *dev) { long ioaddr = dev->base_addr; @@ -1658,7 +1663,7 @@ static void set_rx_mode(struct net_device *dev) memset(mc_filter, 0, sizeof(mc_filter)); for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; - i++, mclist = mclist->next) { + i++, mclist = mclist->next) { int bit_nr = ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 23; __u32 *fptr = (__u32 *) &mc_filter[(bit_nr >> 4) & ~1]; @@ -1679,7 +1684,6 @@ static void set_rx_mode(struct net_device *dev) } - static int netdev_ethtool_ioctl(struct net_device *dev, void *useraddr) { struct ethtool_cmd ecmd; @@ -1779,7 +1783,6 @@ static int netdev_ethtool_ioctl(struct net_device *dev, void *useraddr) } - static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct netdev_private *np = dev->priv; @@ -1808,10 +1811,11 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) u16 value = data->val_in; switch (data->reg_num) { case 0: - if (value & 0x9000) /* Autonegotiation. */ + if (value & (BMCR_RESET | BMCR_ANENABLE)) + /* Autonegotiation. */ np->autoneg = 1; else { - np->full_duplex = (value & 0x0100) ? 1 : 0; + np->full_duplex = (value & BMCR_FULLDPLX) ? 1 : 0; np->autoneg = 0; } break; @@ -1921,27 +1925,26 @@ static void __devexit starfire_remove_one (struct pci_dev *pdev) BUG(); np = dev->priv; - - unregister_netdev(dev); - iounmap((char *)dev->base_addr); - pci_release_regions(pdev); - if (np->tx_done_q) - pci_free_consistent(np->pci_dev, PAGE_SIZE, + pci_free_consistent(pdev, PAGE_SIZE, np->tx_done_q, np->tx_done_q_dma); if (np->rx_done_q) - pci_free_consistent(np->pci_dev, PAGE_SIZE, + pci_free_consistent(pdev, + sizeof(struct rx_done_desc) * DONE_Q_SIZE, np->rx_done_q, np->rx_done_q_dma); if (np->tx_ring) - pci_free_consistent(np->pci_dev, PAGE_SIZE, + pci_free_consistent(pdev, PAGE_SIZE, np->tx_ring, np->tx_ring_dma); if (np->rx_ring) - pci_free_consistent(np->pci_dev, PAGE_SIZE, + pci_free_consistent(pdev, PAGE_SIZE, np->rx_ring, np->rx_ring_dma); - kfree(dev); + unregister_netdev(dev); /* Will also free np!! */ + iounmap((char *)dev->base_addr); + pci_release_regions(pdev); pci_set_drvdata(pdev, NULL); + kfree(dev); } diff --git a/drivers/net/stnic.c b/drivers/net/stnic.c index e119ab75733d..d55ed1678899 100644 --- a/drivers/net/stnic.c +++ b/drivers/net/stnic.c @@ -146,6 +146,11 @@ int __init stnic_probe(void) ei_status.name = dev->name; ei_status.word16 = 1; +#ifdef __LITTLE_ENDIAN__ + ei_status.bigendian = 0; +#else + ei_status.bigendian = 1; +#endif ei_status.tx_start_page = START_PG; ei_status.rx_start_page = START_PG + TX_PAGES; ei_status.stop_page = STOP_PG; @@ -154,6 +159,7 @@ int __init stnic_probe(void) ei_status.get_8390_hdr = &stnic_get_hdr; ei_status.block_input = &stnic_block_input; ei_status.block_output = &stnic_block_output; + stnic_init (dev); printk (KERN_INFO "NS ST-NIC 83902A\n"); diff --git a/drivers/parport/ChangeLog b/drivers/parport/ChangeLog index 9e7ce482b5c5..03a1ccc9cbac 100644 --- a/drivers/parport/ChangeLog +++ b/drivers/parport/ChangeLog @@ -1,3 +1,11 @@ +2001-06-20 Tim Waugh + + * parport_pc.c: Make 'io_hi=0' work. + +2001-05-31 Tim Waugh + + * parport_serial.c: New file. + 2001-06-05 Tim Waugh * parport_pc.c (parport_pc_unregister_port): New exported function. diff --git a/drivers/parport/Config.in b/drivers/parport/Config.in index ede473e269dc..75012613407c 100644 --- a/drivers/parport/Config.in +++ b/drivers/parport/Config.in @@ -11,6 +11,14 @@ comment 'Parallel port support' tristate 'Parallel port support' CONFIG_PARPORT if [ "$CONFIG_PARPORT" != "n" ]; then dep_tristate ' PC-style hardware' CONFIG_PARPORT_PC $CONFIG_PARPORT + if [ "$CONFIG_PARPORT_PC" != "n" -a "$CONFIG_SERIAL" != "n" ]; then + if [ "$CONFIG_SERIAL" = "m" ]; then + define_tristate CONFIG_PARPORT_PC_CML1 m + else + define_tristate CONFIG_PARPORT_PC_CML1 $CONFIG_PARPORT_PC + fi + dep_tristate ' Multi-IO cards (parallel and serial)' CONFIG_PARPORT_SERIAL $CONFIG_PARPORT_PC_CML1 + fi if [ "$CONFIG_PARPORT_PC" != "n" ]; then if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then bool ' Use FIFO/DMA if available (EXPERIMENTAL)' CONFIG_PARPORT_PC_FIFO diff --git a/drivers/parport/Makefile b/drivers/parport/Makefile index db514ff8c164..cd886a1b1c84 100644 --- a/drivers/parport/Makefile +++ b/drivers/parport/Makefile @@ -22,6 +22,7 @@ endif obj-$(CONFIG_PARPORT) += parport.o obj-$(CONFIG_PARPORT_PC) += parport_pc.o +obj-$(CONFIG_PARPORT_SERIAL) += parport_serial.o obj-$(CONFIG_PARPORT_AMIGA) += parport_amiga.o obj-$(CONFIG_PARPORT_MFC3) += parport_mfc3.o obj-$(CONFIG_PARPORT_ATARI) += parport_atari.o diff --git a/drivers/parport/init.c b/drivers/parport/init.c index bbada430e0ef..e28ce6b5f616 100644 --- a/drivers/parport/init.c +++ b/drivers/parport/init.c @@ -21,7 +21,8 @@ #ifndef MODULE static int io[PARPORT_MAX+1] __initdata = { [0 ... PARPORT_MAX] = 0 }; #ifdef CONFIG_PARPORT_PC -static int io_hi[PARPORT_MAX+1] __initdata = { [0 ... PARPORT_MAX] = 0 }; +static int io_hi[PARPORT_MAX+1] __initdata = + { [0 ... PARPORT_MAX] = PARPORT_IOHI_AUTO }; #endif static int irq[PARPORT_MAX] __initdata = { [0 ... PARPORT_MAX-1] = PARPORT_IRQ_PROBEONLY }; static int dma[PARPORT_MAX] __initdata = { [0 ... PARPORT_MAX-1] = PARPORT_DMA_NONE }; diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c index baf111c6d128..eaa824166879 100644 --- a/drivers/parport/parport_pc.c +++ b/drivers/parport/parport_pc.c @@ -2824,7 +2824,8 @@ int __init parport_pc_init (int *io, int *io_hi, int *irq, int *dma) /* Only probe the ports we were given. */ user_specified = 1; do { - if (!*io_hi) *io_hi = 0x400 + *io; + if ((*io_hi) == PARPORT_IOHI_AUTO) + *io_hi = 0x400 + *io; if (parport_pc_probe_port(*(io++), *(io_hi++), *(irq++), *(dma++), NULL)) count++; @@ -2842,7 +2843,8 @@ EXPORT_SYMBOL (parport_pc_unregister_port); #ifdef MODULE static int io[PARPORT_PC_MAX_PORTS+1] = { [0 ... PARPORT_PC_MAX_PORTS] = 0 }; -static int io_hi[PARPORT_PC_MAX_PORTS+1] = { [0 ... PARPORT_PC_MAX_PORTS] = 0 }; +static int io_hi[PARPORT_PC_MAX_PORTS+1] = + { [0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO }; static int dmaval[PARPORT_PC_MAX_PORTS] = { [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_AUTO }; static int irqval[PARPORT_PC_MAX_PORTS] = { [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY }; static const char *irq[PARPORT_PC_MAX_PORTS] = { NULL, }; diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c new file mode 100644 index 000000000000..7509a993f8e7 --- /dev/null +++ b/drivers/parport/parport_serial.c @@ -0,0 +1,353 @@ +/* + * Support for common PCI multi-I/O cards (which is most of them) + * + * Copyright (C) 2001 Tim Waugh + * + * 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. + * + * + * Multi-function PCI cards are supposed to present separate logical + * devices on the bus. A common thing to do seems to be to just use + * one logical device with lots of base address registers for both + * parallel ports and serial ports. This driver is for dealing with + * that. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +enum parport_pc_pci_cards { + titan_110l = 0, + titan_210l, + netmos_9735, + netmos_9835, + avlab_1s1p, + avlab_1s1p_650, + avlab_1s1p_850, + avlab_1s2p, + avlab_1s2p_650, + avlab_1s2p_850, + avlab_2s1p, + avlab_2s1p_650, + avlab_2s1p_850, +}; + + +/* each element directly indexed from enum list, above */ +static struct parport_pc_pci { + int numports; + struct { /* BAR (base address registers) numbers in the config + space header */ + int lo; + int hi; /* -1 if not there, >6 for offset-method (max + BAR is 6) */ + } addr[4]; +} cards[] __devinitdata = { + /* titan_110l */ { 1, { { 3, -1 }, } }, + /* titan_210l */ { 1, { { 3, -1 }, } }, + /* netmos_9735 (not tested) */ { 1, { { 2, 3 }, } }, + /* netmos_9835 (not tested) */ { 1, { { 2, 3 }, } }, + /* avlab_1s1p */ { 1, { { 1, 2}, } }, + /* avlab_1s1p_650 */ { 1, { { 1, 2}, } }, + /* avlab_1s1p_850 */ { 1, { { 1, 2}, } }, + /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} }, + /* avlab_1s2p_650 */ { 2, { { 1, 2}, { 3, 4 },} }, + /* avlab_1s2p_850 */ { 2, { { 1, 2}, { 3, 4 },} }, + /* avlab_2s1p */ { 1, { { 2, 3}, } }, + /* avlab_2s1p_650 */ { 1, { { 2, 3}, } }, + /* avlab_2s1p_850 */ { 1, { { 2, 3}, } }, +}; + +static struct pci_device_id parport_serial_pci_tbl[] __devinitdata = { + /* PCI cards */ + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_110L, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_110l }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_210L, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_210l }, + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9735, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9735 }, + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9835 }, + /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ + { 0x14db, 0x2110, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p}, + { 0x14db, 0x2111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p_650}, + { 0x14db, 0x2112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p_850}, + { 0x14db, 0x2140, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s2p}, + { 0x14db, 0x2141, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s2p_650}, + { 0x14db, 0x2142, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s2p_850}, + { 0x14db, 0x2160, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2s1p}, + { 0x14db, 0x2161, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2s1p_650}, + { 0x14db, 0x2162, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2s1p_850}, + { 0, } /* terminate list */ +}; +MODULE_DEVICE_TABLE(pci,parport_serial_pci_tbl); + +struct pci_board_no_ids { + int flags; + int num_ports; + int base_baud; + int uart_offset; + int reg_shift; + int (*init_fn)(struct pci_dev *dev, struct pci_board_no_ids *board, + int enable); + int first_uart_offset; +}; + +static struct pci_board_no_ids pci_boards[] __devinitdata = { + /* + * PCI Flags, Number of Ports, Base (Maximum) Baud Rate, + * Offset to get to next UART's registers, + * Register shift to use for memory-mapped I/O, + * Initialization function, first UART offset + */ + +// Cards not tested are marked n/t +// If you have one of these cards and it works for you, please tell me.. + +/* titan_110l */ { SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 1, 921600 }, +/* titan_210l */ { SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 2, 921600 }, +/* netmos_9735 (n/t)*/ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 115200 }, +/* netmos_9835 (n/t)*/ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 115200 }, +/* avlab_1s1p (n/t) */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, +/* avlab_1s1p_650 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, +/* avlab_1s1p_850 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, +/* avlab_1s2p (n/t) */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, +/* avlab_1s2p_650 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, +/* avlab_1s2p_850 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, +/* avlab_2s1p (n/t) */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 115200 }, +/* avlab_2s1p_650 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 115200 }, +/* avlab_2s1p_850 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 115200 }, +}; + +struct parport_serial_private { + int num_ser; + int line[20]; + struct pci_board_no_ids ser; + int num_par; + struct parport *port[PARPORT_MAX]; +}; + +static int __devinit get_pci_port (struct pci_dev *dev, + struct pci_board_no_ids *board, + struct serial_struct *req, + int idx) +{ + unsigned long port; + int base_idx; + int max_port; + int offset; + + base_idx = SPCI_FL_GET_BASE(board->flags); + if (board->flags & SPCI_FL_BASE_TABLE) + base_idx += idx; + + if (board->flags & SPCI_FL_REGION_SZ_CAP) { + max_port = pci_resource_len(dev, base_idx) / 8; + if (idx >= max_port) + return 1; + } + + offset = board->first_uart_offset; + + /* Timedia/SUNIX uses a mixture of BARs and offsets */ + /* Ugh, this is ugly as all hell --- TYT */ + if(dev->vendor == PCI_VENDOR_ID_TIMEDIA ) /* 0x1409 */ + switch(idx) { + case 0: base_idx=0; + break; + case 1: base_idx=0; offset=8; + break; + case 2: base_idx=1; + break; + case 3: base_idx=1; offset=8; + break; + case 4: /* BAR 2*/ + case 5: /* BAR 3 */ + case 6: /* BAR 4*/ + case 7: base_idx=idx-2; /* BAR 5*/ + } + + port = pci_resource_start(dev, base_idx) + offset; + + if ((board->flags & SPCI_FL_BASE_TABLE) == 0) + port += idx * (board->uart_offset ? board->uart_offset : 8); + + if (pci_resource_flags (dev, base_idx) & IORESOURCE_IO) { + int high_bits_offset = ((sizeof(long)-sizeof(int))*8); + req->port = port; + if (high_bits_offset) + req->port_high = port >> high_bits_offset; + else + req->port_high = 0; + return 0; + } + req->io_type = SERIAL_IO_MEM; + req->iomem_base = ioremap(port, board->uart_offset); + req->iomem_reg_shift = board->reg_shift; + req->port = 0; + return req->iomem_base ? 0 : 1; +} + +/* Register the serial port(s) of a PCI card. */ +static int __devinit serial_register (struct pci_dev *dev, + const struct pci_device_id *id) +{ + struct pci_board_no_ids *board = &pci_boards[id->driver_data]; + struct parport_serial_private *priv = pci_get_drvdata (dev); + struct serial_struct serial_req; + int base_baud; + int k; + int success = 0; + + priv->ser = *board; + if (board->init_fn && ((board->init_fn) (dev, board, 1) != 0)) + return 1; + + base_baud = board->base_baud; + if (!base_baud) + base_baud = BASE_BAUD; + memset (&serial_req, 0, sizeof (serial_req)); + + for (k = 0; k < board->num_ports; k++) { + int line; + serial_req.irq = dev->irq; + if (get_pci_port (dev, board, &serial_req, k)) + break; + serial_req.flags = ASYNC_SKIP_TEST | ASYNC_AUTOPROBE; + line = register_serial (&serial_req); + if (line < 0) { + printk (KERN_DEBUG + "parport_serial: register_serial failed\n"); + continue; + } + priv->line[priv->num_ser++] = line; + success = 1; + } + + return success ? 0 : 1; +} + +/* Register the parallel port(s) of a PCI card. */ +static int __devinit parport_register (struct pci_dev *dev, + const struct pci_device_id *id) +{ + struct parport_serial_private *priv = pci_get_drvdata (dev); + int i = id->driver_data, n; + int success = 0; + + for (n = 0; n < cards[i].numports; n++) { + struct parport *port; + int lo = cards[i].addr[n].lo; + int hi = cards[i].addr[n].hi; + unsigned long io_lo, io_hi; + io_lo = pci_resource_start (dev, lo); + io_hi = 0; + if ((hi >= 0) && (hi <= 6)) + io_hi = pci_resource_start (dev, hi); + else if (hi > 6) + io_lo += hi; /* Reinterpret the meaning of + "hi" as an offset (see SYBA + def.) */ + /* TODO: test if sharing interrupts works */ + printk (KERN_DEBUG "PCI parallel port detected: %04x:%04x, " + "I/O at %#lx(%#lx)\n", + parport_serial_pci_tbl[i].vendor, + parport_serial_pci_tbl[i].device, io_lo, io_hi); + port = parport_pc_probe_port (io_lo, io_hi, PARPORT_IRQ_NONE, + PARPORT_DMA_NONE, dev); + if (port) { + priv->port[priv->num_par++] = port; + success = 1; + } + } + + return success ? 0 : 1; +} + +static int __devinit parport_serial_pci_probe (struct pci_dev *dev, + const struct pci_device_id *id) +{ + struct parport_serial_private *priv; + int err; + + priv = kmalloc (sizeof *priv, GFP_KERNEL); + if (!priv) + return -ENOMEM; + priv->num_ser = priv->num_par = 0; + pci_set_drvdata (dev, priv); + + err = pci_enable_device (dev); + if (err) { + pci_set_drvdata (dev, NULL); + kfree (priv); + return err; + } + + if (serial_register (dev, id) + parport_register (dev, id)) { + pci_set_drvdata (dev, NULL); + kfree (priv); + return -ENODEV; + } + + return 0; +} + +static void __devexit parport_serial_pci_remove (struct pci_dev *dev) +{ + struct parport_serial_private *priv = pci_get_drvdata (dev); + int i; + + // Serial ports + for (i = 0; i < priv->num_ser; i++) { + unregister_serial (priv->line[i]); + + if (priv->ser.init_fn) + (priv->ser.init_fn) (dev, &priv->ser, 0); + } + pci_set_drvdata (dev, NULL); + + // Parallel ports + for (i = 0; i < priv->num_par; i++) + parport_pc_unregister_port (priv->port[i]); + + kfree (priv); + return; +} + +static struct pci_driver parport_serial_pci_driver = { + name: "parport_serial", + id_table: parport_serial_pci_tbl, + probe: parport_serial_pci_probe, + remove: parport_serial_pci_remove, +}; + + +static int __init parport_serial_init (void) +{ + return pci_module_init (&parport_serial_pci_driver); +} + +static void __exit parport_serial_exit (void) +{ + pci_unregister_driver (&parport_serial_pci_driver); + return; +} + +MODULE_AUTHOR("Tim Waugh "); +MODULE_DESCRIPTION("Driver for common parallel+serial multi-I/O PCI cards"); + +module_init(parport_serial_init); +module_exit(parport_serial_exit); diff --git a/drivers/pcmcia/hd64465_ss.c b/drivers/pcmcia/hd64465_ss.c index 9148534a87f3..ab876da8d6ca 100644 --- a/drivers/pcmcia/hd64465_ss.c +++ b/drivers/pcmcia/hd64465_ss.c @@ -681,7 +681,7 @@ static int hs_set_io_map(unsigned int sock, struct pccard_io_map *io) hd64465_port_map( io->start, io->stop - io->start + 1, - vaddrbase + io->start); + vaddrbase + io->start,0); } else { hd64465_port_unmap( sio->start, diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c index a6ec97b5c543..d753ff811300 100644 --- a/drivers/scsi/aic7xxx_old.c +++ b/drivers/scsi/aic7xxx_old.c @@ -5336,8 +5336,8 @@ aic7xxx_handle_seqint(struct aic7xxx_host *p, unsigned char intstat) if(!(scb->flags & SCB_ACTIVE) || (scb->cmd == NULL)) { printk(WARN_LEAD "invalid scb during SEQ_SG_FIXUP flags:0x%x " - "scb->cmd:0x%x\n", p->host_no, CTL_OF_SCB(scb), - scb->flags, (unsigned int)scb->cmd); + "scb->cmd:0x%p\n", p->host_no, CTL_OF_SCB(scb), + scb->flags, scb->cmd); printk(INFO_LEAD "SCSISIGI 0x%x, SEQADDR 0x%x, SSTAT0 0x%x, SSTAT1 " "0x%x\n", p->host_no, CTL_OF_SCB(scb), aic_inb(p, SCSISIGI), diff --git a/drivers/video/Config.in b/drivers/video/Config.in index e9d5cbf53295..a3742547fdf9 100644 --- a/drivers/video/Config.in +++ b/drivers/video/Config.in @@ -98,14 +98,13 @@ if [ "$CONFIG_FB" = "y" ]; then bool ' CGsix (GX,TurboGX) support' CONFIG_FB_CGSIX fi fi + tristate ' NEC PowerVR 2 display support' CONFIG_FB_PVR2 + dep_bool ' Debug pvr2fb' CONFIG_FB_PVR2_DEBUG $CONFIG_FB_PVR2 bool ' Epson 1355 framebuffer support' CONFIG_FB_E1355 if [ "$CONFIG_FB_E1355" = "y" ]; then hex ' Register Base Address' CONFIG_E1355_REG_BASE a8000000 hex ' Framebuffer Base Address' CONFIG_E1355_FB_BASE a8200000 fi - if [ "$CONFIG_SH_DREAMCAST" = "y" ]; then - tristate ' Dreamcast Frame Buffer support' CONFIG_FB_DC - fi if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then if [ "$CONFIG_PCI" != "n" ]; then tristate ' Matrox acceleration (EXPERIMENTAL)' CONFIG_FB_MATROX @@ -262,7 +261,8 @@ if [ "$CONFIG_FB" = "y" ]; then "$CONFIG_FB_PM2" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \ "$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \ "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_3DFX" = "y" -o \ - "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_SA1100" = "y" ]; then + "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_SA1100" = "y" -o \ + "$CONFIG_FB_PVR2" = "y" ]; then define_tristate CONFIG_FBCON_CFB16 y else if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \ @@ -276,7 +276,7 @@ if [ "$CONFIG_FB" = "y" ]; then "$CONFIG_FB_PM2" = "m" -o "$CONFIG_FB_SGIVW" = "m" -o \ "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \ "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_SIS" = "m" -o \ - "$CONFIG_FB_SA1100" = "m" ]; then + "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_PVR2" = "m" ]; then define_tristate CONFIG_FBCON_CFB16 m fi fi @@ -284,14 +284,14 @@ if [ "$CONFIG_FB" = "y" ]; then "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" -o \ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \ "$CONFIG_FB_ATY128" = "y" -o \ - "$CONFIG_FB_CYBER2000" = "y" ]; then + "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_PVR2" = "y" ]; then define_tristate CONFIG_FBCON_CFB24 y else if [ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" -o \ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \ "$CONFIG_FB_ATY128" = "m" -o \ - "$CONFIG_FB_CYBER2000" = "m" ]; then + "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_PVR2" = "m" ]; then define_tristate CONFIG_FBCON_CFB24 m fi fi @@ -302,7 +302,8 @@ if [ "$CONFIG_FB" = "y" ]; then "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \ "$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \ "$CONFIG_FB_FM2" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \ - "$CONFIG_FB_3DFX" = "y" -o "$CONFIG_FB_SIS" = "y" ]; then + "$CONFIG_FB_3DFX" = "y" -o "$CONFIG_FB_SIS" = "y" -o \ + "$CONFIG_FB_PVR2" = "y" ]; then define_tristate CONFIG_FBCON_CFB32 y else if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \ @@ -312,7 +313,8 @@ if [ "$CONFIG_FB" = "y" ]; then "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \ "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \ "$CONFIG_FB_3DFX" = "m" -o \ - "$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_SIS" = "m" ]; then + "$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_SIS" = "m" -o \ + "$CONFIG_FB_PVR2" = "m" ]; then define_tristate CONFIG_FBCON_CFB32 m fi fi diff --git a/drivers/video/Makefile b/drivers/video/Makefile index 3cae285cbae1..52f2684f2f9f 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -101,7 +101,7 @@ obj-$(CONFIG_FB_SA1100) += sa1100fb.o obj-$(CONFIG_FB_VIRTUAL) += vfb.o obj-$(CONFIG_FB_HIT) += hitfb.o fbgen.o obj-$(CONFIG_FB_E1355) += epson1355fb.o fbgen.o -obj-$(CONFIG_FB_DC) += dcfb.o fbgen.o +obj-$(CONFIG_FB_PVR2) += pvr2fb.o # Generic Low Level Drivers diff --git a/drivers/video/dcfb.c b/drivers/video/dcfb.c deleted file mode 100644 index 6b72ee1cfe87..000000000000 --- a/drivers/video/dcfb.c +++ /dev/null @@ -1,504 +0,0 @@ -/* - * $Id: dcfb.c,v 1.1 2001/04/01 15:02:51 yaegashi Exp $ - * SEGA Dreamcast framebuffer - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include