Commit 1790cf9111f61d360d861901b97eba4de3b5414c
Committed by
Matthew Wilcox
1 parent
b0eecc4da9
Exists in
master
and in
7 other branches
[PARISC] Create shared <asm/ropes.h> header
Pull out struct sba_device and struct lba_device into a common ropes.h header. Also fold the parisc portion of iosapic.h into this file. (Then delete the useless portion of iosapic.h) Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
Showing 5 changed files with 153 additions and 201 deletions Side-by-side Diff
drivers/parisc/iosapic.c
drivers/parisc/lba_pci.c
... | ... | @@ -46,9 +46,9 @@ |
46 | 46 | #include <asm/page.h> |
47 | 47 | #include <asm/system.h> |
48 | 48 | |
49 | +#include <asm/ropes.h> | |
49 | 50 | #include <asm/hardware.h> /* for register_parisc_driver() stuff */ |
50 | 51 | #include <asm/parisc-device.h> |
51 | -#include <asm/iosapic.h> /* for iosapic_register() */ | |
52 | 52 | #include <asm/io.h> /* read/write stuff */ |
53 | 53 | |
54 | 54 | #undef DEBUG_LBA /* general stuff */ |
... | ... | @@ -168,44 +168,6 @@ |
168 | 168 | /* non-postable I/O port space, densely packed */ |
169 | 169 | #define LBA_PORT_BASE (PCI_F_EXTEND | 0xfee00000UL) |
170 | 170 | static void __iomem *astro_iop_base __read_mostly; |
171 | - | |
172 | -#define ELROY_HVERS 0x782 | |
173 | -#define MERCURY_HVERS 0x783 | |
174 | -#define QUICKSILVER_HVERS 0x784 | |
175 | - | |
176 | -static inline int IS_ELROY(struct parisc_device *d) | |
177 | -{ | |
178 | - return (d->id.hversion == ELROY_HVERS); | |
179 | -} | |
180 | - | |
181 | -static inline int IS_MERCURY(struct parisc_device *d) | |
182 | -{ | |
183 | - return (d->id.hversion == MERCURY_HVERS); | |
184 | -} | |
185 | - | |
186 | -static inline int IS_QUICKSILVER(struct parisc_device *d) | |
187 | -{ | |
188 | - return (d->id.hversion == QUICKSILVER_HVERS); | |
189 | -} | |
190 | - | |
191 | - | |
192 | -/* | |
193 | -** lba_device: Per instance Elroy data structure | |
194 | -*/ | |
195 | -struct lba_device { | |
196 | - struct pci_hba_data hba; | |
197 | - | |
198 | - spinlock_t lba_lock; | |
199 | - void *iosapic_obj; | |
200 | - | |
201 | -#ifdef CONFIG_64BIT | |
202 | - void __iomem * iop_base; /* PA_VIEW - for IO port accessor funcs */ | |
203 | -#endif | |
204 | - | |
205 | - int flags; /* state/functionality enabled */ | |
206 | - int hw_rev; /* HW revision of chip */ | |
207 | -}; | |
208 | - | |
209 | 171 | |
210 | 172 | static u32 lba_t32; |
211 | 173 |
drivers/parisc/sba_iommu.c
... | ... | @@ -38,6 +38,7 @@ |
38 | 38 | #include <linux/proc_fs.h> |
39 | 39 | #include <linux/seq_file.h> |
40 | 40 | |
41 | +#include <asm/ropes.h> | |
41 | 42 | #include <asm/mckinley.h> /* for proc_mckinley_root */ |
42 | 43 | #include <asm/runway.h> /* for proc_runway_root */ |
43 | 44 | #include <asm/pdc.h> /* for PDC_MODEL_* */ |
... | ... | @@ -46,11 +47,6 @@ |
46 | 47 | |
47 | 48 | #define MODULE_NAME "SBA" |
48 | 49 | |
49 | -#ifdef CONFIG_PROC_FS | |
50 | -/* depends on proc fs support. But costs CPU performance */ | |
51 | -#undef SBA_COLLECT_STATS | |
52 | -#endif | |
53 | - | |
54 | 50 | /* |
55 | 51 | ** The number of debug flags is a clue - this code is fragile. |
56 | 52 | ** Don't even think about messing with it unless you have |
57 | 53 | |
58 | 54 | |
59 | 55 | |
... | ... | @@ -89,46 +85,13 @@ |
89 | 85 | #define DBG_RES(x...) |
90 | 86 | #endif |
91 | 87 | |
92 | -#if defined(CONFIG_64BIT) | |
93 | -/* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */ | |
94 | -#define ZX1_SUPPORT | |
95 | -#endif | |
96 | - | |
97 | 88 | #define SBA_INLINE __inline__ |
98 | 89 | |
99 | - | |
100 | -/* | |
101 | -** The number of pdir entries to "free" before issueing | |
102 | -** a read to PCOM register to flush out PCOM writes. | |
103 | -** Interacts with allocation granularity (ie 4 or 8 entries | |
104 | -** allocated and free'd/purged at a time might make this | |
105 | -** less interesting). | |
106 | -*/ | |
107 | -#define DELAYED_RESOURCE_CNT 16 | |
108 | - | |
109 | 90 | #define DEFAULT_DMA_HINT_REG 0 |
110 | 91 | |
111 | -#define ASTRO_RUNWAY_PORT 0x582 | |
112 | -#define IKE_MERCED_PORT 0x803 | |
113 | -#define REO_MERCED_PORT 0x804 | |
114 | -#define REOG_MERCED_PORT 0x805 | |
115 | -#define PLUTO_MCKINLEY_PORT 0x880 | |
116 | - | |
117 | 92 | #define SBA_FUNC_ID 0x0000 /* function id */ |
118 | 93 | #define SBA_FCLASS 0x0008 /* function class, bist, header, rev... */ |
119 | 94 | |
120 | -static inline int IS_ASTRO(struct parisc_device *d) { | |
121 | - return d->id.hversion == ASTRO_RUNWAY_PORT; | |
122 | -} | |
123 | - | |
124 | -static inline int IS_IKE(struct parisc_device *d) { | |
125 | - return d->id.hversion == IKE_MERCED_PORT; | |
126 | -} | |
127 | - | |
128 | -static inline int IS_PLUTO(struct parisc_device *d) { | |
129 | - return d->id.hversion == PLUTO_MCKINLEY_PORT; | |
130 | -} | |
131 | - | |
132 | 95 | #define SBA_FUNC_SIZE 4096 /* SBA configuration function reg set */ |
133 | 96 | |
134 | 97 | #define ASTRO_IOC_OFFSET (32 * SBA_FUNC_SIZE) |
135 | 98 | |
... | ... | @@ -145,11 +108,7 @@ |
145 | 108 | #define IOC_CTRL_D4 (1 << 11) /* Disable 4-byte coalescing */ |
146 | 109 | #define IOC_CTRL_DD (1 << 13) /* Disable distr. LMMIO range coalescing */ |
147 | 110 | |
148 | -#define MAX_IOC 2 /* per Ike. Pluto/Astro only have 1. */ | |
149 | 111 | |
150 | -#define ROPES_PER_IOC 8 /* per Ike half or Pluto/Astro */ | |
151 | - | |
152 | - | |
153 | 112 | /* |
154 | 113 | ** Offsets into MBIB (Function 0 on Ike and hopefully Astro) |
155 | 114 | ** Firmware programs this stuff. Don't touch it. |
156 | 115 | |
... | ... | @@ -196,10 +155,7 @@ |
196 | 155 | #define IOC_TCNFG 0x318 |
197 | 156 | #define IOC_PDIR_BASE 0x320 |
198 | 157 | |
199 | -/* AGP GART driver looks for this */ | |
200 | -#define SBA_IOMMU_COOKIE 0x0000badbadc0ffeeUL | |
201 | 158 | |
202 | - | |
203 | 159 | /* |
204 | 160 | ** IOC supports 4/8/16/64KB page sizes (see TCNFG register) |
205 | 161 | ** It's safer (avoid memory corruption) to keep DMA page mappings |
... | ... | @@ -227,69 +183,6 @@ |
227 | 183 | #define SBA_PERF_CNT1 0x200 |
228 | 184 | #define SBA_PERF_CNT2 0x208 |
229 | 185 | #define SBA_PERF_CNT3 0x210 |
230 | - | |
231 | - | |
232 | -struct ioc { | |
233 | - void __iomem *ioc_hpa; /* I/O MMU base address */ | |
234 | - char *res_map; /* resource map, bit == pdir entry */ | |
235 | - u64 *pdir_base; /* physical base address */ | |
236 | - unsigned long ibase; /* pdir IOV Space base - shared w/lba_pci */ | |
237 | - unsigned long imask; /* pdir IOV Space mask - shared w/lba_pci */ | |
238 | -#ifdef ZX1_SUPPORT | |
239 | - unsigned long iovp_mask; /* help convert IOVA to IOVP */ | |
240 | -#endif | |
241 | - unsigned long *res_hint; /* next avail IOVP - circular search */ | |
242 | - spinlock_t res_lock; | |
243 | - unsigned int res_bitshift; /* from the LEFT! */ | |
244 | - unsigned int res_size; /* size of resource map in bytes */ | |
245 | -#ifdef SBA_HINT_SUPPORT | |
246 | -/* FIXME : DMA HINTs not used */ | |
247 | - unsigned long hint_mask_pdir; /* bits used for DMA hints */ | |
248 | - unsigned int hint_shift_pdir; | |
249 | -#endif | |
250 | -#if DELAYED_RESOURCE_CNT > 0 | |
251 | - int saved_cnt; | |
252 | - struct sba_dma_pair { | |
253 | - dma_addr_t iova; | |
254 | - size_t size; | |
255 | - } saved[DELAYED_RESOURCE_CNT]; | |
256 | -#endif | |
257 | - | |
258 | -#ifdef SBA_COLLECT_STATS | |
259 | -#define SBA_SEARCH_SAMPLE 0x100 | |
260 | - unsigned long avg_search[SBA_SEARCH_SAMPLE]; | |
261 | - unsigned long avg_idx; /* current index into avg_search */ | |
262 | - unsigned long used_pages; | |
263 | - unsigned long msingle_calls; | |
264 | - unsigned long msingle_pages; | |
265 | - unsigned long msg_calls; | |
266 | - unsigned long msg_pages; | |
267 | - unsigned long usingle_calls; | |
268 | - unsigned long usingle_pages; | |
269 | - unsigned long usg_calls; | |
270 | - unsigned long usg_pages; | |
271 | -#endif | |
272 | - | |
273 | - /* STUFF We don't need in performance path */ | |
274 | - unsigned int pdir_size; /* in bytes, determined by IOV Space size */ | |
275 | -}; | |
276 | - | |
277 | -struct sba_device { | |
278 | - struct sba_device *next; /* list of SBA's in system */ | |
279 | - struct parisc_device *dev; /* dev found in bus walk */ | |
280 | - const char *name; | |
281 | - void __iomem *sba_hpa; /* base address */ | |
282 | - spinlock_t sba_lock; | |
283 | - unsigned int flags; /* state/functionality enabled */ | |
284 | - unsigned int hw_rev; /* HW revision of chip */ | |
285 | - | |
286 | - struct resource chip_resv; /* MMIO reserved for chip */ | |
287 | - struct resource iommu_resv; /* MMIO reserved for iommu */ | |
288 | - | |
289 | - unsigned int num_ioc; /* number of on-board IOC's */ | |
290 | - struct ioc ioc[MAX_IOC]; | |
291 | -}; | |
292 | - | |
293 | 186 | |
294 | 187 | static struct sba_device *sba_list; |
295 | 188 |
include/asm-parisc/iosapic.h
1 | -/* | |
2 | -** This file is private to iosapic driver. | |
3 | -** If stuff needs to be used by another driver, move it to a common file. | |
4 | -** | |
5 | -** WARNING: fields most data structures here are ordered to make sure | |
6 | -** they pack nicely for 64-bit compilation. (ie sizeof(long) == 8) | |
7 | -*/ | |
8 | - | |
9 | - | |
10 | -/* | |
11 | -** I/O SAPIC init function | |
12 | -** Caller knows where an I/O SAPIC is. LBA has an integrated I/O SAPIC. | |
13 | -** Call setup as part of per instance initialization. | |
14 | -** (ie *not* init_module() function unless only one is present.) | |
15 | -** fixup_irq is to initialize PCI IRQ line support and | |
16 | -** virtualize pcidev->irq value. To be called by pci_fixup_bus(). | |
17 | -*/ | |
18 | -extern void *iosapic_register(unsigned long hpa); | |
19 | -extern int iosapic_fixup_irq(void *obj, struct pci_dev *pcidev); | |
20 | - | |
21 | - | |
22 | -#ifdef __IA64__ | |
23 | -/* | |
24 | -** PA: PIB (Processor Interrupt Block) is handled by Runway bus adapter. | |
25 | -** and is hardcoded to 0xfeeNNNN0 where NNNN is id_eid field. | |
26 | -** | |
27 | -** IA64: PIB is handled by "Local SAPIC" (integrated in the processor). | |
28 | -*/ | |
29 | -struct local_sapic_info { | |
30 | - struct local_sapic_info *lsi_next; /* point to next CPU info */ | |
31 | - int *lsi_cpu_id; /* point to logical CPU id */ | |
32 | - unsigned long *lsi_id_eid; /* point to IA-64 CPU id */ | |
33 | - int *lsi_status; /* point to CPU status */ | |
34 | - void *lsi_private; /* point to special info */ | |
35 | -}; | |
36 | - | |
37 | -/* | |
38 | -** "root" data structure which ties everything together. | |
39 | -** Should always be able to start with sapic_root and locate | |
40 | -** the desired information. | |
41 | -*/ | |
42 | -struct sapic_info { | |
43 | - struct sapic_info *si_next; /* info is per cell */ | |
44 | - int si_cellid; /* cell id */ | |
45 | - unsigned int si_status; /* status */ | |
46 | - char *si_pib_base; /* intr blk base address */ | |
47 | - local_sapic_info_t *si_local_info; | |
48 | - io_sapic_info_t *si_io_info; | |
49 | - extint_info_t *si_extint_info;/* External Intr info */ | |
50 | -}; | |
51 | - | |
52 | -#endif /* IA64 */ |
include/asm-parisc/ropes.h
1 | +#ifndef _ASM_PARISC_ROPES_H_ | |
2 | +#define _ASM_PARISC_ROPES_H_ | |
3 | + | |
4 | +#ifdef CONFIG_64BIT | |
5 | +/* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */ | |
6 | +#define ZX1_SUPPORT | |
7 | +#endif | |
8 | + | |
9 | +#ifdef CONFIG_PROC_FS | |
10 | +/* depends on proc fs support. But costs CPU performance */ | |
11 | +#undef SBA_COLLECT_STATS | |
12 | +#endif | |
13 | + | |
14 | +/* | |
15 | +** The number of pdir entries to "free" before issueing | |
16 | +** a read to PCOM register to flush out PCOM writes. | |
17 | +** Interacts with allocation granularity (ie 4 or 8 entries | |
18 | +** allocated and free'd/purged at a time might make this | |
19 | +** less interesting). | |
20 | +*/ | |
21 | +#define DELAYED_RESOURCE_CNT 16 | |
22 | + | |
23 | +#define MAX_IOC 2 /* per Ike. Pluto/Astro only have 1. */ | |
24 | +#define ROPES_PER_IOC 8 /* per Ike half or Pluto/Astro */ | |
25 | + | |
26 | +struct ioc { | |
27 | + void __iomem *ioc_hpa; /* I/O MMU base address */ | |
28 | + char *res_map; /* resource map, bit == pdir entry */ | |
29 | + u64 *pdir_base; /* physical base address */ | |
30 | + unsigned long ibase; /* pdir IOV Space base - shared w/lba_pci */ | |
31 | + unsigned long imask; /* pdir IOV Space mask - shared w/lba_pci */ | |
32 | +#ifdef ZX1_SUPPORT | |
33 | + unsigned long iovp_mask; /* help convert IOVA to IOVP */ | |
34 | +#endif | |
35 | + unsigned long *res_hint; /* next avail IOVP - circular search */ | |
36 | + spinlock_t res_lock; | |
37 | + unsigned int res_bitshift; /* from the LEFT! */ | |
38 | + unsigned int res_size; /* size of resource map in bytes */ | |
39 | +#ifdef SBA_HINT_SUPPORT | |
40 | +/* FIXME : DMA HINTs not used */ | |
41 | + unsigned long hint_mask_pdir; /* bits used for DMA hints */ | |
42 | + unsigned int hint_shift_pdir; | |
43 | +#endif | |
44 | +#if DELAYED_RESOURCE_CNT > 0 | |
45 | + int saved_cnt; | |
46 | + struct sba_dma_pair { | |
47 | + dma_addr_t iova; | |
48 | + size_t size; | |
49 | + } saved[DELAYED_RESOURCE_CNT]; | |
50 | +#endif | |
51 | + | |
52 | +#ifdef SBA_COLLECT_STATS | |
53 | +#define SBA_SEARCH_SAMPLE 0x100 | |
54 | + unsigned long avg_search[SBA_SEARCH_SAMPLE]; | |
55 | + unsigned long avg_idx; /* current index into avg_search */ | |
56 | + unsigned long used_pages; | |
57 | + unsigned long msingle_calls; | |
58 | + unsigned long msingle_pages; | |
59 | + unsigned long msg_calls; | |
60 | + unsigned long msg_pages; | |
61 | + unsigned long usingle_calls; | |
62 | + unsigned long usingle_pages; | |
63 | + unsigned long usg_calls; | |
64 | + unsigned long usg_pages; | |
65 | +#endif | |
66 | + /* STUFF We don't need in performance path */ | |
67 | + unsigned int pdir_size; /* in bytes, determined by IOV Space size */ | |
68 | +}; | |
69 | + | |
70 | +struct sba_device { | |
71 | + struct sba_device *next; /* list of SBA's in system */ | |
72 | + struct parisc_device *dev; /* dev found in bus walk */ | |
73 | + const char *name; | |
74 | + void __iomem *sba_hpa; /* base address */ | |
75 | + spinlock_t sba_lock; | |
76 | + unsigned int flags; /* state/functionality enabled */ | |
77 | + unsigned int hw_rev; /* HW revision of chip */ | |
78 | + | |
79 | + struct resource chip_resv; /* MMIO reserved for chip */ | |
80 | + struct resource iommu_resv; /* MMIO reserved for iommu */ | |
81 | + | |
82 | + unsigned int num_ioc; /* number of on-board IOC's */ | |
83 | + struct ioc ioc[MAX_IOC]; | |
84 | +}; | |
85 | + | |
86 | +#define ASTRO_RUNWAY_PORT 0x582 | |
87 | +#define IKE_MERCED_PORT 0x803 | |
88 | +#define REO_MERCED_PORT 0x804 | |
89 | +#define REOG_MERCED_PORT 0x805 | |
90 | +#define PLUTO_MCKINLEY_PORT 0x880 | |
91 | + | |
92 | +static inline int IS_ASTRO(struct parisc_device *d) { | |
93 | + return d->id.hversion == ASTRO_RUNWAY_PORT; | |
94 | +} | |
95 | + | |
96 | +static inline int IS_IKE(struct parisc_device *d) { | |
97 | + return d->id.hversion == IKE_MERCED_PORT; | |
98 | +} | |
99 | + | |
100 | +static inline int IS_PLUTO(struct parisc_device *d) { | |
101 | + return d->id.hversion == PLUTO_MCKINLEY_PORT; | |
102 | +} | |
103 | + | |
104 | +#define SBA_IOMMU_COOKIE 0x0000badbadc0ffeeUL | |
105 | + | |
106 | +/* | |
107 | +** lba_device: Per instance Elroy data structure | |
108 | +*/ | |
109 | +struct lba_device { | |
110 | + struct pci_hba_data hba; | |
111 | + | |
112 | + spinlock_t lba_lock; | |
113 | + void *iosapic_obj; | |
114 | + | |
115 | +#ifdef CONFIG_64BIT | |
116 | + void __iomem *iop_base; /* PA_VIEW - for IO port accessor funcs */ | |
117 | +#endif | |
118 | + | |
119 | + int flags; /* state/functionality enabled */ | |
120 | + int hw_rev; /* HW revision of chip */ | |
121 | +}; | |
122 | + | |
123 | +#define ELROY_HVERS 0x782 | |
124 | +#define MERCURY_HVERS 0x783 | |
125 | +#define QUICKSILVER_HVERS 0x784 | |
126 | + | |
127 | +static inline int IS_ELROY(struct parisc_device *d) { | |
128 | + return (d->id.hversion == ELROY_HVERS); | |
129 | +} | |
130 | + | |
131 | +static inline int IS_MERCURY(struct parisc_device *d) { | |
132 | + return (d->id.hversion == MERCURY_HVERS); | |
133 | +} | |
134 | + | |
135 | +static inline int IS_QUICKSILVER(struct parisc_device *d) { | |
136 | + return (d->id.hversion == QUICKSILVER_HVERS); | |
137 | +} | |
138 | + | |
139 | +/* | |
140 | +** I/O SAPIC init function | |
141 | +** Caller knows where an I/O SAPIC is. LBA has an integrated I/O SAPIC. | |
142 | +** Call setup as part of per instance initialization. | |
143 | +** (ie *not* init_module() function unless only one is present.) | |
144 | +** fixup_irq is to initialize PCI IRQ line support and | |
145 | +** virtualize pcidev->irq value. To be called by pci_fixup_bus(). | |
146 | +*/ | |
147 | +extern void *iosapic_register(unsigned long hpa); | |
148 | +extern int iosapic_fixup_irq(void *obj, struct pci_dev *pcidev); | |
149 | + | |
150 | +#endif /*_ASM_PARISC_ROPES_H_*/ |