Mercurial > ecos
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 |
| 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 |
