This list is closed, nobody may subscribe to it.
2004 |
Jan
(53) |
Feb
(78) |
Mar
(34) |
Apr
(26) |
May
(25) |
Jun
(34) |
Jul
(16) |
Aug
(16) |
Sep
(2) |
Oct
(58) |
Nov
(13) |
Dec
(32) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(62) |
Feb
(4) |
Mar
(40) |
Apr
(9) |
May
(13) |
Jun
(26) |
Jul
(32) |
Aug
(24) |
Sep
(18) |
Oct
(18) |
Nov
(14) |
Dec
|
2006 |
Jan
(15) |
Feb
(2) |
Mar
(23) |
Apr
(2) |
May
(2) |
Jun
(13) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2007 |
Jan
(1) |
Feb
(45) |
Mar
|
Apr
(13) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(31) |
Dec
(5) |
2008 |
Jan
(6) |
Feb
(34) |
Mar
(113) |
Apr
(40) |
May
(19) |
Jun
(5) |
Jul
(41) |
Aug
(13) |
Sep
(53) |
Oct
(4) |
Nov
(53) |
Dec
|
2009 |
Jan
(1) |
Feb
(29) |
Mar
(66) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(163) |
Nov
|
Dec
(91) |
From: Albert H. <he...@us...> - 2005-11-20 20:23:11
|
Update of /cvsroot/gc-linux/linux/drivers/block/gcn-di In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28670 Modified Files: gcn-di.c Log Message: Added missing header for plaform related definitions (aa must for 2.6.15). Fixed a race introduced by latest reordering of code. Accept by default discs built using cubeboot-tools. Index: gcn-di.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/gcn-di.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- gcn-di.c 14 Nov 2005 19:38:41 -0000 1.11 +++ gcn-di.c 20 Nov 2005 20:23:04 -0000 1.12 @@ -23,6 +23,7 @@ #include <linux/delay.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> +#include <linux/platform_device.h> #include <linux/blkdev.h> #include <linux/fcntl.h> #include <linux/hdreg.h> @@ -1479,7 +1480,8 @@ di_op_readdiskid(&cmd, ddev, &disk_id); di_run_command_and_wait(&cmd); if (di_command_ok(&cmd)) { - if (disk_id.id[0] && !di_accept_gods) { + if (disk_id.id[0] && strcmp(disk_id.id, "GBLPGL") && + !di_accept_gods) { di_print_disk_id(&disk_id); di_printk(KERN_ERR, "sorry, gamecube media" " support is disabled\n"); @@ -1651,6 +1653,21 @@ goto out; } + /* + * If we have a pending command, that's a previously scheduled + * motor off. Wait for it to terminate before going on. + */ + spin_lock_irqsave(&ddev->lock, flags); + if (ddev->cmd && ddev->ref_count == 0) { + cmd = ddev->cmd; + cmd->done_data = &complete; + cmd->done = di_wait_done; + spin_unlock_irqrestore(&ddev->lock, flags); + wait_for_completion(&complete); + } else { + spin_unlock_irqrestore(&ddev->lock, flags); + } + /* this will take care of validating the media */ check_disk_change(inode->i_bdev); if (!ddev->nr_sectors) { @@ -1667,19 +1684,6 @@ goto out_unlock; } - /* - * If we have a pending command, that's a previously scheduled - * motor off. Wait for it to terminate before going on. - */ - if (ddev->cmd && ddev->ref_count == 0) { - cmd = ddev->cmd; - cmd->done_data = &complete; - cmd->done = di_wait_done; - spin_unlock_irqrestore(&ddev->queue_lock, flags); - wait_for_completion(&complete); - spin_lock_irqsave(&ddev->queue_lock, flags); - } - if ((filp->f_flags & O_EXCL)) ddev->ref_count = -1; else |
From: Albert H. <he...@us...> - 2005-11-14 19:38:55
|
Update of /cvsroot/gc-linux/linux/drivers/block/gcn-di In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8809/drivers/block/gcn-di Modified Files: gcn-di.c Log Message: Fix scheduling while atomic case. Index: gcn-di.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/gcn-di.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gcn-di.c 10 Jul 2005 15:14:36 -0000 1.10 +++ gcn-di.c 14 Nov 2005 19:38:41 -0000 1.11 @@ -1651,6 +1651,13 @@ goto out; } + /* this will take care of validating the media */ + check_disk_change(inode->i_bdev); + if (!ddev->nr_sectors) { + retval = -ENOMEDIUM; + goto out; + } + spin_lock_irqsave(&ddev->queue_lock, flags); /* honor exclusive open mode */ @@ -1673,13 +1680,6 @@ spin_lock_irqsave(&ddev->queue_lock, flags); } - /* this will take care of validating the media */ - check_disk_change(inode->i_bdev); - if (!ddev->nr_sectors) { - retval = -ENOMEDIUM; - goto out_unlock; - } - if ((filp->f_flags & O_EXCL)) ddev->ref_count = -1; else |
From: Albert H. <he...@us...> - 2005-11-10 23:29:53
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21887/arch/ppc/platforms Modified Files: gcn-con.c Log Message: Compile fix. Index: gcn-con.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gcn-con.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gcn-con.c 6 Jan 2005 19:59:56 -0000 1.3 +++ gcn-con.c 10 Nov 2005 23:29:42 -0000 1.4 @@ -20,9 +20,6 @@ #include "gamecube.h" -extern struct font_desc font_vga_8x16; - - #define FONT_XSIZE 8 #define FONT_YSIZE 16 #define FONT_XFACTOR 1 @@ -37,7 +34,7 @@ unsigned char *framebuffer; int xres, yres, stride; - unsigned char *font; + const unsigned char *font; int cursor_x, cursor_y; int foreground, background; |
From: Albert H. <he...@us...> - 2005-11-07 21:40:29
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17691/arch/ppc/platforms Modified Files: gcn-rtc.c Log Message: rtc driver rewrite using the most recent exi framework. We use here the "try" version of the channel allocation functions as we can be called wildly from irq context. Index: gcn-rtc.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gcn-rtc.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gcn-rtc.c 25 Apr 2005 19:34:48 -0000 1.4 +++ gcn-rtc.c 7 Nov 2005 21:40:20 -0000 1.5 @@ -23,7 +23,7 @@ #define DRV_DESCRIPTION "Nintendo GameCube RTC/SRAM driver" #define DRV_AUTHOR "Albert Herranz" -static char rtc_driver_version[] = "1.0"; +static char rtc_driver_version[] = "1.4"; #define rtc_printk(level, format, arg...) \ printk(level DRV_MODULE_NAME ": " format , ## arg) @@ -70,8 +70,10 @@ struct gcn_sram *sram = &priv->sram; u32 req; - /* select the SRAM device */ - if (exi_dev_select(dev) == 0) { + if (exi_dev_try_take(dev) == 0) { + /* select the SRAM device */ + exi_dev_select(dev); + /* send the appropriate command */ req = 0x20000100; exi_dev_write(dev, &req, sizeof(req)); @@ -81,6 +83,8 @@ /* deselect the SRAM device */ exi_dev_deselect(dev); + + exi_dev_give(dev); } return; @@ -94,8 +98,10 @@ { unsigned long a = 0; - /* select the RTC device */ - if (exi_dev_select(dev) == 0) { + if (exi_dev_try_take(dev) == 0) { + /* select the SRAM device */ + exi_dev_select(dev); + /* send the appropriate command */ a = 0x20000000; exi_dev_write(dev, &a, sizeof(a)); @@ -105,6 +111,8 @@ /* deselect the RTC device */ exi_dev_deselect(dev); + + exi_dev_give(dev); } return a; @@ -126,9 +134,11 @@ * interrupt code is prepared to deal with such case. */ - /* select the RTC device */ - retval = exi_dev_select(dev); + retval = exi_dev_try_take(dev); if (!retval) { + /* select the RTC device */ + exi_dev_select(dev); + /* send the appropriate command */ req = 0xa0000000; exi_dev_write(dev, &req, sizeof(req)); @@ -138,6 +148,8 @@ /* deselect the RTC device */ exi_dev_deselect(dev); + + exi_dev_give(dev); } return retval; } |
From: Albert H. <he...@us...> - 2005-11-07 21:38:16
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17371/drivers/block Modified Files: gcn-sd.c Log Message: mmc/sd driver rewrite using the most recent exi framework. Our hardware is really limited... we try to do what we can. Index: gcn-sd.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-sd.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gcn-sd.c 25 Sep 2005 20:08:57 -0000 1.5 +++ gcn-sd.c 7 Nov 2005 21:38:04 -0000 1.6 @@ -81,7 +81,7 @@ MODULE_DESCRIPTION(DRV_DESCRIPTION); MODULE_LICENSE("GPL"); -static char sd_driver_version[] = "0.3-isobel"; +static char sd_driver_version[] = "0.4-isobel"; #define sd_printk(level, format, arg...) \ printk(level DRV_MODULE_NAME ": " format , ## arg) @@ -475,6 +475,7 @@ /* */ static inline void spi_cs_low(struct sd_host *host) { + exi_dev_take(host->exi_device); exi_dev_select(host->exi_device); } @@ -482,6 +483,7 @@ static inline void spi_cs_high(struct sd_host *host) { exi_dev_deselect(host->exi_device); + exi_dev_give(host->exi_device); } /* */ @@ -506,6 +508,7 @@ * This is in fact the "feature" that enabled tmbinc to dump the IPL. * * When interfacing with SD cards, this causes us a serious problem. + * * We are required to send all ones (1s) while reading data from * the SD card. Otherwise, the card can interpret the data sent as * commands (if they start with the bit pattern 01 for example). @@ -523,6 +526,8 @@ */ exi_transfer(exi_get_exi_channel(host->exi_device), data, len, EXI_OP_READ, EXI_CMD_IDI); + //exi_transfer(exi_get_exi_channel(host->exi_device), data, len, + // EXI_OP_READ, EXI_CMD_NODMA); } /* cycles are expressed in 8 clock cycles */ @@ -901,6 +906,7 @@ static int sd_reset_sequence(struct sd_host *host) { struct sd_command *cmd = &host->cmd; + u8 d; int i; int retval = 0; @@ -910,25 +916,13 @@ * Wait at least 80 dummy clock cycles with the card deselected * and with the MOSI line continuously high. */ - { - /* - * FIXME: this is hackish but we need it to idle cards ... - * (we need to make the exi framework a bit more flexible) - */ - u8 d; - unsigned long flags; - - spi_cs_low(host); - spin_lock_irqsave(&host->lock, flags); - exi_deselect_raw(exi_get_exi_channel(host->exi_device)); - for (i = 0; i < SD_IDLE_CYCLES; i++) { - d = 0xff; - exi_transfer_raw(exi_get_exi_channel(host->exi_device), - &d, sizeof(d), EXI_OP_WRITE); - } - spin_unlock_irqrestore(&host->lock, flags); - spi_cs_high(host); + exi_dev_take(host->exi_device); + exi_dev_deselect(host->exi_device); + for (i = 0; i < SD_IDLE_CYCLES; i++) { + d = 0xff; + exi_dev_write(host->exi_device, &d, sizeof(d)); } + exi_dev_give(host->exi_device); /* * Send a CMD0, card must ack with "idle state" (0x01). @@ -1152,7 +1146,13 @@ unsigned long flags; int retval; - set_user_nice(current, -20); + /* + * We are going to perfom badly due to the read problem explained + * above. At least, be nice with other processes trying to use the + * cpu. + */ + set_user_nice(current, 0); + current->flags |= PF_NOFREEZE; set_current_state(TASK_RUNNING); @@ -1167,10 +1167,6 @@ host->req = NULL; spin_unlock_irqrestore(&host->lock, flags); - spin_lock(&host->queue_lock); - blk_start_queue(host->queue); - spin_unlock(&host->queue_lock); - /* proceed with i/o requests */ if (rq_data_dir(req) == WRITE) { retval = sd_write_request(host, req); @@ -1188,6 +1184,13 @@ if (!end_that_request_first(req, uptodate, nr_sectors)) end_that_request_last(req); + + /* avoid cpu monopolization, we are damn greedy */ + yield(); + + spin_lock(&host->queue_lock); + blk_start_queue(host->queue); + spin_unlock(&host->queue_lock); } wait_event(host->io_waitq, host->req || kthread_should_stop()); } @@ -1381,6 +1384,7 @@ struct hd_geometry geo; switch (cmd) { +#if 0 case BLKRAGET: case BLKFRAGET: case BLKROGET: @@ -1391,6 +1395,7 @@ case BLKGETSIZE64: case BLKFLSBUF: return ioctl_by_bdev(bdev, cmd, arg); +#endif case HDIO_GETGEO: /* fake the entries */ geo.cylinders = get_capacity(bdev->bd_disk) / (4 * 16); @@ -1402,7 +1407,7 @@ return -EFAULT; return 0; default: - return -EINVAL; + return -ENOTTY; } return -EINVAL; } @@ -1529,7 +1534,6 @@ err_blk_dev: sd_exit_blk_dev(host); return retval; - } /* |
From: Albert H. <he...@us...> - 2005-11-07 21:36:51
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16851/drivers/net Modified Files: gcn-bba.c Log Message: bba rewrite using the most recent exi framework. The driver has been simplified a lot thanks to the new channel allocation primitives. Index: gcn-bba.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gcn-bba.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- gcn-bba.c 17 Mar 2005 21:05:39 -0000 1.8 +++ gcn-bba.c 7 Nov 2005 21:36:42 -0000 1.9 @@ -35,18 +35,17 @@ #include <linux/spinlock.h> #include <linux/kthread.h> #include <linux/wait.h> +#include <linux/exi.h> #include <asm/system.h> #include <asm/io.h> -#define CONFIG_EXI_LITE2_COMPAT -#include <linux/exi.h> #define DRV_MODULE_NAME "gcn-bba" #define DRV_DESCRIPTION "Nintendo GameCube Broadband Adapter driver" #define DRV_AUTHOR "Albert Herranz, " \ "Todd Jeffreys" -char bba_driver_version[] = "1.3-isobel"; +char bba_driver_version[] = "1.4-isobel"; #define bba_printk(level, format, arg...) \ @@ -73,11 +72,10 @@ #define BBA_CMD_IR_MASKALL 0x00 #define BBA_CMD_IR_MASKNONE 0xf8 -#define bba_select() exi_lite_select(BBA_EXI_CHANNEL, BBA_EXI_DEVICE, \ - BBA_EXI_FREQ) -#define bba_deselect() exi_lite_deselect(BBA_EXI_CHANNEL) -#define bba_write(d,l) exi_lite_write(BBA_EXI_CHANNEL,d,l) -#define bba_read(d,l) exi_lite_read(BBA_EXI_CHANNEL,d,l) +static inline void bba_select(void); +static inline void bba_deselect(void); +static inline void bba_write(void *data, size_t len); +static inline void bba_read(void *data, size_t len); static void bba_ins(int reg, void *val, int len); static void bba_outs(int reg, void *val, int len); @@ -349,6 +347,10 @@ #define X(a,b) a,b #endif +enum { + __BBA_RBFIM_OFF = 0, +}; + struct bba_descr { u32 X(X(next_packet_ptr:12, packet_len:12), status:8); } __attribute((packed)); @@ -356,6 +358,8 @@ struct bba_private { spinlock_t lock; + unsigned long flags; +#define BBA_RBFIM_OFF (1<<__BBA_RBFIM_OFF) u32 msg_enable; u8 revid; @@ -370,6 +374,8 @@ struct net_device *dev; struct net_device_stats stats; + + struct exi_device *exi_device; }; static int bba_event_handler(struct exi_channel *exi_channel, @@ -382,14 +388,14 @@ static int bba_open(struct net_device *dev) { struct bba_private *priv = (struct bba_private *)dev->priv; - unsigned long flags; int retval; - /* according to patents, INTs are triggered on EXI channel 2 */ - retval = exi_lite_register_event(BBA_EXI_IRQ_CHANNEL , EXI_EVENT_IRQ, - bba_event_handler, dev, - (1 << BBA_EXI_IRQ_CHANNEL) | - (1 << BBA_EXI_CHANNEL)); + /* INTs are triggered on EXI channel 2 */ + retval = exi_event_register(to_exi_channel(BBA_EXI_IRQ_CHANNEL), + EXI_EVENT_IRQ, + priv->exi_device, + bba_event_handler, dev, + (1 << BBA_EXI_CHANNEL)); if (retval < 0) { bba_printk(KERN_ERR, "unable to register EXI event %d\n", EXI_EVENT_IRQ); @@ -397,9 +403,9 @@ } /* reset the hardware to a known state */ - spin_lock_irqsave(&priv->lock, flags); + exi_dev_take(priv->exi_device); retval = bba_reset(dev); - spin_unlock_irqrestore(&priv->lock, flags); + exi_dev_give(priv->exi_device); /* inform the network layer that we are ready */ netif_start_queue(dev); @@ -413,14 +419,12 @@ static int bba_close(struct net_device *dev) { struct bba_private *priv = (struct bba_private *)dev->priv; - unsigned long flags; - - netif_carrier_off(dev); /* do not allow more packets to be queued */ + netif_carrier_off(dev); netif_stop_queue(dev); - spin_lock_irqsave(&priv->lock, flags); + exi_dev_take(priv->exi_device); /* stop receiver */ bba_out8(BBA_NCRA, bba_in8(BBA_NCRA) & ~BBA_NCRA_SR); @@ -428,10 +432,11 @@ /* mask all interrupts */ bba_out8(BBA_IMR, 0x00); - spin_unlock_irqrestore(&priv->lock, flags); + exi_dev_give(priv->exi_device); /* unregister exi event */ - exi_lite_unregister_event(BBA_EXI_IRQ_CHANNEL, EXI_EVENT_IRQ); + exi_event_unregister(to_exi_channel(BBA_EXI_IRQ_CHANNEL), + EXI_EVENT_IRQ); return 0; } @@ -448,6 +453,7 @@ /* * Starts transmission for a packet. + * We can't do real hardware i/o here. */ static int bba_start_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -459,6 +465,7 @@ if (skb->len > BBA_TX_MAX_PACKET_SIZE) { dev_kfree_skb(skb); priv->stats.tx_dropped++; + /* silently drop the package */ goto out; } @@ -470,8 +477,8 @@ */ if (!priv->tx_skb) { priv->tx_skb = skb; - wake_up(&priv->io_waitq); dev->trans_start = jiffies; + wake_up(&priv->io_waitq); } else { retval = NETDEV_TX_BUSY; } @@ -492,33 +499,35 @@ static int bba_tx_err(u8 status, struct net_device *dev) { struct bba_private *priv = (struct bba_private *)dev->priv; - int errors = 0; + int last_tx_errors = priv->stats.tx_errors; if (status & BBA_TX_STATUS_TERR) { - errors++; - priv->stats.tx_errors++; if (status & BBA_TX_STATUS_CCMASK) { priv->stats.collisions += (status & BBA_TX_STATUS_CCMASK); + priv->stats.tx_errors++; } if (status & BBA_TX_STATUS_CRSLOST) { priv->stats.tx_carrier_errors++; + priv->stats.tx_errors++; } if (status & BBA_TX_STATUS_UF) { priv->stats.tx_fifo_errors++; + priv->stats.tx_errors++; } if (status & BBA_TX_STATUS_OWC) { priv->stats.tx_window_errors++; + priv->stats.tx_errors++; } } - if (errors) { + if (last_tx_errors != priv->stats.tx_errors) { if (netif_msg_tx_err(priv)) { bba_printk(KERN_DEBUG, "tx errors, status %8.8x.\n", status); } } - return errors; + return priv->stats.tx_errors; } /* @@ -534,9 +543,7 @@ static u8 pad[ETH_ZLEN] __attribute__ ((aligned (EXI_DMA_ALIGN+1))); int pad_len; - BUG_ON(priv->tx_skb == NULL); - - spin_lock_irqsave(&priv->lock, flags); + exi_dev_take(priv->exi_device); /* if the TXFIFO is in use, we'll try it later when free */ if (bba_in8(BBA_NCRA) & (BBA_NCRA_ST0 | BBA_NCRA_ST1)) { @@ -544,28 +551,26 @@ goto out; } + spin_lock_irqsave(&priv->lock, flags); skb = priv->tx_skb; + priv->tx_skb = NULL; + spin_unlock_irqrestore(&priv->lock, flags); /* tell the card about the length of this packet */ bba_out12(BBA_TXFIFOCNT, skb->len); /* * Store the packet in the TXFIFO, including padding if needed. - * Packet transmission tries to make use of DMA transfers, and enables - * interrupts as soon as the channel is selected (reserved). + * Packet transmission tries to make use of DMA transfers. */ bba_select(); - spin_unlock_irqrestore(&priv->lock, flags); - bba_outs_nosel(BBA_WRTXFIFOD, skb->data, skb->len); if (skb->len < ETH_ZLEN) { pad_len = ETH_ZLEN - skb->len; memset(pad, 0, pad_len); bba_outs_nosel_continued(pad, pad_len); } - - spin_lock_irqsave(&priv->lock, flags); bba_deselect(); /* tell the card to send the packet right now */ @@ -577,57 +582,61 @@ /* free this packet and remove it from our transmission "queue" */ dev_kfree_skb(skb); - priv->tx_skb = NULL; out: - spin_unlock_irqrestore(&priv->lock, flags); + exi_dev_give(priv->exi_device); return retval; } /* * Updates reception error statistics. - * Caller holds the device lock. + * Caller has already taken the exi channel. */ static int bba_rx_err(u8 status, struct net_device *dev) { struct bba_private *priv = (struct bba_private *)dev->priv; - int errors = 0; + int last_rx_errors = priv->stats.rx_errors; - if (status & BBA_RX_STATUS_RERR) { - errors++; + if (status == 0xff) { + priv->stats.rx_over_errors++; priv->stats.rx_errors++; - if (status & BBA_RX_STATUS_BF) - priv->stats.rx_over_errors++; - if (status & BBA_RX_STATUS_CRC) - priv->stats.rx_crc_errors++; - if (status & BBA_RX_STATUS_FO) - priv->stats.rx_fifo_errors++; - if (status & BBA_RX_STATUS_RW) - priv->stats.rx_length_errors++; - if (status & BBA_RX_STATUS_FAE) + } else { + if (status & BBA_RX_STATUS_RERR) { + if (status & BBA_RX_STATUS_CRC) { + priv->stats.rx_crc_errors++; + priv->stats.rx_errors++; + } + if (status & BBA_RX_STATUS_FO) { + priv->stats.rx_fifo_errors++; + priv->stats.rx_errors++; + } + if (status & BBA_RX_STATUS_RW) { + priv->stats.rx_length_errors++; + priv->stats.rx_errors++; + } + if (status & BBA_RX_STATUS_BF) { + priv->stats.rx_over_errors++; + priv->stats.rx_errors++; + } + if (status & BBA_RX_STATUS_RF) { + priv->stats.rx_length_errors++; + priv->stats.rx_errors++; + } + } + if (status & BBA_RX_STATUS_FAE) { priv->stats.rx_frame_errors++; + priv->stats.rx_errors++; + } } - if (status & BBA_RX_STATUS_RF) - priv->stats.rx_length_errors++; - if (errors) { + if (last_rx_errors != priv->stats.rx_errors) { if (netif_msg_rx_err(priv)) { bba_printk(KERN_DEBUG, "rx errors, status %8.8x.\n", status); } - - /* stop the receiver */ - bba_out8(BBA_NCRA, bba_in8(BBA_NCRA) & ~BBA_NCRA_SR); - - /* initialize page pointers */ - bba_out12(BBA_RWP, BBA_INIT_RWP); - bba_out12(BBA_RRP, BBA_INIT_RRP); - - /* start receiver again */ - bba_out8(BBA_NCRA, bba_in8(BBA_NCRA) | BBA_NCRA_SR); } - return errors; + return priv->stats.rx_errors; } /* @@ -638,13 +647,12 @@ struct bba_private *priv = (struct bba_private *)dev->priv; struct sk_buff *skb; struct bba_descr descr; - int status, size; + int lrps, size; unsigned long pos, top; unsigned short rrp, rwp; - unsigned long flags; int received = 0; - spin_lock_irqsave(&priv->lock, flags); + exi_dev_take(priv->exi_device); /* get current receiver pointers */ rwp = bba_in12(BBA_RWP); @@ -655,12 +663,19 @@ le32_to_cpus((u32 *) & descr); size = descr.packet_len - 4; /* ignore CRC */ - status = descr.status; + lrps = descr.status; /* abort processing in case of errors */ - if (size > BBA_RX_MAX_PACKET_SIZE + 4 - || (status & (BBA_RX_STATUS_RERR | BBA_RX_STATUS_FAE))) { - bba_rx_err(status, dev); + if (size > BBA_RX_MAX_PACKET_SIZE + 4) { + DBG("packet too big %d", size); + continue; + } + + if ((lrps & (BBA_RX_STATUS_RERR | BBA_RX_STATUS_FAE))) { + DBG("error %x on received packet\n", lrps); + bba_rx_err(lrps, dev); + rwp = bba_in12(BBA_RWP); + rrp = bba_in12(BBA_RRP); continue; } @@ -679,29 +694,15 @@ if ((pos + size) < top) { /* full packet in one chunk */ - bba_select(); - spin_unlock_irqrestore(&priv->lock, flags); - bba_ins_nosel(pos, skb->data, size); - spin_lock_irqsave(&priv->lock, flags); - bba_deselect(); + bba_ins(pos, skb->data, size); } else { /* packet wrapped */ int chunk_size = top - pos; - bba_select(); - spin_unlock_irqrestore(&priv->lock, flags); - bba_ins_nosel(pos, skb->data, chunk_size); - spin_lock_irqsave(&priv->lock, flags); - bba_deselect(); - + bba_ins(pos, skb->data, chunk_size); rrp = BBA_INIT_RRP; - - bba_select(); - spin_unlock_irqrestore(&priv->lock, flags); - bba_ins_nosel(rrp << 8, skb->data + chunk_size, + bba_ins(rrp << 8, skb->data + chunk_size, size - chunk_size); - spin_lock_irqsave(&priv->lock, flags); - bba_deselect(); } skb->protocol = eth_type_trans(skb, dev); @@ -714,18 +715,22 @@ received++; /* move read pointer to next packet */ - bba_out12(BBA_RRP, descr.next_packet_ptr); + bba_out12(BBA_RRP, rrp = descr.next_packet_ptr); - /* get read/write pointers and continue */ + /* get write pointer and continue */ rwp = bba_in12(BBA_RWP); - rrp = bba_in12(BBA_RRP); } /* there are no more packets pending if we didn't exhaust our budget */ if (received < budget) priv->rx_work = 0; - spin_unlock_irqrestore(&priv->lock, flags); + /* re-enable RBFI if it was disabled before */ + if (test_and_clear_bit(__BBA_RBFIM_OFF, &priv->flags)) { + bba_out8(BBA_IMR, bba_in8(BBA_IMR) | BBA_IMR_RBFIM); + } + + exi_dev_give(priv->exi_device); return received; } @@ -741,16 +746,18 @@ current->flags |= PF_NOFREEZE; set_current_state(TASK_RUNNING); + /* + * XXX We currently do not freeze this thread. + * The bba is often used to access the root filesystem. + */ + while(!kthread_should_stop()) { - //try_to_freeze(PF_FREEZE); wait_event(priv->io_waitq, priv->rx_work || priv->tx_skb); while (priv->rx_work || priv->tx_skb) { - if (priv->rx_work) { + if (priv->rx_work) bba_rx(priv->dev, 0x0f); - } - if (priv->tx_skb) { + if (priv->tx_skb) bba_tx(priv->dev); - } } } return 0; @@ -758,16 +765,14 @@ /* * Handles interrupt work from the network device. + * Caller has already taken the exi channel. */ static void inline bba_interrupt(struct net_device *dev) { struct bba_private *priv = (struct bba_private *)dev->priv; - unsigned long flags; - u8 ir, imr, status; + u8 ir, imr, status, lrps, ltps; int loops = 0; - spin_lock_irqsave(&priv->lock, flags); - ir = bba_in8(BBA_IR); imr = bba_in8(BBA_IMR); status = ir & imr; @@ -782,25 +787,38 @@ while (status) { bba_out8(BBA_IR, status); - if (status & (BBA_IR_RBFI | BBA_IR_RI)) { + /* avoid multiple receive buffer full interrupts */ + if (status & BBA_IR_RBFI) { + bba_out8(BBA_IMR, bba_in8(BBA_IMR) & ~BBA_IMR_RBFIM); + set_bit(__BBA_RBFIM_OFF, &priv->flags); + } + + if ((status & (BBA_IR_RI | BBA_IR_RBFI))) { priv->rx_work = 1; wake_up(&priv->io_waitq); } - if (status & BBA_IR_REI) { - bba_rx_err(bba_in8(BBA_LRPS), dev); - } - if (status & (BBA_IR_TEI | BBA_IR_TI)) { - bba_tx_err(bba_in8(BBA_LTPS), dev); + if ((status & (BBA_IR_TI|BBA_IR_FIFOEI))) { /* allow more packets to be sent */ netif_wake_queue(dev); } + + if ((status & (BBA_IR_RBFI|BBA_IR_REI))) { + lrps = bba_in8(BBA_LRPS); + bba_rx_err(lrps, dev); + } + if (status & BBA_IR_TEI) { + ltps = bba_in8(BBA_LTPS); + bba_tx_err(ltps, dev); + } + if (status & BBA_IR_FIFOEI) { - /* allow more packets to be sent */ - netif_wake_queue(dev); + DBG("FIFOEI\n"); } if (status & BBA_IR_BUSEI) { + DBG("BUSEI\n"); } if (status & BBA_IR_FRAGI) { + DBG("FRAGI\n"); } ir = bba_in8(BBA_IR); @@ -810,7 +828,7 @@ loops++; } - if (loops > 100) + if (loops > 3) DBG("a lot of interrupt work (%d loops)\n", loops); /* wake up xmit queue in case transmitter is idle */ @@ -819,12 +837,12 @@ } out: - spin_unlock_irqrestore(&priv->lock, flags); + return; } /* * Resets the hardware to a known state. - * Caller holds the device lock. + * Caller has already taken the exi channel. */ static int bba_reset(struct net_device *dev) { @@ -865,7 +883,7 @@ udelay(1000); /* accept broadcast, assert int for every two packets received */ - bba_out8(BBA_NCRB, BBA_NCRB_AB | BBA_NCRB_2_PACKETS_PER_INT); + bba_out8(BBA_NCRB, BBA_NCRB_AB | BBA_NCRB_1_PACKET_PER_INT); /* setup receive interrupt time out, in 40ns units */ bba_out8(BBA_RXINTT, 0x00); @@ -902,7 +920,7 @@ bba_out8(BBA_IR, 0xFF); /* enable all interrupts */ - bba_out8(BBA_IMR, 0xFF & ~BBA_IMR_FIFOEIM); + bba_out8(BBA_IMR, 0xFF & ~(BBA_IMR_FIFOEIM /*| BBA_IMR_REIM*/ )); /* unknown, short command registers 0x02 */ /* XXX enable interrupts on the EXI glue logic */ @@ -941,13 +959,16 @@ /* * Handles IRQ events from the exi layer. + * + * We are called from softirq context, and with the exi channel kindly taken + * for us. We can also safely do exi transfers of less than 32 bytes, which + * are guaranteed to not sleep by the exi layer. */ static int bba_event_handler(struct exi_channel *exi_channel, unsigned int event, void *dev0) { struct net_device *dev = (struct net_device *)dev0; struct bba_private *priv = (struct bba_private *)dev->priv; - unsigned long flags; register u8 status, mask; /* get interrupt status from EXI glue */ @@ -971,9 +992,7 @@ if (status & mask) { DBG("bba: killing interrupt!\n"); /* reset the adapter so that we can continue working */ - spin_lock_irqsave(&priv->lock, flags); bba_reset(dev); - spin_unlock_irqrestore(&priv->lock, flags); goto out; } @@ -1025,6 +1044,31 @@ static struct net_device *bba_dev = NULL; +static inline void bba_select(void) +{ + struct bba_private *priv = (struct bba_private *)bba_dev->priv; + exi_dev_select(priv->exi_device); + +} + +static inline void bba_deselect(void) +{ + struct bba_private *priv = (struct bba_private *)bba_dev->priv; + exi_dev_deselect(priv->exi_device); +} + +static inline void bba_read(void *data, size_t len) +{ + struct bba_private *priv = (struct bba_private *)bba_dev->priv; + return exi_dev_read(priv->exi_device, data, len); +} + +static inline void bba_write(void *data, size_t len) +{ + struct bba_private *priv = (struct bba_private *)bba_dev->priv; + return exi_dev_write(priv->exi_device, data, len); +} + /* * Initializes a BroadBand Adapter device. */ @@ -1050,12 +1094,12 @@ dev->stop = bba_close; dev->hard_start_xmit = bba_start_xmit; dev->get_stats = bba_get_stats; - /* XXX dev->tx_timeout = bba_tx_timeout; */ SET_MODULE_OWNER(dev); priv = netdev_priv(dev); priv->dev = dev; + priv->exi_device = exi_device; spin_lock_init(&priv->lock); @@ -1074,12 +1118,9 @@ ether_setup(dev); dev->flags &= ~IFF_MULTICAST; - bba_reset(dev); - err = register_netdev(dev); if (err) { - bba_printk(KERN_ERR, "Cannot register net device, " - "aborting.\n"); + bba_printk(KERN_ERR, "Cannot register net device, aborting.\n"); goto err_out_free_dev; } @@ -1088,6 +1129,7 @@ bba_dev = dev; exi_set_drvdata(exi_device,dev); + return 0; err_out_free_dev: |
From: Albert H. <he...@us...> - 2005-11-07 21:34:29
|
Update of /cvsroot/gc-linux/linux/drivers/exi In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15252/drivers/exi Modified Files: exi-hw.c exi-hw.h exi-driver.c Log Message: Another exi layer update. Now channel allocation is independent of channel selection. Channels are allocated by "take" and deallocated by "give". "select", "deselect" and "transfer" operations are available _after_ channel allocation. Transfers can now be done with channel deselected (required for SD cards). exi drivers can now be simplified a lot more. ksoftirqd will need to run at lower prio to get good performance (try "renice -1 -p 2"). Index: exi-driver.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-driver.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- exi-driver.c 25 Sep 2005 19:55:50 -0000 1.10 +++ exi-driver.c 7 Nov 2005 21:34:17 -0000 1.11 @@ -151,7 +151,6 @@ sprintf(exi_device->dev.bus_id, "%01x:%01x", channel, device); exi_device->dev.platform_data = to_exi_channel(channel); exi_device->dev.release = exi_device_release; - } /** Index: exi-hw.h =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-hw.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- exi-hw.h 25 Sep 2005 19:55:50 -0000 1.6 +++ exi-hw.h 7 Nov 2005 21:34:17 -0000 1.7 @@ -90,11 +90,17 @@ #define EXI_DATA 0x10 +enum { + __EXI_DMABUSY = 0, + __EXI_EXT, +}; /* * For registering event handlers with the exi layer. */ -struct exi_event_handler { +struct exi_event { + int id; /* event id */ + struct exi_device *owner; /* device owning of the event */ exi_event_handler_t handler; void *data; unsigned int channel_mask; /* channels used by handler */ @@ -108,15 +114,13 @@ int channel; unsigned long flags; -#define EXI_SELECTED (1<<0) -#define EXI_DMABUSY (1<<1) -#define EXI_EXT (1<<8) +#define EXI_DMABUSY (1<<__EXI_DMABUSY) +#define EXI_EXT (1<<__EXI_EXT) spinlock_t io_lock; /* serializes access to CSR */ void __iomem *io_base; - spinlock_t select_lock; /* held while using channel */ - struct exi_device *device_selected; + struct exi_device *owner; wait_queue_head_t wait_queue; struct exi_command *queued_cmd; @@ -125,16 +129,17 @@ unsigned long csr; struct tasklet_struct tasklet; - struct exi_event_handler events[EXI_MAX_EVENTS]; + struct exi_event events[EXI_MAX_EVENTS]; }; +extern struct exi_device *exi_channel_owner(struct exi_channel *exi_channel); extern int exi_get_ext_line(struct exi_channel *exi_channel); extern void exi_update_ext_status(struct exi_channel *exi_channel); extern int exi_hw_init(char *); extern void exi_hw_exit(void); -#define exi_is_selected(x) ((x)->flags & EXI_SELECTED) +#define exi_is_taken(x) ((x)->owner) /* * Internal. Index: exi-hw.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-hw.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- exi-hw.c 25 Sep 2005 19:55:50 -0000 1.11 +++ exi-hw.c 7 Nov 2005 21:34:17 -0000 1.12 @@ -20,12 +20,13 @@ * * op atomic? * ------------------ ------- + * take yes + * give yes * select yes * deselect yes * transfer yes/no (1) * * These primitives are encapsulated in several APIs. - * Some APIs are backwards-compatible with the old gcn-exi-lite framework. * See include/linux/exi.h for additional information. * * 1. Kernel Contexts @@ -41,8 +42,8 @@ * channel mask are all deselected. This allows one to run EXI commands in * softirq context from the EXI event handlers. * - * "select" operations in user context will sleep if necessary until the - * channel gets deselected. + * "take" operations in user context will sleep if necessary until the + * channel is "given". * * * 2. Transfers @@ -92,7 +93,6 @@ .lock = SPIN_LOCK_UNLOCKED, .io_lock = SPIN_LOCK_UNLOCKED, .io_base = EXI_IO_BASE(0), - .select_lock = SPIN_LOCK_UNLOCKED, .wait_queue = __WAIT_QUEUE_HEAD_INITIALIZER( exi_channels[0].wait_queue), }, @@ -101,7 +101,6 @@ .lock = SPIN_LOCK_UNLOCKED, .io_lock = SPIN_LOCK_UNLOCKED, .io_base = EXI_IO_BASE(1), - .select_lock = SPIN_LOCK_UNLOCKED, .wait_queue = __WAIT_QUEUE_HEAD_INITIALIZER( exi_channels[1].wait_queue), }, @@ -110,7 +109,6 @@ .lock = SPIN_LOCK_UNLOCKED, .io_lock = SPIN_LOCK_UNLOCKED, .io_base = EXI_IO_BASE(2), - .select_lock = SPIN_LOCK_UNLOCKED, .wait_queue = __WAIT_QUEUE_HEAD_INITIALIZER( exi_channels[2].wait_queue), }, @@ -152,25 +150,23 @@ return __to_channel(exi_channel); } -/* - * Internal. Initialize an exi_channel structure. +/** + * exi_channel_owner - returns the owner of the given channel + * @exi_channel: channel + * + * Return the device owning a given exi_channel structure. */ -void exi_channel_init(struct exi_channel *exi_channel, unsigned int channel) +struct exi_device *exi_channel_owner(struct exi_channel *exi_channel) { - memset(exi_channel, 0, sizeof(*exi_channel)); - - exi_channel->channel = channel; - spin_lock_init(&exi_channel->lock); - spin_lock_init(&exi_channel->select_lock); - spin_lock_init(&exi_channel->io_lock); - exi_channel->io_base = EXI_IO_BASE(channel); - init_waitqueue_head(&exi_channel->wait_queue); - - tasklet_init(&exi_channel->tasklet, - exi_tasklet, (unsigned long)exi_channel); + return exi_channel->owner; } +/* + * + * + */ + /** * exi_select_raw - selects a device on an exi channel * @exi_channel: channel @@ -354,6 +350,7 @@ /* * We clear the DATA register here to avoid confusing some * special hardware, like SD cards. + * Indeed, we need all 1s here. */ writel(~0, io_base + EXI_DATA); @@ -395,9 +392,36 @@ spin_unlock_irqrestore(&exi_channel->io_lock, flags); } + +/* + * + * + */ + static void exi_command_done(struct exi_command *cmd); /* + * Internal. Initialize an exi_channel structure. + */ +void exi_channel_init(struct exi_channel *exi_channel, unsigned int channel) +{ + memset(exi_channel, 0, sizeof(*exi_channel)); + exi_channel->events[EXI_EVENT_IRQ].id = EXI_EVENT_IRQ; + exi_channel->events[EXI_EVENT_INSERT].id = EXI_EVENT_INSERT; + exi_channel->events[EXI_EVENT_TC].id = EXI_EVENT_TC; + + spin_lock_init(&exi_channel->lock); + spin_lock_init(&exi_channel->io_lock); + init_waitqueue_head(&exi_channel->wait_queue); + + exi_channel->channel = channel; + exi_channel->io_base = EXI_IO_BASE(channel); + + tasklet_init(&exi_channel->tasklet, + exi_tasklet, (unsigned long)exi_channel); +} + +/* * Internal. Check if an exi channel has delayed work to do. */ static void exi_check_pending_work(void) @@ -424,7 +448,7 @@ BUG_ON(!(exi_channel->flags & EXI_DMABUSY)); exi_channel->flags &= ~EXI_DMABUSY; - dma_unmap_single(&exi_channel->device_selected->dev, + dma_unmap_single(&exi_channel->owner->dev, cmd->dma_addr, cmd->dma_len, (cmd->opcode == EXI_OP_READ)? DMA_FROM_DEVICE:DMA_TO_DEVICE); @@ -517,6 +541,7 @@ return pending; } +#if 0 /* * Internal. Wait until a full transfer completes and launch callbacks. */ @@ -525,6 +550,7 @@ while(exi_wait_for_transfer_one(exi_channel)) cpu_relax(); } +#endif /* * Internal. Call any done hooks. @@ -538,62 +564,40 @@ } /* - * Internal. Perform a select. - * Caller holds the channel lock. + * Internal. Take a channel. */ -static inline int exi_cmd_select(struct exi_command *cmd) +static int exi_take_channel(struct exi_channel *exi_channel, + struct exi_device *exi_device, int wait) { - struct exi_channel *exi_channel = cmd->exi_channel; - struct exi_device *exi_device; - int retval = 0; - - BUG_ON(cmd->data == NULL); - if (unlikely(exi_is_selected(exi_channel))) { - /* - * This may happen when called directly from interrupt context, - * without using the EXI event handler system. - * In such cases, the caller _should_ be able to deal with that. - */ - retval = -EBUSY; - goto out; - } - - spin_lock(&exi_channel->select_lock); - - /* cmd->data contains the device to select */ - exi_device = cmd->data; + unsigned long flags; + int result = 0; - exi_channel->device_selected = exi_device; - exi_channel->flags |= EXI_SELECTED; + BUG_ON(!exi_device); - DBG("channel=%d, device=%d, freq=%d\n", - exi_channel->channel, exi_device->eid.device, - exi_device->frequency); + spin_lock_irqsave(&exi_channel->lock, flags); + while(exi_channel->owner) { + spin_unlock_irqrestore(&exi_channel->lock, flags); + if (!wait) + return -EBUSY; + wait_event(exi_channel->wait_queue, + !exi_channel->owner); + spin_lock_irqsave(&exi_channel->lock, flags); + } + exi_channel->owner = exi_device; + spin_unlock_irqrestore(&exi_channel->lock, flags); - exi_select_raw(exi_channel, exi_device->eid.device, - exi_device->frequency); -out: - return retval; + return result; } /* - * Internal. Perform a deselect. - * Caller holds the channel lock. + * Internal. Give a channel. */ -static inline void exi_cmd_deselect(struct exi_command *cmd) +static int exi_give_channel(struct exi_channel *exi_channel) { - struct exi_channel *exi_channel = cmd->exi_channel; - - WARN_ON(!exi_is_selected(exi_channel)); - - DBG("channel=%d\n", exi_channel->channel); - - exi_deselect_raw(exi_channel); - - exi_channel->flags &= ~EXI_SELECTED; - exi_channel->device_selected = NULL; - - spin_unlock(&exi_channel->select_lock); + WARN_ON(exi_channel->owner == NULL); + exi_channel->owner = NULL; + wake_up(&exi_channel->wait_queue); + return 0; } /* @@ -636,9 +640,9 @@ void *pre_data, *data, *post_data; unsigned int pre_len, len, post_len; int opcode; - int retval = 0; + int result = 0; - BUG_ON(!exi_is_selected(exi_channel)); + BUG_ON(!exi_channel->owner); len = cmd->len; if (!len) @@ -658,7 +662,7 @@ len = (cmd->bytes_left > 4)?4:cmd->bytes_left; exi_start_idi_transfer_raw(exi_channel, data, len, opcode); - retval = 1; /* wait */ + result = 1; /* wait */ goto done; } @@ -749,24 +753,24 @@ exi_channel->flags |= EXI_DMABUSY; cmd->dma_len = len; - cmd->dma_addr = dma_map_single(&exi_channel->device_selected->dev, + cmd->dma_addr = dma_map_single(&exi_channel->owner->dev, data, len, (cmd->opcode == EXI_OP_READ)? DMA_FROM_DEVICE:DMA_TO_DEVICE); exi_start_dma_transfer_raw(exi_channel, cmd->dma_addr, len, opcode); - retval = 1; /* wait */ + result = 1; /* wait */ done: - return retval; + return result; } /** * exi_run_command - executes a single exi command * @cmd: the command to execute * - * Context: user, softirq, hardirq + * Context: user * * Run just one command. * @@ -774,61 +778,51 @@ static int exi_run_command(struct exi_command *cmd) { struct exi_channel *exi_channel = cmd->exi_channel; + struct exi_device *exi_device = cmd->exi_device; unsigned long flags; - int retval = 0; - - BUG_ON(exi_channel == NULL); - - spin_lock_irqsave(&exi_channel->lock, flags); + int wait = !(cmd->flags & EXI_CMD_NOWAIT); + int result = 0; - /* ensure atomic operations are serialized */ - while (exi_channel->queued_cmd) { - DBG("cmd %d while dma in flight on channel %d\n", - cmd->opcode, exi_channel->channel); - spin_unlock_irqrestore(&exi_channel->lock, flags); - exi_wait_for_transfer(exi_channel); - spin_lock_irqsave(&exi_channel->lock, flags); - } + if (cmd->opcode != EXI_OP_TAKE) + WARN_ON(exi_channel->owner != exi_device); switch(cmd->opcode) { case EXI_OP_NOP: break; + case EXI_OP_TAKE: + result = exi_take_channel(exi_channel, exi_device, wait); + break; + case EXI_OP_GIVE: + result = exi_give_channel(exi_channel); + if (!exi_channel->owner) + exi_check_pending_work(); + break; case EXI_OP_SELECT: - while (exi_is_selected(exi_channel) && !in_atomic()) { - spin_unlock_irqrestore(&exi_channel->lock, flags); - DBG("select sleeping...\n"); - wait_event(exi_channel->wait_queue, - !exi_is_selected(exi_channel)); - spin_lock_irqsave(&exi_channel->lock, flags); - } - retval = exi_cmd_select(cmd); + exi_select_raw(exi_channel, exi_device->eid.device, + exi_device->frequency); break; case EXI_OP_DESELECT: - exi_cmd_deselect(cmd); - wake_up(&exi_channel->wait_queue); + exi_deselect_raw(exi_channel); break; case EXI_OP_READ: case EXI_OP_WRITE: - retval = exi_cmd_transfer(cmd); + spin_lock_irqsave(&exi_channel->lock, flags); + result = exi_cmd_transfer(cmd); + spin_unlock_irqrestore(&exi_channel->lock, flags); break; default: - retval = -ENOSYS; + result = -ENOSYS; break; } - spin_unlock_irqrestore(&exi_channel->lock, flags); - /* - * We check for delayed work every time the channel becomes idle. + * We check for delayed work every time the channel becomes + * idle. */ - if (cmd->opcode == EXI_OP_DESELECT) - exi_check_pending_work(); - - /* command completed */ - if (retval == 0) + if (!result) exi_command_done(cmd); - return retval; + return result; } @@ -847,22 +841,48 @@ static int exi_run_command_and_wait(struct exi_command *cmd) { DECLARE_COMPLETION(complete); - int retval; + int result; cmd->done_data = &complete; cmd->done = exi_wait_done; - retval = exi_run_command(cmd); - if (retval > 0) { - if (in_atomic() || irqs_disabled()) { - exi_wait_for_transfer(cmd->exi_channel); - } else { - wait_for_completion(&complete); - } - retval = 0; + result = exi_run_command(cmd); + if (result > 0) { + wait_for_completion(&complete); + result = 0; } - return retval; + return result; +} + +/** + * exi_take - reserves an exi channel for exclusive use by a device + * @exi_device: exi device making the reservation + * @wait: wait for the operation to complete + * + * Reserves the channel of a given EXI device. + */ +int exi_take(struct exi_device *exi_device, int wait) +{ + struct exi_command cmd; + + exi_op_take(&cmd, exi_device); + if (!wait) + cmd.flags |= EXI_CMD_NOWAIT; + return exi_run_command(&cmd); } +/** + * exi_give - releases an exi channel + * @exi_device: exi device making the release + * + * Releases the channel of a given EXI device. + */ +int exi_give(struct exi_device *exi_device) +{ + struct exi_command cmd; + + exi_op_give(&cmd, exi_device->exi_channel); + return exi_run_command(&cmd); +} /** * exi_select - selects a exi device @@ -870,12 +890,12 @@ * * Selects a given EXI device. */ -int exi_select(struct exi_device *exi_device) +void exi_select(struct exi_device *exi_device) { struct exi_command cmd; exi_op_select(&cmd, exi_device); - return exi_run_command(&cmd); + exi_run_command(&cmd); } /** @@ -912,58 +932,89 @@ exi_run_command_and_wait(&cmd); } + /* - * Internal. Count number of busy exi channels given a channel mask. - * Caller holds the channel lock. + * Internal. Release several previously reserved channels, according to a + * channel mask. */ -static inline int exi_count_busy_channels(unsigned int channel_mask) +static void __give_some_channels(unsigned int channel_mask) { struct exi_channel *exi_channel; - unsigned int channel = 0; - int count = 0; + unsigned int channel; - while(channel_mask && channel < EXI_MAX_CHANNELS) { + for(channel=0; channel_mask && channel < EXI_MAX_CHANNELS; channel++) { if ((channel_mask & (1<<channel))) { channel_mask &= ~(1<<channel); exi_channel = __to_exi_channel(channel); - if (exi_is_selected(exi_channel)) - count++; + exi_channel->owner = NULL; } - channel++; } +} - return count; +/* + * Internal. Try to reserve atomically several channels, according to a + * channel mask. + */ +static inline int __try_take_some_channels(unsigned int channel_mask, + struct exi_device *exi_device) +{ + struct exi_channel *exi_channel; + unsigned int channel, taken_channel_mask = 0; + unsigned long flags; + int result = 0; + + for(channel=0; channel_mask && channel < EXI_MAX_CHANNELS; channel++) { + if ((channel_mask & (1<<channel))) { + channel_mask &= ~(1<<channel); + exi_channel = __to_exi_channel(channel); + spin_lock_irqsave(&exi_channel->lock, flags); + if (exi_channel->owner) { + spin_unlock_irqrestore(&exi_channel->lock, + flags); + result = -EBUSY; + break; + } + exi_channel->owner = exi_device; + taken_channel_mask |= (1<<channel); + spin_unlock_irqrestore(&exi_channel->lock, flags); + } + } + + if (result) + __give_some_channels(taken_channel_mask); + + return result; } /* * Internal. Determine if we can trigger an exi event. - * Caller holds the channel lock. */ -static inline int exi_can_trigger_event(struct exi_channel *exi_channel, - unsigned int event_id) +static inline int exi_can_trigger_event(struct exi_event *event) { - struct exi_event_handler *event; + return !__try_take_some_channels(event->channel_mask, event->owner); +} - event = &exi_channel->events[event_id]; - return !exi_count_busy_channels(event->channel_mask); +/* + * Internal. Finish an exi event invocation. + */ +static inline void exi_finish_event(struct exi_event *event) +{ + __give_some_channels(event->channel_mask); } /* * Internal. Trigger an exi event. */ static inline int exi_trigger_event(struct exi_channel *exi_channel, - unsigned int event_id) + struct exi_event *event) { - struct exi_event_handler *event; exi_event_handler_t handler; - int retval = 0; + int result = 0; - event = &exi_channel->events[event_id]; handler = event->handler; - if (handler) { - retval = handler(exi_channel, event_id, event->data); - } - return retval; + if (handler) + result = handler(exi_channel, event->id, event->data); + return result; } /* @@ -972,18 +1023,21 @@ static void exi_cond_trigger_event(struct exi_channel *exi_channel, unsigned int event_id, int csr_mask) { + struct exi_event *event; unsigned long flags; - spin_lock_irqsave(&exi_channel->lock, flags); - if (exi_can_trigger_event(exi_channel, event_id)) { + event = &exi_channel->events[event_id]; + if (exi_can_trigger_event(event)) { + spin_lock_irqsave(&exi_channel->lock, flags); if ((exi_channel->csr & csr_mask)) { exi_channel->csr &= ~csr_mask; spin_unlock_irqrestore(&exi_channel->lock, flags); - exi_trigger_event(exi_channel, event_id); + exi_trigger_event(exi_channel, event); + exi_finish_event(event); goto out; } + spin_unlock_irqrestore(&exi_channel->lock, flags); } - spin_unlock_irqrestore(&exi_channel->lock, flags); out: return; @@ -1008,7 +1062,7 @@ * provided on event registration is in use. */ - exi_cond_trigger_event(exi_channel, EXI_EVENT_TC, EXI_CSR_TCINT); + //exi_cond_trigger_event(exi_channel, EXI_EVENT_TC, EXI_CSR_TCINT); exi_cond_trigger_event(exi_channel, EXI_EVENT_IRQ, EXI_CSR_EXIINT); exi_cond_trigger_event(exi_channel, EXI_EVENT_INSERT, EXI_CSR_EXTIN); } @@ -1059,7 +1113,7 @@ wake_up(&exi_bus_waitq); } - if (exi_channel->csr && !exi_is_selected(exi_channel)) { + if (exi_channel->csr && !exi_is_taken(exi_channel)) { tasklet_schedule(&exi_channel->tasklet); } } @@ -1136,11 +1190,12 @@ * on the given channel. */ int exi_event_register(struct exi_channel *exi_channel, unsigned int event_id, + struct exi_device *exi_device, exi_event_handler_t handler, void *data, unsigned int channel_mask) { - struct exi_event_handler *event; - int retval = 0; + struct exi_event *event; + int result = 0; BUG_ON(event_id > EXI_MAX_EVENTS); @@ -1148,9 +1203,10 @@ spin_lock(&exi_channel->lock); if (event->handler) { - retval = -EBUSY; + result = -EBUSY; goto out; } + event->owner = exi_device; event->handler = handler; event->data = data; event->channel_mask = channel_mask; @@ -1158,7 +1214,7 @@ out: spin_unlock(&exi_channel->lock); - return retval; + return result; } @@ -1171,8 +1227,8 @@ */ int exi_event_unregister(struct exi_channel *exi_channel, unsigned int event_id) { - struct exi_event_handler *event; - int retval = 0; + struct exi_event *event; + int result = 0; BUG_ON(event_id > EXI_MAX_EVENTS); @@ -1180,12 +1236,13 @@ spin_lock(&exi_channel->lock); exi_disable_event(exi_channel, event_id); + event->owner = NULL; event->handler = NULL; event->data = NULL; event->channel_mask = 0; spin_unlock(&exi_channel->lock); - return retval; + return result; } /* @@ -1230,10 +1287,12 @@ u16 cmd = 0; /* ask for the EXI id */ + exi_dev_take(exi_device); exi_dev_select(exi_device); exi_dev_write(exi_device, &cmd, sizeof(cmd)); exi_dev_read(exi_device, &id, sizeof(id)); exi_dev_deselect(exi_device); + exi_dev_give(exi_device); /* * We return a EXI_ID_NONE if there is some unidentified device @@ -1281,7 +1340,7 @@ { struct exi_channel *exi_channel; int channel; - int retval; + int result; for(channel = 0; channel < EXI_MAX_CHANNELS; channel++) { exi_channel = __to_exi_channel(channel); @@ -1294,12 +1353,12 @@ exi_quiesce_all_channels(EXI_CSR_EXTINMASK); /* register the exi interrupt handler */ - retval = request_irq(EXI_IRQ, exi_irq_handler, 0, module_name, NULL); - if (retval) { + result = request_irq(EXI_IRQ, exi_irq_handler, 0, module_name, NULL); + if (result) { exi_printk(KERN_ERR, "unable to register irq%d\n", EXI_IRQ); } - return retval; + return result; } /* @@ -1319,6 +1378,8 @@ EXPORT_SYMBOL(exi_deselect_raw); EXPORT_SYMBOL(exi_transfer_raw); +EXPORT_SYMBOL(exi_take); +EXPORT_SYMBOL(exi_give); EXPORT_SYMBOL(exi_select); EXPORT_SYMBOL(exi_deselect); EXPORT_SYMBOL(exi_transfer); |
From: Albert H. <he...@us...> - 2005-11-07 21:34:29
|
Update of /cvsroot/gc-linux/linux/include/linux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15252/include/linux Modified Files: exi.h Log Message: Another exi layer update. Now channel allocation is independent of channel selection. Channels are allocated by "take" and deallocated by "give". "select", "deselect" and "transfer" operations are available _after_ channel allocation. Transfers can now be done with channel deselected (required for SD cards). exi drivers can now be simplified a lot more. ksoftirqd will need to run at lower prio to get good performance (try "renice -1 -p 2"). Index: exi.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/linux/exi.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- exi.h 25 Sep 2005 19:55:50 -0000 1.13 +++ exi.h 7 Nov 2005 21:34:16 -0000 1.14 @@ -135,6 +135,7 @@ extern int exi_event_register(struct exi_channel *exi_channel, unsigned int event_id, + struct exi_device *exi_device, exi_event_handler_t handler, void *data, unsigned int channel_mask); extern int exi_event_unregister(struct exi_channel *exi_channel, @@ -152,13 +153,17 @@ #define EXI_OP_WRITE (0x01<<2) /* same as in EXIxCR */ #define EXI_OP_READWRITE (0x02<<2) /* same as in EXIxCR */ -#define EXI_OP_SELECT 0x0100 -#define EXI_OP_DESELECT 0x0200 +#define EXI_OP_TAKE 0x0100 +#define EXI_OP_GIVE 0x0200 +#define EXI_OP_SELECT 0x0400 +#define EXI_OP_DESELECT 0x0800 + #define EXI_OP_NOP -1 unsigned long flags; -#define EXI_CMD_NODMA (1<<0) -#define EXI_CMD_IDI (1<<1) +#define EXI_CMD_NOWAIT (1<<0) +#define EXI_CMD_NODMA (1<<1) +#define EXI_CMD_IDI (1<<2) void *data; size_t len; @@ -171,13 +176,17 @@ void (*done)(struct exi_command *cmd); struct exi_channel *exi_channel; + struct exi_device *exi_device; }; +#include "../drivers/exi/exi-hw.h" + static inline void exi_op_basic(struct exi_command *cmd, struct exi_channel *exi_channel) { memset(cmd, 0, sizeof(*cmd)); cmd->exi_channel = exi_channel; + cmd->exi_device = exi_channel_owner(exi_channel); } static inline void exi_op_nop(struct exi_command *cmd, @@ -187,12 +196,27 @@ cmd->opcode = EXI_OP_NOP; } +static inline void exi_op_take(struct exi_command *cmd, + struct exi_device *exi_device) +{ + exi_op_basic(cmd, exi_device->exi_channel); + cmd->opcode = EXI_OP_TAKE; + cmd->exi_device = exi_device; +} + +static inline void exi_op_give(struct exi_command *cmd, + struct exi_channel *exi_channel) +{ + exi_op_basic(cmd, exi_channel); + cmd->opcode = EXI_OP_GIVE; +} + static inline void exi_op_select(struct exi_command *cmd, struct exi_device *exi_device) { exi_op_basic(cmd, exi_device->exi_channel); cmd->opcode = EXI_OP_SELECT; - cmd->data = exi_device; + cmd->exi_device = exi_device; } static inline void exi_op_deselect(struct exi_command *cmd, @@ -217,7 +241,6 @@ * EXpansion Interface interfaces. * */ -#include "../drivers/exi/exi-hw.h" /* * Raw. @@ -239,14 +262,31 @@ * Standard. */ -int exi_select(struct exi_device *exi_device); +int exi_take(struct exi_device *exi_device, int wait); +int exi_give(struct exi_device *exi_device); +void exi_select(struct exi_device *exi_device); void exi_deselect(struct exi_channel *exi_channel); void exi_transfer(struct exi_channel *exi_channel, void *data, size_t len, int opcode, unsigned long flags); -static inline int exi_dev_select(struct exi_device *exi_device) +static inline int exi_dev_take(struct exi_device *exi_device) { - return exi_select(exi_device); + return exi_take(exi_device, 1); +} + +static inline int exi_dev_try_take(struct exi_device *exi_device) +{ + return exi_take(exi_device, 0); +} + +static inline int exi_dev_give(struct exi_device *exi_device) +{ + return exi_give(exi_device); +} + +static inline void exi_dev_select(struct exi_device *exi_device) +{ + exi_select(exi_device); } static inline void exi_dev_deselect(struct exi_device *exi_device) @@ -279,76 +319,5 @@ return freq; } - - - -/* - * Compatibility layer with old EXI_LITE. - */ - -#ifdef CONFIG_EXI_LITE2_COMPAT - -#ifndef EXI_LITE -#define EXI_LITE 2 - -extern unsigned long exi_running; - -static inline int exi_lite_init(void) -{ - int retval = 0; - - if (!test_and_set_bit(1, &exi_running)) { - retval = exi_hw_init("exi-lite"); - } - return retval; -} - -static inline void exi_lite_exit(void) -{ - exi_hw_exit(); -} - -static inline int exi_lite_select(int channel, int device, int freq) -{ - struct exi_channel *exi_channel = to_exi_channel(channel); - struct exi_device *exi_device = exi_get_exi_device(exi_channel, device); - return exi_select(exi_device); -} - -static inline void exi_lite_deselect(int channel) -{ - struct exi_channel *exi_channel = to_exi_channel(channel); - exi_deselect(exi_channel); -} - -static inline void exi_lite_read(int channel, void *data, size_t len) -{ - exi_transfer(to_exi_channel(channel), data, len, EXI_OP_READ, 0); -} - -static inline void exi_lite_write(int channel, void *data, size_t len) -{ - exi_transfer(to_exi_channel(channel), data, len, EXI_OP_WRITE, 0); -} - -static inline int exi_lite_register_event(int channel, int event_id, - exi_event_handler_t handler, - void *dev, unsigned int channel_mask) -{ - return exi_event_register(to_exi_channel(channel), - (unsigned int)event_id, - handler, dev, channel_mask); -} - -static inline int exi_lite_unregister_event(int channel, int event_id) -{ - return exi_event_unregister(to_exi_channel(channel), - (unsigned int)event_id); -} - -#endif /* EXI_LITE */ - -#endif /* CONFIG_EXI_LITE2_COMPAT */ - #endif /* __EXI_H */ |
From: Albert H. <he...@us...> - 2005-11-07 19:58:24
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22432 Modified Files: gcngx.c Log Message: Reminder. We need to fix some things. Index: gcngx.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gcngx.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gcngx.c 2 Oct 2005 18:10:28 -0000 1.5 +++ gcngx.c 7 Nov 2005 19:58:12 -0000 1.6 @@ -344,6 +344,11 @@ /* call the frame buffer mmap method */ if (file->f_op->mmap) { + /* + * FIXME + * This seems to be broken. + * fb_mmap might sleep and we're getting a lock here. + */ spin_lock(&lock); /* reset our mmap since the fb driver will call it */ gcnfb_ops.fb_mmap = NULL; |
From: Arthur O. <aot...@us...> - 2005-10-31 00:44:26
|
Update of /cvsroot/gc-linux/linux/sound/ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3396/sound/ppc Modified Files: Kconfig Log Message: CONFIG_SND_GAMECUBE should depend on CONFIG_GAMECUBE. Also fixup description text while we're at it. Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/sound/ppc/Kconfig,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- Kconfig 31 Oct 2005 00:31:02 -0000 1.9 +++ Kconfig 31 Oct 2005 00:44:18 -0000 1.10 @@ -34,11 +34,14 @@ option. config SND_GAMECUBE - tristate "Nintendo GameCube audio" - depends on SND + tristate "Nintendo GameCube (Flipper)" + depends on SND && GAMECUBE # select SND_GENERIC_DRIVER help - Say 'Y' or 'M' to include support for the Nintendo GameCube - audio system. + Say Y here to add audio support for the "Flipper" Graphics + and Sound processor as found in the GameCube from Nintendo. + + To compile this driver as a module, choose M here: the module + will be called snd-gcn. endmenu |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:15
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/drivers/net Modified Files: Kconfig Makefile Log Message: Merge 2.6.14 Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/Makefile,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Makefile 29 Aug 2005 19:50:20 -0000 1.14 +++ Makefile 31 Oct 2005 00:31:02 -0000 1.15 @@ -9,6 +9,7 @@ obj-$(CONFIG_E1000) += e1000/ obj-$(CONFIG_IBM_EMAC) += ibm_emac/ obj-$(CONFIG_IXGB) += ixgb/ +obj-$(CONFIG_CHELSIO_T1) += chelsio/ obj-$(CONFIG_BONDING) += bonding/ obj-$(CONFIG_GIANFAR) += gianfar_driver.o @@ -27,6 +28,7 @@ obj-$(CONFIG_SUNBMAC) += sunbmac.o obj-$(CONFIG_MYRI_SBUS) += myri_sbus.o obj-$(CONFIG_SUNGEM) += sungem.o sungem_phy.o +obj-$(CONFIG_CASSINI) += cassini.o obj-$(CONFIG_MACE) += mace.o obj-$(CONFIG_BMAC) += bmac.o @@ -42,6 +44,7 @@ obj-$(CONFIG_E100) += e100.o obj-$(CONFIG_TLAN) += tlan.o obj-$(CONFIG_EPIC100) += epic100.o +obj-$(CONFIG_SIS190) += sis190.o obj-$(CONFIG_SIS900) += sis900.o obj-$(CONFIG_YELLOWFIN) += yellowfin.o obj-$(CONFIG_ACENIC) += acenic.o @@ -52,6 +55,8 @@ obj-$(CONFIG_FEALNX) += fealnx.o obj-$(CONFIG_TIGON3) += tg3.o obj-$(CONFIG_BNX2) += bnx2.o +spidernet-y += spider_net.o spider_net_ethtool.o sungem_phy.o +obj-$(CONFIG_SPIDER_NET) += spidernet.o obj-$(CONFIG_TC35815) += tc35815.o obj-$(CONFIG_SKGE) += skge.o obj-$(CONFIG_SK98LIN) += sk98lin/ @@ -65,6 +70,7 @@ # obj-$(CONFIG_MII) += mii.o +obj-$(CONFIG_PHYLIB) += phy/ obj-$(CONFIG_SUNDANCE) += sundance.o obj-$(CONFIG_HAMACHI) += hamachi.o Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/Kconfig,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- Kconfig 29 Aug 2005 19:50:20 -0000 1.17 +++ Kconfig 31 Oct 2005 00:31:02 -0000 1.18 @@ -131,6 +131,8 @@ source "drivers/net/arcnet/Kconfig" +source "drivers/net/phy/Kconfig" + # # Ethernet # @@ -404,7 +406,7 @@ If you're not building a kernel for a Sun 3, say N. config SUN3_82586 - tristate "Sun3 on-board Intel 82586 support" + bool "Sun3 on-board Intel 82586 support" depends on NET_ETHERNET && SUN3 help This driver enables support for the on-board Intel 82586 based @@ -454,7 +456,7 @@ config SGI_IOC3_ETH bool "SGI IOC3 Ethernet" - depends on NET_ETHERNET && PCI && SGI_IP27 + depends on NET_ETHERNET && PCI && SGI_IP27 && BROKEN select CRC32 select MII help @@ -555,6 +557,14 @@ Support for the Sun GEM chip, aka Sun GigabitEthernet/P 2.0. See also <http://www.sun.com/products-n-solutions/hardware/docs/pdf/806-3985-10.pdf>. +config CASSINI + tristate "Sun Cassini support" + depends on NET_ETHERNET && PCI + select CRC32 + help + Support for the Sun Cassini chip, aka Sun GigaSwift Ethernet. See also + <http://www.sun.com/products-n-solutions/hardware/docs/pdf/817-4341-10.pdf> + config NET_VENDOR_3COM bool "3COM cards" depends on NET_ETHERNET && (ISA || EISA || MCA || PCI) @@ -1654,7 +1664,7 @@ config NET_POCKET bool "Pocket and portable adapters" - depends on NET_ETHERNET && ISA + depends on NET_ETHERNET && PARPORT ---help--- Cute little network (Ethernet) devices which attach to the parallel port ("pocket adapters"), commonly used with laptops. If you have @@ -1678,7 +1688,7 @@ config ATP tristate "AT-LAN-TEC/RealTek pocket adapter support" - depends on NET_POCKET && ISA && X86 + depends on NET_POCKET && PARPORT && X86 select CRC32 ---help--- This is a network (Ethernet) device which attaches to your parallel @@ -1693,7 +1703,7 @@ config DE600 tristate "D-Link DE600 pocket adapter support" - depends on NET_POCKET && ISA + depends on NET_POCKET && PARPORT ---help--- This is a network (Ethernet) device which attaches to your parallel port. Read <file:Documentation/networking/DLINK.txt> as well as the @@ -1708,7 +1718,7 @@ config DE620 tristate "D-Link DE620 pocket adapter support" - depends on NET_POCKET && ISA + depends on NET_POCKET && PARPORT ---help--- This is a network (Ethernet) device which attaches to your parallel port. Read <file:Documentation/networking/DLINK.txt> as well as the @@ -1745,11 +1755,18 @@ the Motorola 68360 processor. config FEC - bool "FEC ethernet controller (of ColdFire 5272)" - depends on M5272 || M5282 + bool "FEC ethernet controller (of ColdFire CPUs)" + depends on M523x || M527x || M5272 || M528x help Say Y here if you want to use the built-in 10/100 Fast ethernet - controller on the Motorola ColdFire 5272 processor. + controller on some Motorola ColdFire processors. + +config FEC2 + bool "Second FEC ethernet controller (on some ColdFire CPUs)" + depends on FEC + help + Say Y here if you want to use the second built-in 10/100 Fast + ethernet controller on some Motorola ColdFire processors. config NE_H8300 tristate "NE2000 compatible support for H8/300" @@ -1930,6 +1947,20 @@ If in doubt, say Y. +config SIS190 + tristate "SiS190/SiS191 gigabit ethernet support" + depends on PCI + select CRC32 + select MII + ---help--- + Say Y here if you have a SiS 190 PCI Fast Ethernet adapter or + a SiS 191 PCI Gigabit Ethernet adapter. Both are expected to + appear in lan on motherboard designs which are based on SiS 965 + and SiS 966 south bridge. + + To compile this driver as a module, choose M here: the module + will be called sis190. This is recommended. + config SKGE tristate "New SysKonnect GigaEthernet support (EXPERIMENTAL)" depends on PCI && EXPERIMENTAL @@ -1937,7 +1968,7 @@ ---help--- This driver support the Marvell Yukon or SysKonnect SK-98xx/SK-95xx and related Gigabit Ethernet adapters. It is a new smaller driver - driver with better performance and more complete ethtool support. + with better performance and more complete ethtool support. It does not support the link failover and network management features that "portable" vendor supplied sk98lin driver does. @@ -2051,6 +2082,13 @@ To compile this driver as a module, choose M here: the module will be called bnx2. This is recommended. +config SPIDER_NET + tristate "Spider Gigabit Ethernet driver" + depends on PCI && PPC_BPA + help + This driver supports the Gigabit Ethernet chips present on the + Cell Processor-Based Blades from IBM. + config GIANFAR tristate "Gianfar Ethernet" depends on 85xx || 83xx @@ -2100,6 +2138,25 @@ menu "Ethernet (10000 Mbit)" depends on !UML +config CHELSIO_T1 + tristate "Chelsio 10Gb Ethernet support" + depends on PCI + help + This driver supports Chelsio N110 and N210 models 10Gb Ethernet + cards. More information about adapter features and performance + tuning is in <file:Documentation/networking/cxgb.txt>. + + For general information about Chelsio and our products, visit + our website at <http://www.chelsio.com>. + + For customer support, please visit our customer support page at + <http://www.chelsio.com/support.htm>. + + Please send feedback to <lin...@ch...>. + + To compile this driver as a module, choose M here: the module + will be called cxgb. + config IXGB tristate "Intel(R) PRO/10GbE support" depends on PCI |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:15
|
Update of /cvsroot/gc-linux/linux/include/asm-ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/include/asm-ppc Modified Files: io.h Log Message: Merge 2.6.14 Index: io.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/asm-ppc/io.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- io.h 10 Oct 2005 22:12:22 -0000 1.10 +++ io.h 31 Oct 2005 00:31:02 -0000 1.11 @@ -56,7 +56,7 @@ * is actually performed (i.e. the data has come back) before we start * executing any following instructions. */ -extern inline int in_8(volatile unsigned char __iomem *addr) +extern inline int in_8(const volatile unsigned char __iomem *addr) { int ret; @@ -72,7 +72,7 @@ __asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); } -extern inline int in_le16(volatile unsigned short __iomem *addr) +extern inline int in_le16(const volatile unsigned short __iomem *addr) { int ret; @@ -83,7 +83,7 @@ return ret; } -extern inline int in_be16(volatile unsigned short __iomem *addr) +extern inline int in_be16(const volatile unsigned short __iomem *addr) { int ret; @@ -104,7 +104,7 @@ __asm__ __volatile__("sth%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); } -extern inline unsigned in_le32(volatile unsigned __iomem *addr) +extern inline unsigned in_le32(const volatile unsigned __iomem *addr) { unsigned ret; @@ -115,7 +115,7 @@ return ret; } -extern inline unsigned in_be32(volatile unsigned __iomem *addr) +extern inline unsigned in_be32(const volatile unsigned __iomem *addr) { unsigned ret; @@ -139,7 +139,7 @@ #define readb(addr) in_8((volatile u8 *)(addr)) #define writeb(b,addr) out_8((volatile u8 *)(addr), (b)) #else -static inline __u8 readb(volatile void __iomem *addr) +static inline __u8 readb(const volatile void __iomem *addr) { return in_8(addr); } @@ -150,11 +150,11 @@ #endif #if defined(CONFIG_APUS) || defined(CONFIG_GAMECUBE) -static inline __u16 readw(volatile void __iomem *addr) +static inline __u16 readw(const volatile void __iomem *addr) { return *(__force volatile __u16 *)(addr); } -static inline __u32 readl(volatile void __iomem *addr) +static inline __u32 readl(const volatile void __iomem *addr) { return *(__force volatile __u32 *)(addr); } @@ -173,11 +173,11 @@ #define writew(b,addr) out_le16((volatile u16 *)(addr),(b)) #define writel(b,addr) out_le32((volatile u32 *)(addr),(b)) #else -static inline __u16 readw(volatile void __iomem *addr) +static inline __u16 readw(const volatile void __iomem *addr) { return in_le16(addr); } -static inline __u32 readl(volatile void __iomem *addr) +static inline __u32 readl(const volatile void __iomem *addr) { return in_le32(addr); } |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/sound/ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/sound/ppc Modified Files: Kconfig Log Message: Merge 2.6.14 Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/sound/ppc/Kconfig,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- Kconfig 23 Jun 2005 20:02:22 -0000 1.8 +++ Kconfig 31 Oct 2005 00:31:02 -0000 1.9 @@ -13,18 +13,32 @@ tristate "PowerMac (AWACS, DACA, Burgundy, Tumbler, Keywest)" depends on SND && I2C && INPUT && PPC_PMAC select SND_PCM + select SND_GENERIC_DRIVER help Say Y here to include support for the integrated sound device. To compile this driver as a module, choose M here: the module will be called snd-powermac. +config SND_POWERMAC_AUTO_DRC + bool "Toggle DRC automatically at headphone/line plug-in" + depends on SND_POWERMAC + default y + help + Say Y here to enable the automatic toggle of DRC (dynamic + range compression) on Tumbler/Snapper. + If this feature is enabled, DRC is turned off when the + headphone/line jack is plugged, and turned on when unplugged. + + Note that you can turn on/off DRC manually even without this + option. + config SND_GAMECUBE tristate "Nintendo GameCube audio" depends on SND +# select SND_GENERIC_DRIVER help Say 'Y' or 'M' to include support for the Nintendo GameCube audio system. endmenu - |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/arch/ppc/boot/simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/arch/ppc/boot/simple Modified Files: Makefile embed_config.c head.S Log Message: Merge 2.6.14 Index: head.S =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/boot/simple/head.S,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- head.S 23 Jun 2005 20:02:15 -0000 1.8 +++ head.S 31 Oct 2005 00:31:02 -0000 1.9 @@ -127,15 +127,6 @@ mtspr SPRN_DER,r4 #endif -#ifdef CONFIG_REDWOOD_4 - /* All of this Redwood 4 stuff will soon disappear when the - * boot rom is straightened out. - */ - mr r29, r3 /* Easier than changing the other code */ - bl HdwInit - mr r3, r29 -#endif - #if defined(CONFIG_MBX) || defined(CONFIG_RPX8260) || defined(CONFIG_PPC_PREP) mr r4,r29 /* put the board info pointer where the relocate * routine will find it Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/boot/simple/Makefile,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- Makefile 29 Aug 2005 19:50:20 -0000 1.13 +++ Makefile 31 Oct 2005 00:31:02 -0000 1.14 @@ -96,10 +96,6 @@ zimageinitrd-$(CONFIG_GEMINI) := zImage.initrd-STRIPELF end-$(CONFIG_GEMINI) := gemini - extra.o-$(CONFIG_K2) := prepmap.o - end-$(CONFIG_K2) := k2 - cacheflag-$(CONFIG_K2) := -include $(clear_L2_L3) - extra.o-$(CONFIG_KATANA) := misc-katana.o end-$(CONFIG_KATANA) := katana cacheflag-$(CONFIG_KATANA) := -include $(clear_L2_L3) @@ -108,12 +104,15 @@ end-$(CONFIG_RADSTONE_PPC7D) := radstone_ppc7d cacheflag-$(CONFIG_RADSTONE_PPC7D) := -include $(clear_L2_L3) + extra.o-$(CONFIG_EV64360) := misc-ev64360.o + end-$(CONFIG_EV64360) := ev64360 + cacheflag-$(CONFIG_EV64360) := -include $(clear_L2_L3) + # kconfig 'feature', only one of these will ever be 'y' at a time. # The rest will be unset. -motorola := $(CONFIG_MCPN765)$(CONFIG_MVME5100)$(CONFIG_PRPMC750) \ +motorola := $(CONFIG_MVME5100)$(CONFIG_PRPMC750) \ $(CONFIG_PRPMC800)$(CONFIG_LOPEC)$(CONFIG_PPLUS) motorola := $(strip $(motorola)) -pcore := $(CONFIG_PCORE)$(CONFIG_POWERPMC250) zimage-$(motorola) := zImage-PPLUS zimageinitrd-$(motorola) := zImage.initrd-PPLUS @@ -123,12 +122,6 @@ extra.o-$(CONFIG_PPLUS) := prepmap.o extra.o-$(CONFIG_LOPEC) := mpc10x_memory.o - zimage-$(pcore) := zImage-STRIPELF -zimageinitrd-$(pcore) := zImage.initrd-STRIPELF - extra.o-$(pcore) := chrpmap.o - end-$(pcore) := pcore - cacheflag-$(pcore) := -include $(clear_L2_L3) - # Really only valid if CONFIG_6xx=y zimage-$(CONFIG_PPC_PREP) := zImage-PPLUS zimageinitrd-$(CONFIG_PPC_PREP) := zImage.initrd-PPLUS @@ -161,8 +154,6 @@ # This is a treeboot that needs init functions until the # boot rom is sorted out (i.e. this is short lived) -extra-aflags-$(CONFIG_REDWOOD_4) := -Wa,-m405 -extra.o-$(CONFIG_REDWOOD_4) := rw4/rw4_init.o rw4/rw4_init_brd.o EXTRA_AFLAGS := $(extra-aflags-y) # head.o needs to get the cacheflags defined. AFLAGS_head.o += $(cacheflag-y) Index: embed_config.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/boot/simple/embed_config.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- embed_config.c 23 Jun 2005 20:02:15 -0000 1.8 +++ embed_config.c 31 Oct 2005 00:31:02 -0000 1.9 @@ -787,28 +787,12 @@ #ifdef CONFIG_IBM_OPENBIOS /* This could possibly work for all treeboot roms. */ -#if defined(CONFIG_ASH) || defined(CONFIG_BEECH) || defined(CONFIG_BUBINGA) +#if defined(CONFIG_BUBINGA) #define BOARD_INFO_VECTOR 0xFFF80B50 /* openbios 1.19 moved this vector down - armin */ #else #define BOARD_INFO_VECTOR 0xFFFE0B50 #endif -#ifdef CONFIG_BEECH -static void -get_board_info(bd_t **bdp) -{ - typedef void (*PFV)(bd_t *bd); - ((PFV)(*(unsigned long *)BOARD_INFO_VECTOR))(*bdp); - return; -} - -void -embed_config(bd_t **bdp) -{ - *bdp = &bdinfo; - get_board_info(bdp); -} -#else /* !CONFIG_BEECH */ void embed_config(bd_t **bdp) { @@ -863,7 +847,6 @@ #endif timebase_period_ns = 1000000000 / bd->bi_tbfreq; } -#endif /* CONFIG_BEECH */ #endif /* CONFIG_IBM_OPENBIOS */ #ifdef CONFIG_EP405 @@ -947,41 +930,6 @@ } #endif -#ifdef CONFIG_RAINIER -/* Rainier uses vxworks bootrom */ -void -embed_config(bd_t **bdp) -{ - u_char *cp; - int i; - bd_t *bd; - - bd = &bdinfo; - *bdp = bd; - - for(i=0;i<8192;i+=32) { - __asm__("dccci 0,%0" :: "r" (i)); - } - __asm__("iccci 0,0"); - __asm__("sync;isync"); - - /* init ram for parity */ - memset(0, 0,0x400000); /* Lo memory */ - - - bd->bi_memsize = (32 * 1024 * 1024) ; - bd->bi_intfreq = 133000000; //the internal clock is 133 MHz - bd->bi_busfreq = 100000000; - bd->bi_pci_busfreq= 33000000; - - cp = (u_char *)def_enet_addr; - for (i=0; i<6; i++) { - bd->bi_enetaddr[i] = *cp++; - } - -} -#endif - #ifdef CONFIG_GAMECUBE /* * We're the only 7xx board without a rom monitor, yet. This |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/drivers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/drivers Modified Files: Makefile Log Message: Merge 2.6.14 Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/Makefile,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- Makefile 29 Aug 2005 19:50:20 -0000 1.11 +++ Makefile 31 Oct 2005 00:31:02 -0000 1.12 @@ -8,7 +8,7 @@ obj-$(CONFIG_PCI) += pci/ obj-$(CONFIG_PARISC) += parisc/ obj-y += video/ -obj-$(CONFIG_ACPI_BOOT) += acpi/ +obj-$(CONFIG_ACPI) += acpi/ # PnP must come after ACPI since it will eventually need to check if acpi # was used and do nothing if so obj-$(CONFIG_PNP) += pnp/ @@ -17,6 +17,8 @@ # default. obj-y += char/ +obj-$(CONFIG_CONNECTOR) += connector/ + # i810fb and intelfb depend on char/agp/ obj-$(CONFIG_FB_I810) += video/i810/ obj-$(CONFIG_FB_INTEL) += video/intelfb/ @@ -26,7 +28,7 @@ obj-$(CONFIG_SERIO) += input/serio/ obj-y += serial/ obj-$(CONFIG_PARPORT) += parport/ -obj-y += base/ block/ misc/ net/ media/ +obj-y += base/ block/ misc/ mfd/ net/ media/ obj-$(CONFIG_NUBUS) += nubus/ obj-$(CONFIG_ATM) += atm/ obj-$(CONFIG_PPC_PMAC) += macintosh/ |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/arch/ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/arch/ppc Modified Files: Kconfig Log Message: Merge 2.6.14 Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/Kconfig,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- Kconfig 30 Aug 2005 16:51:53 -0000 1.32 +++ Kconfig 31 Oct 2005 00:31:01 -0000 1.33 @@ -26,10 +26,6 @@ bool default y -config HAVE_DEC_LOCK - bool - default y - config PPC bool default y @@ -47,6 +43,10 @@ bool default y +config ARCH_MAY_HAVE_PC_FDC + bool + default y + source "init/Kconfig" menu "Processor" @@ -261,6 +261,15 @@ If in doubt, say Y here. +config HOTPLUG_CPU + bool "Support for enabling/disabling CPUs" + depends on SMP && HOTPLUG && EXPERIMENTAL && PPC_PMAC + ---help--- + Say Y here to be able to disable and re-enable individual + CPUs at runtime on SMP machines. + + Say N if you are unsure. + source arch/ppc/platforms/4xx/Kconfig source arch/ppc/platforms/85xx/Kconfig @@ -334,14 +343,6 @@ End of life: end 2000 ? URL: see TQM850L - SPD823TS: - MPC823 based board used in the "Tele Server" product - Manufacturer: Speech Design, <http://www.speech-design.de/> - Date of Release: Mid 2000 (?) - End of life: - - URL: <http://www.speech-design.de/> - select "English", then "Teleteam Solutions", then "TeleServer" - IVMS8: MPC860 based board used in the "Integrated Voice Mail System", Small Version (8 voice channels) @@ -358,13 +359,6 @@ End of life: - URL: <http://www.speech-design.de/> - SM850: - Service Module (based on TQM850L) - Manufacturer: Dependable Computer Systems, <http://www.decomsys.com/> - Date of Release: end 2000 (?) - End of life: mid 2001 (?) - URL: <http://www.tz-mikroelektronik.de/ServiceModule/index.html> - HERMES: Hermes-Pro ISDN/LAN router with integrated 8 x hub Manufacturer: Multidata Gesellschaft fur Datentechnik und Informatik @@ -468,13 +462,6 @@ config FPS850L bool "FPS850L" -config SPD823TS - bool "SPD823TS" - help - Say Y here to support the Speech Design 823 Tele-Server from Speech - Design, released in 2000. The manufacturer's website is at - <http://www.speech-design.de/>. - config IVMS8 bool "IVMS8" help @@ -489,14 +476,6 @@ from Speech Design, released March 2001. The manufacturer's website is at <http://www.speech-design.de/>. -config SM850 - bool "SM850" - help - Say Y here to support the Service Module 850 from Dependable - Computer Systems, an SBC based on the TQM850L module by TQ - Components. This board is no longer in production. The - manufacturer's website is at <http://www.decomsys.com/>. - config HERMES_PRO bool "HERMES" @@ -582,9 +561,6 @@ help Select CPCI690 if configuring a Force CPCI690 cPCI board. -config PCORE - bool "Force-PowerCore" - config POWERPMC250 bool "Force-PowerPMC250" @@ -617,9 +593,6 @@ config LOPEC bool "Motorola-LoPEC" -config MCPN765 - bool "Motorola-MCPN765" - config MVME5100 bool "Motorola-MVME5100" @@ -647,12 +620,6 @@ config RADSTONE_PPC7D bool "Radstone Technology PPC7D board" -config ADIR - bool "SBS-Adirondack" - -config K2 - bool "SBS-K2" - config PAL4 bool "SBS-Palomar4" @@ -723,6 +690,16 @@ help This option enables support for the MPC 834x SYS evaluation board. + Be aware that PCI buses can only function when SYS board is plugged + into the PIB (Platform IO Board) board from Freescale which provide + 3 PCI slots. The PIBs PCI initialization is the bootloader's + responsiblilty. + +config EV64360 + bool "Marvell-EV64360BP" + help + Select EV64360 if configuring a Marvell EV64360BP Evaluation + platform. endchoice config PQ2ADS @@ -752,7 +729,7 @@ config TQM8xxL bool - depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L || SM850) + depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L) default y config EMBEDDEDBOOT @@ -826,15 +803,15 @@ config PPC_GEN550 bool - depends on SANDPOINT || MCPN765 || SPRUCE || PPLUS || PCORE || \ - PRPMC750 || K2 || PRPMC800 || LOPEC || \ + depends on SANDPOINT || SPRUCE || PPLUS || \ + PRPMC750 || PRPMC800 || LOPEC || \ (EV64260 && !SERIAL_MPSC) || CHESTNUT || RADSTONE_PPC7D || \ 83xx default y config FORCE bool - depends on 6xx && (PCORE || POWERPMC250) + depends on 6xx && POWERPMC250 default y config GT64260 @@ -844,7 +821,7 @@ config MV64360 # Really MV64360 & MV64460 bool - depends on CHESTNUT || KATANA || RADSTONE_PPC7D || HDPU + depends on CHESTNUT || KATANA || RADSTONE_PPC7D || HDPU || EV64360 default y config MV64X60 @@ -897,7 +874,7 @@ config MPC10X_BRIDGE bool - depends on PCORE || POWERPMC250 || LOPEC || SANDPOINT + depends on POWERPMC250 || LOPEC || SANDPOINT default y config MPC10X_OPENPIC @@ -916,10 +893,6 @@ If this option is enabled then the MPC824x processor will run in DUART mode instead of UART mode. -config CPC710_DATA_GATHERING - bool "Enable CPC710 data gathering" - depends on K2 - config HARRIER_STORE_GATHERING bool "Enable Harrier store gathering" depends on HARRIER @@ -1224,6 +1197,11 @@ bool default PCI +config MPC83xx_PCI2 + bool " Supprt for 2nd PCI host controller" + depends on PCI && MPC834x + default y if MPC834x_SYS + config PCI_QSPAN bool "QSpan PCI" depends on !4xx && !CPM2 && 8xx |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/drivers/video Modified Files: Kconfig Makefile Log Message: Merge 2.6.14 Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/Makefile,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- Makefile 29 Aug 2005 19:50:20 -0000 1.15 +++ Makefile 31 Oct 2005 00:31:02 -0000 1.16 @@ -9,7 +9,8 @@ obj-$(CONFIG_SYSFS) += backlight/ obj-$(CONFIG_FB) += fb.o -fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o modedb.o +fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \ + modedb.o fbcvt.o fb-objs := $(fb-y) obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o @@ -50,7 +51,8 @@ obj-$(CONFIG_FB_IMSTT) += imsttfb.o obj-$(CONFIG_FB_S3TRIO) += S3triofb.o obj-$(CONFIG_FB_FM2) += fm2fb.o -obj-$(CONFIG_FB_TRIDENT) += tridentfb.o +obj-$(CONFIG_FB_CYBLA) += cyblafb.o +obj-$(CONFIG_FB_TRIDENT) += tridentfb.o obj-$(CONFIG_FB_STI) += stifb.o obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o @@ -92,6 +94,7 @@ obj-$(CONFIG_FB_TX3912) += tx3912fb.o obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o obj-$(CONFIG_FB_IMX) += imxfb.o +obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o obj-$(CONFIG_FB_GAMECUBE) += gcnfb.o gcngx.o # Platform or fallback drivers go here Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/Kconfig,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Kconfig 29 Aug 2005 19:50:20 -0000 1.14 +++ Kconfig 31 Oct 2005 00:31:02 -0000 1.15 @@ -681,7 +681,6 @@ select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT - select FB_SOFT_CURSOR help This driver supports graphics boards with the nVidia Riva/Geforce chips. @@ -720,7 +719,6 @@ select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT - select FB_SOFT_CURSOR help This driver supports the on-board graphics built in to the Intel 810 and 815 chipsets. Say Y if you have and plan to use such a board. @@ -754,6 +752,13 @@ If unsure, say N. +config FB_I810_I2C + bool "Enable DDC Support" + depends on FB_I810 && FB_I810_GTF + select I2C + select I2C_ALGOBIT + help + config FB_INTEL tristate "Intel 830M/845G/852GM/855GM/865G support (EXPERIMENTAL)" depends on FB && EXPERIMENTAL && PCI && X86 && !X86_64 @@ -960,8 +965,7 @@ can be build either as modules or built-in. There is a product page at - <http://www.ati.com/na/pages/products/pc/radeon32/index.html>. - + http://apps.ati.com/ATIcompare/ config FB_RADEON_I2C bool "DDC/I2C for ATI Radeon support" depends on FB_RADEON @@ -1084,15 +1088,16 @@ choose N here. config FB_SIS - tristate "SiS acceleration" + tristate "SiS/XGI display support" depends on FB && PCI select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT select FB_SOFT_CURSOR help - This is the frame buffer device driver for the SiS 300, 315 and - 330 series VGA chipsets. Specs available at <http://www.sis.com> + This is the frame buffer device driver for the SiS 300, 315, 330 + and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets. + Specs available at <http://www.sis.com> and <http://www.xgitech.com>. To compile this driver as a module, choose M here; the module will be called sisfb. @@ -1104,11 +1109,12 @@ Say Y here to support use of the SiS 300/305, 540, 630 and 730. config FB_SIS_315 - bool "SiS 315/330 series support" + bool "SiS 315/330/340 series and XGI support" depends on FB_SIS help - Say Y here to support use of the SiS 315 and 330 series - (315/H/PRO, 55x, 650, 651, 740, 330, 661, 741, 760). + Say Y here to support use of the SiS 315, 330 and 340 series + (315/H/PRO, 55x, 650, 651, 740, 330, 661, 741, 760, 761) as well + as XGI V3XT, V5, V8 and Z7. config FB_NEOMAGIC tristate "NeoMagic display support" @@ -1180,6 +1186,32 @@ Please read the <file:Documentation/fb/README-sstfb.txt> for supported options and other important info support. +config FB_CYBLA + tristate "Cyberblade/i1 support" + depends on FB && PCI + select FB_CFB_IMAGEBLIT + select FB_SOFT_CURSOR + select VIDEO_SELECT + ---help--- + This driver is supposed to support the Trident Cyberblade/i1 + graphics core integrated in the VIA VT8601A North Bridge, + also known as VIA Apollo PLE133. + + Status: + - Developed, tested and working on EPIA 5000 and EPIA 800. + - Does work reliable on all systems with CRT/LCD connected to + normal VGA ports. + - Should work on systems that do use the internal LCD port, but + this is absolutely not tested. + + Character imageblit, copyarea and rectangle fill are hw accelerated, + ypan scrolling is used by default. + + Please do read <file:Documentation/fb/cyblafb/*>. + + To compile this driver as a module, choose M here: the + module will be called cyblafb. + config FB_TRIDENT tristate "Trident support" depends on FB && PCI @@ -1193,8 +1225,12 @@ but also on some motherboards. For more information, read <file:Documentation/fb/tridentfb.txt> + Cyberblade/i1 support will be removed soon, use the cyblafb driver + instead. + Say Y if you have such a graphics board. + To compile this driver as a module, choose M here: the module will be called tridentfb. @@ -1205,7 +1241,6 @@ This will compile the Trident frame buffer device with acceleration functions. - config FB_PM3 tristate "Permedia3 support" depends on FB && PCI && BROKEN @@ -1494,6 +1529,30 @@ working with S1D13806). Product specs at <http://www.erd.epson.com/vdc/html/legacy_13xxx.htm> +config FB_S3C2410 + tristate "S3C2410 LCD framebuffer support" + depends on FB && ARCH_S3C2410 + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_SOFT_CURSOR + ---help--- + Frame buffer driver for the built-in LCD controller in the Samsung + S3C2410 processor. + + 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 s3c2410fb. If you want to compile it as a module, + say M here and read <file:Documentation/modules.txt>. + + If unsure, say N. +config FB_S3C2410_DEBUG + bool "S3C2410 lcd debug messages" + depends on FB_S3C2410 + help + Turn on debugging messages. Note that you can set/unset at run time + through sysfs + config FB_VIRTUAL tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)" depends on FB |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/drivers/block Modified Files: Kconfig Log Message: Merge 2.6.14 Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/Kconfig,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- Kconfig 14 Sep 2005 19:52:47 -0000 1.18 +++ Kconfig 31 Oct 2005 00:31:02 -0000 1.19 @@ -6,7 +6,7 @@ config BLK_DEV_FD tristate "Normal floppy disk support" - depends on (!ARCH_S390 && !M68K && !IA64 && !UML && !ARM) || Q40 || (SUN3X && BROKEN) || ARCH_RPC || ARCH_EBSA285 + depends on ARCH_MAY_HAVE_PC_FDC ---help--- If you want to use the floppy disk drive(s) of your PC under Linux, say Y. Information about this driver, especially important for IBM @@ -470,54 +470,12 @@ "real" root file system, etc. See <file:Documentation/initrd.txt> for details. -config INITRAMFS_SOURCE - string "Initramfs source file(s)" - default "" - help - This can be either a single cpio archive with a .cpio suffix or a - space-separated list of directories and files for building the - initramfs image. A cpio archive should contain a filesystem archive - to be used as an initramfs image. Directories should contain a - filesystem layout to be included in the initramfs image. Files - should contain entries according to the format described by the - "usr/gen_init_cpio" program in the kernel tree. - - When multiple directories and files are specified then the - initramfs image will be the aggregate of all of them. - - See <file:Documentation/early-userspace/README for more details. - - If you are not sure, leave it blank. - -config INITRAMFS_ROOT_UID - int "User ID to map to 0 (user root)" - depends on INITRAMFS_SOURCE!="" - default "0" - help - This setting is only meaningful if the INITRAMFS_SOURCE is - contains a directory. Setting this user ID (UID) to something - other than "0" will cause all files owned by that UID to be - owned by user root in the initial ramdisk image. - - If you are not sure, leave it set to "0". - -config INITRAMFS_ROOT_GID - int "Group ID to map to 0 (group root)" - depends on INITRAMFS_SOURCE!="" - default "0" - help - This setting is only meaningful if the INITRAMFS_SOURCE is - contains a directory. Setting this group ID (GID) to something - other than "0" will cause all files owned by that GID to be - owned by group root in the initial ramdisk image. - - If you are not sure, leave it set to "0". #XXX - it makes sense to enable this only for 32-bit subarch's, not for x86_64 #for instance. config LBD bool "Support for Large Block Devices" - depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH || UML + depends on X86 || (MIPS && 32BIT) || PPC32 || ARCH_S390_31 || SUPERH || UML help Say Y here if you want to attach large (bigger than 2TB) discs to your machine, or if you want to have a raid or loopback device |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:14
|
Update of /cvsroot/gc-linux/linux/include/linux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/include/linux Modified Files: fb.h Log Message: Merge 2.6.14 Index: fb.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/linux/fb.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- fb.h 29 Aug 2005 19:50:21 -0000 1.14 +++ fb.h 31 Oct 2005 00:31:02 -0000 1.15 @@ -110,6 +110,8 @@ #define FB_ACCEL_NV_20 44 /* nVidia Arch 20 */ #define FB_ACCEL_NV_30 45 /* nVidia Arch 30 */ #define FB_ACCEL_NV_40 46 /* nVidia Arch 40 */ +#define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari V3XT, V5, V8 */ +#define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */ #define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */ #define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */ #define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */ @@ -498,6 +500,9 @@ #define FB_EVENT_BLANK 0x08 /* Private modelist is to be replaced */ #define FB_EVENT_NEW_MODELIST 0x09 +/* The resolution of the passed in fb_info about to change and + all vc's should be changed */ +#define FB_EVENT_MODE_CHANGE_ALL 0x0A struct fb_event { struct fb_info *info; @@ -617,7 +622,7 @@ __u32 height; /* height of each tile in scanlines */ __u32 depth; /* color depth of each tile */ __u32 length; /* number of tiles in the map */ - __u8 *data; /* actual tile map: a bitmap array, packed + const __u8 *data; /* actual tile map: a bitmap array, packed to the nearest byte */ }; @@ -829,13 +834,29 @@ u32 height, u32 shift_high, u32 shift_low, u32 mod); extern void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height); extern void fb_set_suspend(struct fb_info *info, int state); -extern int fb_get_color_depth(struct fb_var_screeninfo *var); +extern int fb_get_color_depth(struct fb_var_screeninfo *var, + struct fb_fix_screeninfo *fix); extern int fb_get_options(char *name, char **option); extern int fb_new_modelist(struct fb_info *info); extern struct fb_info *registered_fb[FB_MAX]; extern int num_registered_fb; +static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, + u8 *src, u32 s_pitch, u32 height) +{ + int i, j; + + d_pitch -= s_pitch; + + for (i = height; i--; ) { + /* s_pitch is a few bytes at the most, memcpy is suboptimal */ + for (j = 0; j < s_pitch; j++) + *dst++ = *src++; + dst += d_pitch; + } +} + /* drivers/video/fbsysfs.c */ extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev); extern void framebuffer_release(struct fb_info *info); @@ -865,8 +886,11 @@ extern int fb_validate_mode(const struct fb_var_screeninfo *var, struct fb_info *info); extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var); -extern void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs); +extern const unsigned char *fb_firmware_edid(struct device *device); +extern void fb_edid_to_monspecs(unsigned char *edid, + struct fb_monspecs *specs); extern void fb_destroy_modedb(struct fb_videomode *modedb); +extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb); /* drivers/video/modedb.c */ #define VESA_MODEDB_SIZE 34 |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:13
|
Update of /cvsroot/gc-linux/linux/arch/ppc/configs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/arch/ppc/configs Modified Files: gamecube_defconfig Log Message: Merge 2.6.14 Index: gamecube_defconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/configs/gamecube_defconfig,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- gamecube_defconfig 29 Aug 2005 22:16:54 -0000 1.35 +++ gamecube_defconfig 31 Oct 2005 00:31:02 -0000 1.36 @@ -1,17 +1,17 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.13 -# Mon Aug 29 18:14:04 2005 +# Linux kernel version: 2.6.14 +# Sun Oct 30 08:36:15 2005 # CONFIG_MMU=y CONFIG_GENERIC_HARDIRQS=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y CONFIG_GENERIC_NVRAM=y CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y # # Code maturity level options @@ -25,6 +25,7 @@ # General setup # CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_POSIX_MQUEUE is not set @@ -34,6 +35,7 @@ # CONFIG_HOTPLUG is not set CONFIG_KOBJECT_UEVENT=y # CONFIG_IKCONFIG is not set +CONFIG_INITRAMFS_SOURCE="" # CONFIG_EMBEDDED is not set CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_EXTRA_PASS is not set @@ -90,14 +92,12 @@ # CONFIG_KATANA is not set # CONFIG_WILLOW is not set # CONFIG_CPCI690 is not set -# CONFIG_PCORE is not set # CONFIG_POWERPMC250 is not set # CONFIG_CHESTNUT is not set # CONFIG_SPRUCE is not set # CONFIG_HDPU is not set # CONFIG_EV64260 is not set # CONFIG_LOPEC is not set -# CONFIG_MCPN765 is not set # CONFIG_MVME5100 is not set # CONFIG_PPLUS is not set # CONFIG_PRPMC750 is not set @@ -105,8 +105,6 @@ # CONFIG_SANDPOINT is not set CONFIG_GAMECUBE=y # CONFIG_RADSTONE_PPC7D is not set -# CONFIG_ADIR is not set -# CONFIG_K2 is not set # CONFIG_PAL4 is not set # CONFIG_GEMINI is not set # CONFIG_EST8260 is not set @@ -118,6 +116,7 @@ # CONFIG_PQ2FADS is not set # CONFIG_LITE5200 is not set # CONFIG_MPC834x_SYS is not set +# CONFIG_EV64360 is not set # CONFIG_GAMECUBE_CONSOLE is not set CONFIG_GAMECUBE_RESET=y # CONFIG_SMP is not set @@ -135,11 +134,13 @@ # CONFIG_SPARSEMEM_MANUAL is not set CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set CONFIG_BINFMT_ELF=y CONFIG_BINFMT_MISC=m CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE="root=/dev/ram0 video=gamecubefb ip=192.168.000.047" # CONFIG_PM is not set +# CONFIG_SOFTWARE_SUSPEND is not set CONFIG_SECCOMP=y CONFIG_ISA_DMA_API=y @@ -203,14 +204,19 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_INET_TUNNEL is not set -CONFIG_IP_TCPDIAG=y -# CONFIG_IP_TCPDIAG_IPV6 is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y # CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_BIC=y # CONFIG_IPV6 is not set # CONFIG_NETFILTER is not set # +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# # SCTP Configuration (EXPERIMENTAL) # # CONFIG_IP_SCTP is not set @@ -236,6 +242,7 @@ # CONFIG_HAMRADIO is not set # CONFIG_IRDA is not set # CONFIG_BT is not set +# CONFIG_IEEE80211 is not set # # Device Drivers @@ -249,6 +256,11 @@ # CONFIG_FW_LOADER is not set # +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# # Memory Technology Devices (MTD) # # CONFIG_MTD is not set @@ -269,6 +281,7 @@ # CONFIG_GAMECUBE_DI is not set # CONFIG_GAMECUBE_DVD is not set CONFIG_GAMECUBE_ARAM=m +# CONFIG_GAMECUBE_SD is not set # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set @@ -277,7 +290,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" CONFIG_LBD=y # CONFIG_CDROM_PKTCDVD is not set @@ -298,6 +310,7 @@ # # SCSI device support # +# CONFIG_RAID_ATTRS is not set # CONFIG_SCSI is not set # @@ -332,6 +345,11 @@ # CONFIG_TUN is not set # +# PHY device support +# +# CONFIG_PHYLIB is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -463,7 +481,6 @@ # I2C support # # CONFIG_I2C is not set -# CONFIG_I2C_SENSOR is not set # # Dallas's 1-wire bus @@ -474,6 +491,7 @@ # Hardware Monitoring support # CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set # CONFIG_HWMON_DEBUG_CHIP is not set # @@ -483,6 +501,10 @@ # CONFIG_GAMECUBE_MI is not set # +# Multimedia Capabilities Port drivers +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -604,10 +626,6 @@ # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set # CONFIG_FS_POSIX_ACL is not set - -# -# XFS support -# # CONFIG_XFS_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_ROMFS_FS is not set @@ -616,6 +634,7 @@ CONFIG_DNOTIFY=y # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set # # CD-ROM/DVD Filesystems @@ -639,11 +658,10 @@ CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y CONFIG_SYSFS=y -# CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y -# CONFIG_TMPFS_XATTR is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y +# CONFIG_RELAYFS_FS is not set # # Miscellaneous filesystems @@ -672,6 +690,7 @@ # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set # # Partition Types @@ -727,6 +746,7 @@ # Library routines # # CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set CONFIG_CRC32=y # CONFIG_LIBCRC32C is not set |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:13
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/arch/ppc/platforms Modified Files: Makefile Log Message: Merge 2.6.14 Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/Makefile,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- Makefile 23 Jun 2005 23:16:23 -0000 1.19 +++ Makefile 31 Oct 2005 00:31:02 -0000 1.20 @@ -21,22 +21,17 @@ endif obj-$(CONFIG_PMAC_BACKLIGHT) += pmac_backlight.o obj-$(CONFIG_PREP_RESIDUAL) += residual.o -obj-$(CONFIG_ADIR) += adir_setup.o adir_pic.o adir_pci.o obj-$(CONFIG_PQ2ADS) += pq2ads.o obj-$(CONFIG_TQM8260) += tqm8260_setup.o obj-$(CONFIG_CPCI690) += cpci690.o obj-$(CONFIG_EV64260) += ev64260.o obj-$(CONFIG_CHESTNUT) += chestnut.o obj-$(CONFIG_GEMINI) += gemini_pci.o gemini_setup.o gemini_prom.o -obj-$(CONFIG_K2) += k2.o obj-$(CONFIG_LOPEC) += lopec.o obj-$(CONFIG_KATANA) += katana.o obj-$(CONFIG_HDPU) += hdpu.o -obj-$(CONFIG_MCPN765) += mcpn765.o -obj-$(CONFIG_MENF1) += menf1_setup.o menf1_pci.o obj-$(CONFIG_MVME5100) += mvme5100.o obj-$(CONFIG_PAL4) += pal4_setup.o pal4_pci.o -obj-$(CONFIG_PCORE) += pcore.o obj-$(CONFIG_POWERPMC250) += powerpmc250.o obj-$(CONFIG_PPLUS) += pplus.o obj-$(CONFIG_PRPMC750) += prpmc750.o @@ -46,6 +41,7 @@ obj-$(CONFIG_SBC82xx) += sbc82xx.o obj-$(CONFIG_SPRUCE) += spruce.o obj-$(CONFIG_LITE5200) += lite5200.o +obj-$(CONFIG_EV64360) += ev64360.o obj-$(CONFIG_GAMECUBE) += gamecube.o obj-$(CONFIG_GAMECUBE_RTC) += gcn-rtc.o obj-$(CONFIG_GAMECUBE_CONSOLE) += gcn-con.o |
From: Arthur O. <aot...@us...> - 2005-10-31 00:31:13
|
Update of /cvsroot/gc-linux/linux/arch/ppc/boot/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1118/arch/ppc/boot/common Modified Files: util.S Log Message: Merge 2.6.14 Index: util.S =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/boot/common/util.S,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- util.S 23 Jun 2005 20:02:14 -0000 1.7 +++ util.S 31 Oct 2005 00:31:01 -0000 1.8 @@ -279,7 +279,7 @@ 1: dcbf r0,r3 # Flush the data cache icbi r0,r3 # Invalidate the instruction cache addi r3,r3,0x10 # Increment by one cache line - cmplwi cr0,r3,r4 # Are we at the end yet? + cmplw cr0,r3,r4 # Are we at the end yet? blt 1b # No, keep flushing and invalidating #else /* Enable, invalidate and then disable the L1 icache/dcache. */ |
From: Arthur O. <aot...@us...> - 2005-10-10 22:12:25
|
Update of /cvsroot/gc-linux/linux/include/asm-ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7425/include/asm-ppc Modified Files: io.h Log Message: This is still stuck in patchwork.ozlabs.org. Until it makes it upstream, it may seek refuge here, since we're the only platform using it ATM: Subject: [PATCH] ppc32: Big-endian I/O memory accessors. I/O memory accessors. Big endian version. For those busses/devices that do export big-endian I/O memory. Of notable relevance/reference: http://lwn.net/Articles/132804/ http://ozlabs.org/pipermail/linuxppc-embedded/2005-August/019798.html http://ozlabs.org/pipermail/linuxppc-embedded/2005-August/019752.html Signed-off-by: Arthur Othieno <a.o...@bl...> Index: io.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/asm-ppc/io.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- io.h 10 Sep 2005 21:18:24 -0000 1.9 +++ io.h 10 Oct 2005 22:12:22 -0000 1.10 @@ -487,11 +487,21 @@ return readw(addr); } +static inline unsigned int ioread16be(void __iomem *addr) +{ + return in_be16(addr); +} + static inline unsigned int ioread32(void __iomem *addr) { return readl(addr); } +static inline unsigned int ioread32be(void __iomem *addr) +{ + return in_be32(addr); +} + static inline void iowrite8(u8 val, void __iomem *addr) { writeb(val, addr); @@ -502,11 +512,21 @@ writew(val, addr); } +static inline void iowrite16be(u16 val, void __iomem *addr) +{ + out_be16(addr, val); +} + static inline void iowrite32(u32 val, void __iomem *addr) { writel(val, addr); } +static inline void iowrite32be(u32 val, void __iomem *addr) +{ + out_be32(addr, val); +} + static inline void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) { _insb(addr, dst, count); |
From: Arthur O. <aot...@us...> - 2005-10-10 18:30:08
|
Update of /cvsroot/gc-linux/linux/arch/ppc/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7011 Removed Files: cputable.c Log Message: Merged upstream. --- cputable.c DELETED --- |
From: Albert H. <he...@us...> - 2005-10-09 14:52:01
|
Update of /cvsroot/gc-linux/linux/drivers/input/si In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31727/drivers/input/si Modified Files: gcn-si.c Log Message: The D-Pad up/down behaviour was wrong and different than the analog. Make it report negative values when going UP and positive when going DOWN, like other existing gamepads. Thanks to Stonebone for pointing this. Index: gcn-si.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/input/si/gcn-si.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gcn-si.c 6 Jul 2005 16:39:14 -0000 1.1 +++ gcn-si.c 9 Oct 2005 14:51:53 -0000 1.2 @@ -301,9 +301,9 @@ else input_report_abs(&port[portno].idev, ABS_HAT0X, 0); - if (raw[0] & PAD_UP) + if (raw[0] & PAD_DOWN) input_report_abs(&port[portno].idev, ABS_HAT0Y, 1); - else if (raw[0] & PAD_DOWN) + else if (raw[0] & PAD_UP) input_report_abs(&port[portno].idev, ABS_HAT0Y, -1); else input_report_abs(&port[portno].idev, ABS_HAT0Y, 0); |