Lines Matching defs:podule
39 * Podule probe and configuration routines
71 /* Array of podule structures, one per possible podule */
90 * Probe for the podule bus. Currently all this does is return 1 to
91 * indicate that the podule bus was found.
113 aprint_normal("podule at %s", name);
133 /* Return priority 0 or 1 for wildcarded podule */
138 /* Return higher priority if we match the specific podule */
150 dump_podule(podule_t *podule)
152 printf("podule%d: ", podule->podulenum);
153 printf("flags0=%02x ", podule->flags0);
154 printf("flags1=%02x ", podule->flags1);
155 printf("reserved=%02x ", podule->reserved);
156 printf("product=%02x ", podule->product);
157 printf("manufacturer=%02x ", podule->manufacturer);
158 printf("country=%02x ", podule->country);
159 printf("irq_addr=%08x ", podule->irq_addr);
160 printf("irq_mask=%02x ", podule->irq_mask);
161 printf("fiq_addr=%08x ", podule->fiq_addr);
162 printf("fiq_mask=%02x ", podule->fiq_mask);
163 printf("fast_base=%08x ", podule->fast_base);
164 printf("medium_base=%08x ", podule->medium_base);
165 printf("slow_base=%08x ", podule->slow_base);
166 printf("sync_base=%08x ", podule->sync_base);
167 printf("mod_base=%08x ", podule->mod_base);
168 printf("easi_base=%08x ", podule->easi_base);
169 printf("attached=%d ", podule->attached);
170 printf("slottype=%d ", podule->slottype);
171 printf("podulenum=%d ", podule->podulenum);
172 printf("description=%s ", podule->description);
178 podulechunkdirectory(podule_t *podule)
191 id = podule->read_rom(podule->sync_base, address);
192 size = podule->read_rom(podule->sync_base, address + 4);
193 size |= (podule->read_rom(podule->sync_base, address + 8) << 8);
194 size |= (podule->read_rom(podule->sync_base, address + 12) << 16);
196 addr = podule->read_rom(podule->sync_base, address + 16);
197 addr |= (podule->read_rom(podule->sync_base, address + 20) << 8);
198 addr |= (podule->read_rom(podule->sync_base, address + 24) << 16);
199 addr |= (podule->read_rom(podule->sync_base, address + 28) << 24);
204 podule->description[loop] =
205 podule->read_rom(podule->sync_base, (addr + loop)*4);
206 podule->description[loop + 1] = 0;
213 addr = podule->read_rom(podule->sync_base, address + 16);
214 addr |= (podule->read_rom(podule->sync_base, address + 20) << 8);
215 addr |= (podule->read_rom(podule->sync_base, address + 24) << 16);
216 addr |= (podule->read_rom(podule->sync_base, address + 28) << 24);
220 printf("%c", podule->read_rom(podule->sync_base, (addr + loop)*4));
232 poduleexamine(podule_t *podule, device_t dev, int slottype)
237 /* Test to see if the podule is present */
239 if ((podule->flags0 & 0x02) == 0x00) {
240 podule->slottype = slottype;
242 printf("netslot%d at %s : ", podule->podulenum - MAX_PODULES,
245 printf("podule%d at %s : ", podule->podulenum,
250 if (podule->flags0 & 0x80)
255 /* Is it a simple podule ? */
257 id = (podule->flags0 >> 3) & 0x0f;
262 if (podule->flags1 & PODULE_FLAGS_CD)
263 podulechunkdirectory(podule);
269 podule->manufacturer)
274 printf("man=%04x : ", podule->manufacturer);
282 if (pod_desc->product_id == podule->product)
288 podule->product);
291 printf("%s\n", podule->description);
309 podule_t *podule;
316 podule = &podules[loop];
317 podule->podulenum = loop;
318 podule->attached = 0;
319 podule->slottype = SLOT_NONE;
320 podule->interrupt = IRQ_PODULE;
321 podule->read_rom = poduleread;
322 podule->dma_channel = -1;
323 podule->dma_interrupt = -1;
324 podule->description[0] = 0;
330 podule->fast_base = FAST_PODULE_BASE + offset;
331 podule->medium_base = MEDIUM_PODULE_BASE + offset;
332 podule->slow_base = SLOW_PODULE_BASE + offset;
333 podule->sync_base = SYNC_PODULE_BASE + offset;
334 podule->mod_base = MOD_PODULE_BASE + offset;
335 podule->easi_base = EASI_BASE + loop * EASI_SIZE;
341 podule->fast_base = 0;
342 podule->medium_base = 0;
343 podule->slow_base = 0;
344 podule->sync_base = 0;
345 podule->mod_base = 0;
346 podule->easi_base = EASI_BASE + loop * EASI_SIZE;
353 podule->dma_channel = 2;
354 podule->dma_interrupt = IRQ_DMACH2;
357 podule->dma_channel = 3;
358 podule->dma_interrupt = IRQ_DMACH3;
363 /* Get information from the podule header */
365 podule->flags0 = address[0];
366 if ((podule->flags0 & 0x78) == 0) {
367 podule->flags1 = address[4];
368 podule->reserved = address[8];
369 podule->product = address[12] + (address[16] << 8);
370 podule->manufacturer = address[20] + (address[24] << 8);
371 podule->country = address[28];
372 if (podule->flags1 & PODULE_FLAGS_IS) {
373 podule->irq_addr = address[52] + (address[56] << 8) + (address[60] << 16);
374 podule->irq_addr += podule->slow_base;
375 podule->irq_mask = address[48];
376 if (podule->irq_mask == 0)
377 podule->irq_mask = 0x01;
378 podule->fiq_addr = address[36] + (address[40] << 8) + (address[44] << 16);
379 podule->fiq_addr += podule->slow_base;
380 podule->fiq_mask = address[32];
381 if (podule->fiq_mask == 0)
382 podule->fiq_mask = 0x04;
384 podule->irq_addr = podule->slow_base;
385 podule->irq_mask = 0x01;
386 podule->fiq_addr = podule->slow_base;
387 podule->fiq_mask = 0x04;
391 poduleexamine(podule, dev, SLOT_POD);
401 * information found in the podule headers.
468 snprintf(argstring, sizeof(argstring), "podule%d.disable", loop);
473 printf("podule%d: Disabled\n", loop);
478 snprintf(argstring, sizeof(argstring), "podule%d=", loop);
487 printf("podule%d: ID overridden man=%04x prod=%04x\n",
500 printf("podule%d: Disabled\n", loop);
523 * Match a podule structure with the specified parameters
532 panic("podulebus: Podule already attached");