annotate packages/hal/mips/vrc437x/current/include/plf_io.h @ 3292:7f8e529b4d82 default tip

Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
author vae
date Wed, 29 Apr 2015 23:31:48 +0000
parents 74dbf4c3f2e1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
183
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_PLF_IO_H
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
2 #define CYGONCE_PLF_IO_H
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
3
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
4 //=============================================================================
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
5 //
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
6 // plf_io.h
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
7 //
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
8 // Platform specific IO support
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
9 //
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
10 //=============================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
11 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
12 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
13 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
15 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
16 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
17 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
18 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
19 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
20 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
21 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
22 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
23 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
24 // for more details.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
25 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
26 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
27 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
28 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
29 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
30 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
31 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
32 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
33 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
34 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
35 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
36 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
37 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
38 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
39 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
40 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
41 // ####ECOSGPLCOPYRIGHTEND####
183
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
42 //=============================================================================
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
43 //#####DESCRIPTIONBEGIN####
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
44 //
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
45 // Author(s): hmt, jskov, nickg
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
46 // Contributors: hmt, jskov, nickg
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
47 // Date: 1999-08-09
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
48 // Purpose: VRC4373 PCI IO support macros
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
49 // Description:
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
50 // Usage: #include <cyg/hal/plf_io.h>
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
51 //
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
52 // Note: Based on information in
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
53 // "VRC4373 System Controller Data Sheet"
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
54 //####DESCRIPTIONEND####
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
55 //
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
56 //=============================================================================
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
57
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
58 #include <pkgconf/hal.h>
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
59
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
60 #include <cyg/hal/hal_io.h> // IO macros
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
61 #include <cyg/hal/hal_intr.h> // Interrupt vectors
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
62
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
63 //-----------------------------------------------------------------------------
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
64 // PCI access registers
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
65
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
66 #define HAL_PCI_ADDRESS_WINDOW_1 0xAF000014
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
67 #define HAL_PCI_ADDRESS_WINDOW_2 0xAF000018
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
68 #define HAL_PCI_IO_WINDOW 0xAF000024
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
69 #define HAL_PCI_CONFIG_SPACE_DATA 0xAF000028
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
70 #define HAL_PCI_CONFIG_SPACE_ADDR 0xAF00002C
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
71 #define HAL_PCI_ENABLE_REG 0xAF000074
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
72
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
73 //-----------------------------------------------------------------------------
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
74 // Mappings for PCI memory and IO spaces
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
75
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
76 // This is where the PCI spaces are mapped in the CPU's (virtual)
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
77 // address space.
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 183
diff changeset
78 #define HAL_PCI_PHYSICAL_IO_BASE 0xA0000000
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 183
diff changeset
79 #define HAL_PCI_PHYSICAL_MEMORY_BASE 0xBC100000
183
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
80
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
81 //-----------------------------------------------------------------------------
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
82
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
83 // Initialize the PCI bus.
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 183
diff changeset
84 externC void cyg_hal_plf_pci_init(void);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 183
diff changeset
85 #define HAL_PCI_INIT() cyg_hal_plf_pci_init()
183
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
86
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
87 // Compute address necessary to access PCI config space for the given
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
88 // bus and device.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
89 #define HAL_PCI_CONFIG_ADDRESS( __bus, __devfn, __offset ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
90 ({ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
91 cyg_uint32 __addr; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
92 cyg_uint32 __dev = CYG_PCI_DEV_GET_DEV(__devfn); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
93 if (0 == __bus) { \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
94 __addr = (1 << (__dev+16)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
95 } else { \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
96 /* We need better info about how to form type 1 addresses */ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
97 __addr = 0x800000000 | (__bus << 16) | (__dev << 11); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
98 } \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
99 __addr |= CYG_PCI_DEV_GET_FN(__devfn) << 8; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
100 __addr |= (__offset)&~3; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
101 __addr; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
102 })
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
103
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
104 // The following function allows us to read locations in the PCI config
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
105 // space that we are not sure contains a valid device. Support in platform.S
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
106 // catches and fixes any bus errors caused.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
107 externC CYG_WORD32 hal_pci_config_read(CYG_ADDRESS addr);
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
108 #define HAL_PCI_CONFIG_READ( __addr, __val ) __val = hal_pci_config_read(__addr)
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
109
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
110 // Read a value from the PCI configuration space of the appropriate
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
111 // size at an address composed from the bus, devfn and offset.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
112 // We can only make 32 bit accesses to the PCI config data register, hence
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
113 // all the shifing and masking in these macros.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
114 // Note that we may only use HAL_PCI_CONFIG_READ() here.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
115 #define HAL_PCI_CFG_READ_UINT8( __bus, __devfn, __offset, __val ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
116 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
117 CYG_WORD32 _val_; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
118 CYG_WORD32 _offset_ = __offset & 3; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
119 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_ADDR, \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
120 HAL_PCI_CONFIG_ADDRESS(__bus, __devfn, __offset)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
121 HAL_PCI_CONFIG_READ(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
122 __val = (CYG_BYTE)((_val_>>(_offset_*8))&0xFF); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
123 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
124
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
125 #define HAL_PCI_CFG_READ_UINT16( __bus, __devfn, __offset, __val ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
126 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
127 CYG_WORD32 _val_; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
128 CYG_WORD32 _offset_ = __offset & 2; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
129 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_ADDR, \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
130 HAL_PCI_CONFIG_ADDRESS(__bus, __devfn, __offset)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
131 HAL_PCI_CONFIG_READ(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
132 __val = (CYG_WORD16)((_val_>>(_offset_*8))&0xFFFF); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
133 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
134
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
135 #define HAL_PCI_CFG_READ_UINT32( __bus, __devfn, __offset, __val ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
136 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
137 CYG_WORD32 _val_; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
138 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_ADDR, \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
139 HAL_PCI_CONFIG_ADDRESS(__bus, __devfn, __offset)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
140 HAL_PCI_CONFIG_READ(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
141 __val = (CYG_WORD32)_val_; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
142 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
143
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
144 // Write a value to the PCI configuration space of the appropriate
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
145 // size at an address composed from the bus, devfn and offset.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
146 // We can only make 32 bit accesses to the PCI config data register, hence
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
147 // all the shifing and masking in these macros.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
148 // Note that we do not need to use HAL_PCI_CONFIG_READ() here since we
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
149 // should not be writing to config space locations that we do not already
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
150 // know are valid.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
151 #define HAL_PCI_CFG_WRITE_UINT8( __bus, __devfn, __offset, __val ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
152 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
153 CYG_WORD32 _val_; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
154 CYG_WORD32 _offset_ = __offset & 3; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
155 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_ADDR, \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
156 HAL_PCI_CONFIG_ADDRESS(__bus, __devfn, __offset)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
157 HAL_READ_UINT32(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
158 _val_ &= ~(0xFF<<(_offset_*8)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
159 _val_ |= (__val)<<(_offset_*8); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
160 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
161 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
162
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
163 #define HAL_PCI_CFG_WRITE_UINT16( __bus, __devfn, __offset, __val ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
164 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
165 CYG_WORD32 _val_; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
166 CYG_WORD32 _offset_ = __offset & 2; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
167 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_ADDR, \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
168 HAL_PCI_CONFIG_ADDRESS(__bus, __devfn, __offset)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
169 HAL_READ_UINT32(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
170 _val_ &= ~(0xFFFF<<(_offset_*8)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
171 _val_ |= (__val)<<(_offset_*8); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
172 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_DATA, _val_); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
173 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
174
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
175 #define HAL_PCI_CFG_WRITE_UINT32( __bus, __devfn, __offset, __val ) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
176 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
177 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_ADDR, \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
178 HAL_PCI_CONFIG_ADDRESS(__bus, __devfn, __offset)); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
179 HAL_WRITE_UINT32(HAL_PCI_CONFIG_SPACE_DATA, __val); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
180 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
181
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
182
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
183 //-----------------------------------------------------------------------------
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
184 // Resources
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
185
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
186 // Map PCI device resources starting from these addresses in PCI space.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
187 #define HAL_PCI_ALLOC_BASE_MEMORY 0
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 183
diff changeset
188 #define HAL_PCI_ALLOC_BASE_IO 0x0c000000
183
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
189
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
190 // Translate the PCI interrupt requested by the device (INTA#, INTB#,
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
191 // INTC# or INTD#) to the associated CPU interrupt (i.e., HAL vector).
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
192 // We don't actually know what the mappings are at present for this
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
193 // board. The following is therefore just a temporary guess until
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
194 // we can find out.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
195
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
196 #define HAL_PCI_TRANSLATE_INTERRUPT( __bus, __devfn, __vec, __valid) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
197 CYG_MACRO_START \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
198 cyg_uint8 __req; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
199 HAL_PCI_CFG_READ_UINT8(__bus, __devfn, CYG_PCI_CFG_INT_PIN, __req); \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
200 if (0 != __req) { \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
201 CYG_ADDRWORD __translation[4] = { \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
202 CYGNUM_HAL_INTERRUPT_PCI_INTA, /* INTA# */ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
203 CYGNUM_HAL_INTERRUPT_PCI_INTB, /* INTB# */ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
204 CYGNUM_HAL_INTERRUPT_PCI_INTC, /* INTC# */ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
205 CYGNUM_HAL_INTERRUPT_PCI_INTD };/* INTD# */ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
206 \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
207 __vec = __translation[(((__req-1)+CYG_PCI_DEV_GET_DEV(__devfn))&3)]; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
208 \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
209 __valid = true; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
210 } else { \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
211 /* Device will not generate interrupt requests. */ \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
212 __valid = false; \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
213 } \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
214 CYG_MACRO_END
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
215
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
216 // Ignore all devices on not on bus 0 since those all seem to map to the
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
217 // Nile II controller itself.
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
218 #define HAL_PCI_IGNORE_DEVICE(__bus, __dev, __fn) \
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
219 ((__bus) != 0)
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
220
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
221 //-----------------------------------------------------------------------------
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
222 // end of plf_io.h
9160a8005d76 Merge from eCos master repository on 2001-09-12-03:52:30-BST
jlarmour
parents:
diff changeset
223 #endif // CYGONCE_PLF_IO_H