1*9ae4f82bSskrll /* $NetBSD: podulebus_machdep.h,v 1.5 2012/05/10 10:27:10 skrll Exp $ */ 27d4a1addSreinoud 37d4a1addSreinoud /* 47d4a1addSreinoud * Copyright (c) 1995 Mark Brinicombe. 57d4a1addSreinoud * Copyright (c) 1995 Brini. 67d4a1addSreinoud * All rights reserved. 77d4a1addSreinoud * 87d4a1addSreinoud * Redistribution and use in source and binary forms, with or without 97d4a1addSreinoud * modification, are permitted provided that the following conditions 107d4a1addSreinoud * are met: 117d4a1addSreinoud * 1. Redistributions of source code must retain the above copyright 127d4a1addSreinoud * notice, this list of conditions and the following disclaimer. 137d4a1addSreinoud * 2. Redistributions in binary form must reproduce the above copyright 147d4a1addSreinoud * notice, this list of conditions and the following disclaimer in the 157d4a1addSreinoud * documentation and/or other materials provided with the distribution. 167d4a1addSreinoud * 3. All advertising materials mentioning features or use of this software 177d4a1addSreinoud * must display the following acknowledgement: 187d4a1addSreinoud * This product includes software developed by Brini. 197d4a1addSreinoud * 4. The name of the company nor the name of the author may be used to 207d4a1addSreinoud * endorse or promote products derived from this software without specific 217d4a1addSreinoud * prior written permission. 227d4a1addSreinoud * 237d4a1addSreinoud * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED 247d4a1addSreinoud * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 257d4a1addSreinoud * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 267d4a1addSreinoud * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 277d4a1addSreinoud * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 287d4a1addSreinoud * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 297d4a1addSreinoud * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 307d4a1addSreinoud * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 317d4a1addSreinoud * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 327d4a1addSreinoud * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 337d4a1addSreinoud * SUCH DAMAGE. 347d4a1addSreinoud * 357d4a1addSreinoud * RiscBSD kernel project 367d4a1addSreinoud * 377d4a1addSreinoud * podulebus.h 387d4a1addSreinoud * 397d4a1addSreinoud * Podule bus header file 407d4a1addSreinoud * 417d4a1addSreinoud * Created : 26/04/95 427d4a1addSreinoud */ 437d4a1addSreinoud 447d4a1addSreinoud #include <sys/param.h> 45d368bbb8Sdyoung #include <sys/bus.h> 467d4a1addSreinoud #include <machine/io.h> 477d4a1addSreinoud 487d4a1addSreinoud /* Define the structure used to describe a podule */ 497d4a1addSreinoud 507d4a1addSreinoud #define PODULE_DESCRIPTION_LENGTH 63 517d4a1addSreinoud 527d4a1addSreinoud typedef struct { 537d4a1addSreinoud /* The podule header, read from the on board ROM */ 547d4a1addSreinoud 557d4a1addSreinoud u_char flags0; 567d4a1addSreinoud u_char flags1; 577d4a1addSreinoud u_char reserved; 587d4a1addSreinoud u_short product; 597d4a1addSreinoud u_short manufacturer; 607d4a1addSreinoud u_char country; 617d4a1addSreinoud u_int irq_addr; 627d4a1addSreinoud u_int irq_mask; 637d4a1addSreinoud u_int fiq_addr; 647d4a1addSreinoud u_int fiq_mask; 657d4a1addSreinoud 667d4a1addSreinoud /* The base addresses for this podule */ 677d4a1addSreinoud 687d4a1addSreinoud u_int fast_base; 697d4a1addSreinoud u_int medium_base; 707d4a1addSreinoud u_int slow_base; 717d4a1addSreinoud u_int sync_base; 727d4a1addSreinoud u_int mod_base; 737d4a1addSreinoud u_int easi_base; 747d4a1addSreinoud 757d4a1addSreinoud /* Flags */ 767d4a1addSreinoud 777d4a1addSreinoud int podulenum; 787d4a1addSreinoud int slottype; 797d4a1addSreinoud int attached; 807d4a1addSreinoud 817d4a1addSreinoud /* Other info */ 827d4a1addSreinoud 837d4a1addSreinoud char description[PODULE_DESCRIPTION_LENGTH + 1]; 847d4a1addSreinoud u_int (*read_rom)(u_int, int); 857d4a1addSreinoud 867d4a1addSreinoud /* podule specific information provided by podulebus */ 877d4a1addSreinoud 887d4a1addSreinoud int interrupt; 897d4a1addSreinoud 907d4a1addSreinoud int dma_channel; 917d4a1addSreinoud int dma_interrupt; 927d4a1addSreinoud } podule_t; 937d4a1addSreinoud 947d4a1addSreinoud #define PODULE_FLAGS_CD 0x01 957d4a1addSreinoud #define PODULE_FLAGS_IS 0x02 967d4a1addSreinoud 977d4a1addSreinoud #define SLOT_NONE 0x00 987d4a1addSreinoud #define SLOT_POD 0x01 997d4a1addSreinoud #define SLOT_NET 0x02 1007d4a1addSreinoud 1017d4a1addSreinoud typedef int podulebus_intr_handle_t; 1027d4a1addSreinoud 1037d4a1addSreinoud #define podulebus_attach_args podule_attach_args 1047d4a1addSreinoud 1057d4a1addSreinoud struct podule_attach_args { 1067d4a1addSreinoud podule_t *pa_podule; /* podule descriptor */ 1077d4a1addSreinoud int pa_podule_number; /* podule number */ 1087d4a1addSreinoud int pa_slottype; /* podule slot type */ 1097d4a1addSreinoud bus_space_tag_t pa_iot; /* bus space tag */ 1107d4a1addSreinoud 1117d4a1addSreinoud #define pa_easi_t pa_iot 1127d4a1addSreinoud #define pa_mod_t pa_iot 1137d4a1addSreinoud #define pa_fast_t pa_iot 1147d4a1addSreinoud #define pa_medium_t pa_iot 1157d4a1addSreinoud #define pa_slow_t pa_iot 1167d4a1addSreinoud #define pa_sync_t pa_iot 1177d4a1addSreinoud 1187d4a1addSreinoud #define pa_easi_base pa_podule->easi_base 1197d4a1addSreinoud #define pa_mod_base pa_podule->mod_base 1207d4a1addSreinoud #define pa_fast_base pa_podule->fast_base 1217d4a1addSreinoud #define pa_medium_base pa_podule->medium_base 1227d4a1addSreinoud #define pa_slow_base pa_podule->slow_base 1237d4a1addSreinoud #define pa_sync_base pa_podule->sync_base 1247d4a1addSreinoud 1257d4a1addSreinoud podulebus_intr_handle_t pa_ih; /* interrupt handle */ 1267d4a1addSreinoud 1277d4a1addSreinoud #define pa_manufacturer pa_podule->manufacturer 1287d4a1addSreinoud #define pa_product pa_podule->product 1297d4a1addSreinoud #define pa_descr pa_podule->description 1307d4a1addSreinoud }; 1317d4a1addSreinoud 1327d4a1addSreinoud /* Useful macros */ 1337d4a1addSreinoud 1347d4a1addSreinoud /* EASI space cycle control */ 1357d4a1addSreinoud 1367d4a1addSreinoud 1377d4a1addSreinoud #define IS_PODULE(pa, man, prod) \ 1387d4a1addSreinoud (pa->pa_manufacturer == man && pa->pa_product == prod) 1397d4a1addSreinoud 1407d4a1addSreinoud 1417d4a1addSreinoud 1427d4a1addSreinoud #define EASI_CYCLE_TYPE_A 0x00 1437d4a1addSreinoud #define EASI_CYCLE_TYPE_C 0x01 1447d4a1addSreinoud #define set_easi_cycle_type(podule, type) \ 1457d4a1addSreinoud IOMD_WRITE_BYTE(IOMD_ECTCR, (IOMD_READ_BYTE(IOMD_ECTCR) & ~(1 << podule)) | (1 << type)) 1467d4a1addSreinoud 1477d4a1addSreinoud #ifdef _KERNEL 1487d4a1addSreinoud 1497d4a1addSreinoud /* Array of podule structures, one per possible podule */ 1507d4a1addSreinoud 1517d4a1addSreinoud extern podule_t podules[MAX_PODULES + MAX_NETSLOTS]; 1527d4a1addSreinoud 15302cdf4d2Sdsl int matchpodule(struct podule_attach_args *pa, 15402cdf4d2Sdsl int manufacturer, int product, int required_slot); 1557d4a1addSreinoud 156*9ae4f82bSskrll void netslot_ea(uint8_t *buffer); 1577d4a1addSreinoud 15802cdf4d2Sdsl extern void *podulebus_irq_establish(podulebus_intr_handle_t, int, 15902cdf4d2Sdsl int (*)(void *), void *, struct evcnt *); 16002cdf4d2Sdsl extern void podulebus_shift_tag(bus_space_tag_t, u_int, 16102cdf4d2Sdsl bus_space_tag_t *); 1627d4a1addSreinoud 1637d4a1addSreinoud /* Used internally by the podulebus code */ 164a8c167faSmatt extern void netslotscan(device_t); 165a8c167faSmatt extern void poduleexamine(podule_t *, device_t, int); 1667d4a1addSreinoud 1677d4a1addSreinoud #endif 1687d4a1addSreinoud 1697d4a1addSreinoud /* End of podulebus.h */ 170