OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-ppc64/] [pci_dma.h] - Blame information for rev 1275

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
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
 
42
union 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
 
56
struct Bitmap {
57
        unsigned long   numBits;
58
        unsigned long   numBytes;
59
        unsigned char * map;
60
};
61
 
62
struct MultiLevelBitmap {
63
        unsigned long   maxLevel;
64
        struct Bitmap   level[NUM_TCE_LEVELS];
65
};
66
 
67
struct 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
 
78
struct 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
 
92
extern struct TceTable virtBusTceTable; /* Tce table for virtual bus */
93
 
94
extern void create_tce_tables(void);
95
extern void create_pci_bus_tce_table(unsigned long);
96
 
97
void tce_init_pSeries(void);
98
void tce_init_iSeries(void);
99
 
100
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.