root/arch/mips/dec/tc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. tc_preadb
  2. tc_bus_get_info
  3. tc_device_get_irq

   1 /*
   2  *      TURBOchannel architecture calls.
   3  *
   4  *      Copyright (c) Harald Koerfgen, 1998
   5  *      Copyright (c) 2001, 2003, 2005, 2006  Maciej W. Rozycki
   6  *      Copyright (c) 2005  James Simmons
   7  *
   8  *      This file is subject to the terms and conditions of the GNU
   9  *      General Public License.  See the file "COPYING" in the main
  10  *      directory of this archive for more details.
  11  */
  12 #include <linux/compiler.h>
  13 #include <linux/errno.h>
  14 #include <linux/init.h>
  15 #include <linux/string.h>
  16 #include <linux/tc.h>
  17 #include <linux/types.h>
  18 
  19 #include <asm/addrspace.h>
  20 #include <asm/bootinfo.h>
  21 #include <asm/paccess.h>
  22 
  23 #include <asm/dec/interrupts.h>
  24 #include <asm/dec/prom.h>
  25 #include <asm/dec/system.h>
  26 
  27 /*
  28  * Protected read byte from TURBOchannel slot space.
  29  */
  30 int tc_preadb(u8 *valp, void __iomem *addr)
  31 {
  32         return get_dbe(*valp, (u8 *)addr);
  33 }
  34 
  35 /*
  36  * Get TURBOchannel bus information as specified by the spec, plus
  37  * the slot space base address and the number of slots.
  38  */
  39 int __init tc_bus_get_info(struct tc_bus *tbus)
  40 {
  41         if (!dec_tc_bus)
  42                 return -ENXIO;
  43 
  44         memcpy(&tbus->info, rex_gettcinfo(), sizeof(tbus->info));
  45         tbus->slot_base = CPHYSADDR((long)rex_slot_address(0));
  46 
  47         switch (mips_machtype) {
  48         case MACH_DS5000_200:
  49                 tbus->num_tcslots = 7;
  50                 break;
  51         case MACH_DS5000_2X0:
  52         case MACH_DS5900:
  53                 tbus->ext_slot_base = 0x20000000;
  54                 tbus->ext_slot_size = 0x20000000;
  55                 /* fall through */
  56         case MACH_DS5000_1XX:
  57                 tbus->num_tcslots = 3;
  58                 break;
  59         case MACH_DS5000_XX:
  60                 tbus->num_tcslots = 2;
  61         default:
  62                 break;
  63         }
  64         return 0;
  65 }
  66 
  67 /*
  68  * Get the IRQ for the specified slot.
  69  */
  70 void __init tc_device_get_irq(struct tc_dev *tdev)
  71 {
  72         switch (tdev->slot) {
  73         case 0:
  74                 tdev->interrupt = dec_interrupt[DEC_IRQ_TC0];
  75                 break;
  76         case 1:
  77                 tdev->interrupt = dec_interrupt[DEC_IRQ_TC1];
  78                 break;
  79         case 2:
  80                 tdev->interrupt = dec_interrupt[DEC_IRQ_TC2];
  81                 break;
  82         /*
  83          * Yuck! DS5000/200 onboard devices
  84          */
  85         case 5:
  86                 tdev->interrupt = dec_interrupt[DEC_IRQ_TC5];
  87                 break;
  88         case 6:
  89                 tdev->interrupt = dec_interrupt[DEC_IRQ_TC6];
  90                 break;
  91         default:
  92                 tdev->interrupt = -1;
  93                 break;
  94         }
  95 }

/* [<][>][^][v][top][bottom][index][help] */