xref: /netbsd-src/sys/arch/acorn32/include/podulebus_machdep.h (revision 9ae4f82b80c8a7a69ecb5c131de521df66120671)
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