1 /* $NetBSD: pcmciachip.h,v 1.6 2001/12/15 13:23:23 soren Exp $ */ 2 3 /* 4 * Copyright (c) 1997 Marc Horowitz. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. All advertising materials mentioning features or use of this software 15 * must display the following acknowledgement: 16 * This product includes software developed by Marc Horowitz. 17 * 4. The name of the author may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef _PCMCIA_PCMCIACHIP_H_ 33 #define _PCMCIA_PCMCIACHIP_H_ 34 35 #include <machine/bus.h> 36 37 struct pcmcia_function; 38 struct pcmcia_mem_handle; 39 struct pcmcia_io_handle; 40 41 /* interfaces for pcmcia to call the chipset */ 42 43 typedef struct pcmcia_chip_functions *pcmcia_chipset_tag_t; 44 typedef void *pcmcia_chipset_handle_t; 45 typedef int pcmcia_mem_handle_t; 46 47 #define PCMCIA_MEM_ATTR 1 48 #define PCMCIA_MEM_COMMON 2 49 50 #define PCMCIA_WIDTH_MEM8 8 51 #define PCMCIA_WIDTH_MEM16 16 52 53 #define PCMCIA_WIDTH_MEM_MASK 24 54 55 #define PCMCIA_WIDTH_AUTO 0 56 #define PCMCIA_WIDTH_IO8 1 57 #define PCMCIA_WIDTH_IO16 2 58 59 struct pcmcia_chip_functions { 60 /* memory space allocation */ 61 int (*mem_alloc) __P((pcmcia_chipset_handle_t, bus_size_t, 62 struct pcmcia_mem_handle *)); 63 void (*mem_free) __P((pcmcia_chipset_handle_t, 64 struct pcmcia_mem_handle *)); 65 66 /* memory space window mapping */ 67 int (*mem_map) __P((pcmcia_chipset_handle_t, int, bus_addr_t, 68 bus_size_t, struct pcmcia_mem_handle *, 69 bus_size_t *, int *)); 70 void (*mem_unmap) __P((pcmcia_chipset_handle_t, int)); 71 72 /* I/O space allocation */ 73 int (*io_alloc) __P((pcmcia_chipset_handle_t, bus_addr_t, 74 bus_size_t, bus_size_t, struct pcmcia_io_handle *)); 75 void (*io_free) __P((pcmcia_chipset_handle_t, 76 struct pcmcia_io_handle *)); 77 78 /* I/O space window mapping */ 79 int (*io_map) __P((pcmcia_chipset_handle_t, int, bus_addr_t, 80 bus_size_t, struct pcmcia_io_handle *, int *)); 81 void (*io_unmap) __P((pcmcia_chipset_handle_t, int)); 82 83 /* interrupt glue */ 84 void *(*intr_establish) __P((pcmcia_chipset_handle_t, 85 struct pcmcia_function *, int, int (*)(void *), void *)); 86 void (*intr_disestablish) __P((pcmcia_chipset_handle_t, void *)); 87 88 /* card enable/disable */ 89 void (*socket_enable) __P((pcmcia_chipset_handle_t)); 90 void (*socket_disable) __P((pcmcia_chipset_handle_t)); 91 92 /* card detection */ 93 int (*card_detect) __P((pcmcia_chipset_handle_t)); 94 }; 95 96 /* Memory space functions. */ 97 #define pcmcia_chip_mem_alloc(tag, handle, size, pcmhp) \ 98 ((*(tag)->mem_alloc)((handle), (size), (pcmhp))) 99 100 #define pcmcia_chip_mem_free(tag, handle, pcmhp) \ 101 ((*(tag)->mem_free)((handle), (pcmhp))) 102 103 #define pcmcia_chip_mem_map(tag, handle, kind, card_addr, size, pcmhp, \ 104 offsetp, windowp) \ 105 ((*(tag)->mem_map)((handle), (kind), (card_addr), (size), (pcmhp), \ 106 (offsetp), (windowp))) 107 108 #define pcmcia_chip_mem_unmap(tag, handle, window) \ 109 ((*(tag)->mem_unmap)((handle), (window))) 110 111 /* I/O space functions. */ 112 #define pcmcia_chip_io_alloc(tag, handle, start, size, align, pcihp) \ 113 ((*(tag)->io_alloc)((handle), (start), (size), (align), (pcihp))) 114 115 #define pcmcia_chip_io_free(tag, handle, pcihp) \ 116 ((*(tag)->io_free)((handle), (pcihp))) 117 118 #define pcmcia_chip_io_map(tag, handle, width, card_addr, size, pcihp, \ 119 windowp) \ 120 ((*(tag)->io_map)((handle), (width), (card_addr), (size), (pcihp), \ 121 (windowp))) 122 123 #define pcmcia_chip_io_unmap(tag, handle, window) \ 124 ((*(tag)->io_unmap)((handle), (window))) 125 126 /* Interrupt functions. */ 127 #define pcmcia_chip_intr_establish(tag, handle, pf, ipl, fct, arg) \ 128 ((*(tag)->intr_establish)((handle), (pf), (ipl), (fct), (arg))) 129 130 #define pcmcia_chip_intr_disestablish(tag, handle, ih) \ 131 ((*(tag)->intr_disestablish)((handle), (ih))) 132 133 /* Socket functions. */ 134 #define pcmcia_chip_socket_enable(tag, handle) \ 135 ((*(tag)->socket_enable)((handle))) 136 #define pcmcia_chip_socket_disable(tag, handle) \ 137 ((*(tag)->socket_disable)((handle))) 138 139 struct pcmciabus_attach_args { 140 char *paa_busname; /* Bus name */ 141 pcmcia_chipset_tag_t pct; 142 pcmcia_chipset_handle_t pch; 143 bus_addr_t iobase; /* start i/o space allocation here */ 144 bus_size_t iosize; /* size of the i/o space range */ 145 }; 146 147 /* interfaces for the chipset to call pcmcia */ 148 149 int pcmcia_card_attach __P((struct device *)); 150 void pcmcia_card_detach __P((struct device *, int)); 151 void pcmcia_card_deactivate __P((struct device *)); 152 int pcmcia_card_gettype __P((struct device *)); 153 154 #endif /* _PCMCIA_PCMCIACHIP_H_ */ 155