linux-old/include/asm-ppc64/pci_dma.h
<<
>>
Prefs
   1/*
   2 * pci_dma.h
   3 * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen IBM Corporation
   4 * 
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 * 
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 * 
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  18 */
  19
  20#ifndef _PCI_DMA_H
  21#define _PCI_DMA_H
  22
  23#include <asm/types.h>
  24#include <linux/spinlock.h>
  25
  26/*
  27 * NUM_TCE_LEVELS defines the largest contiguous block
  28 * of dma (tce) space we can get.  NUM_TCE_LEVELS = 10 
  29 * allows up to 2**9 pages (512 * 4096) = 2 MB
  30 */
  31#define NUM_TCE_LEVELS 10
  32
  33#define NO_TCE ((dma_addr_t)-1)
  34
  35/*
  36 * Tces come in two formats, one for the virtual bus and a different
  37 * format for PCI
  38 */
  39#define TCE_VB  0
  40#define TCE_PCI 1
  41
  42union Tce {
  43        u64 wholeTce;
  44        struct {
  45                u64 cacheBits   :6;     /* Cache hash bits - not used */
  46                u64 rsvd        :6;
  47                u64 rpn         :40;    /* Absolute page number */
  48                u64 valid       :1;     /* Tce is valid (vb only) */
  49                u64 allIo       :1;     /* Tce is valid for all lps (vb only) */
  50                u64 lpIndex     :8;     /* LpIndex for user of TCE (vb only) */
  51                u64 pciWrite    :1;     /* Write allowed (pci only) */
  52                u64 readWrite   :1;     /* Read allowed (pci), Write allowed (vb) */
  53        } tceBits;
  54};
  55
  56struct Bitmap {
  57        unsigned long   numBits;
  58        unsigned long   numBytes;
  59        unsigned char * map;
  60};
  61
  62struct MultiLevelBitmap {
  63        unsigned long   maxLevel;
  64        struct Bitmap   level[NUM_TCE_LEVELS];
  65};
  66
  67struct TceTable {
  68        u64     busNumber;
  69        u64     size;
  70        u64     startOffset;
  71        u64     base;                   /* pSeries native only */
  72        u64     index;
  73        u64     tceType;
  74        spinlock_t lock;
  75        struct MultiLevelBitmap mlbm;
  76};
  77
  78struct TceTableManagerCB {
  79        u64     busNumber;              /* Bus number for this tce table */
  80        u64     start;                  /* Will be NULL for secondary */
  81        u64     totalSize;              /* Size (in pages) of whole table */
  82        u64     startOffset;            /* Index into real tce table of the
  83                                           start of our section */
  84        u64     size;                   /* Size (in pages) of our section */
  85        u64     index;                  /* Index of this tce table (token?) */
  86        u16     maxTceTableIndex;       /* Max num of tables for partition */
  87        u8      virtualBusFlag;         /* Flag to indicate virtual bus */
  88        u8      logicalSlot;            /* IOA Tce Slot Index */
  89        u8      rsvd[4];
  90};
  91
  92extern struct TceTable virtBusTceTable; /* Tce table for virtual bus */
  93
  94extern void create_tce_tables(void);
  95extern void create_pci_bus_tce_table(unsigned long);
  96
  97void tce_init_pSeries(void);
  98void tce_init_iSeries(void);
  99
 100#endif
 101
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.