isavar.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /*-
  2. * SPDX-License-Identifier: BSD-2-Clause
  3. *
  4. * Copyright (c) 1998 Doug Rabson
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. * 1. Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * 2. Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  17. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  20. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  23. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26. * SUCH DAMAGE.
  27. */
  28. #ifndef _ISA_ISAVAR_H_
  29. #define _ISA_ISAVAR_H_
  30. struct isa_config;
  31. struct isa_pnp_id;
  32. typedef void isa_config_cb(void *arg, struct isa_config *config, int enable);
  33. #include "isa_if.h"
  34. #include <isa/pnpvar.h>
  35. #ifdef _KERNEL
  36. /*
  37. * ISA devices are partially ordered. This is to ensure that hardwired
  38. * devices the BIOS tells us are there appear first, then speculative
  39. * devices that are sensitive to the probe order, then devices that
  40. * are hinted to be there, then the most flexible devices which support
  41. * the ISA bus PNP standard.
  42. */
  43. #define ISA_ORDER_PNPBIOS 10 /* plug-and-play BIOS inflexible hardware */
  44. #define ISA_ORDER_SENSITIVE 20 /* legacy sensitive hardware */
  45. #define ISA_ORDER_SPECULATIVE 30 /* legacy non-sensitive hardware */
  46. #define ISA_ORDER_PNP 40 /* plug-and-play flexible hardware */
  47. /*
  48. * Limits on resources that we can manage
  49. */
  50. #define ISA_NPORT 50
  51. #define ISA_NMEM 50
  52. #define ISA_NIRQ 50
  53. #define ISA_NDRQ 50
  54. /*
  55. * Limits on resources the hardware can actually handle
  56. */
  57. #define ISA_PNP_NPORT 8
  58. #define ISA_PNP_NMEM 4
  59. #define ISA_PNP_NIRQ 2
  60. #define ISA_PNP_NDRQ 2
  61. #define ISADMA_READ 0x00100000
  62. #define ISADMA_WRITE 0
  63. #define ISADMA_RAW 0x00080000
  64. /*
  65. * Plug and play cards can support a range of resource
  66. * configurations. This structure is used by the isapnp parser to
  67. * inform the isa bus about the resource possibilities of the
  68. * device. Each different alternative should be supplied by calling
  69. * ISA_ADD_CONFIG().
  70. */
  71. struct isa_range {
  72. uint32_t ir_start;
  73. uint32_t ir_end;
  74. uint32_t ir_size;
  75. uint32_t ir_align;
  76. };
  77. struct isa_config {
  78. struct isa_range ic_mem[ISA_NMEM];
  79. struct isa_range ic_port[ISA_NPORT];
  80. uint32_t ic_irqmask[ISA_NIRQ];
  81. uint32_t ic_drqmask[ISA_NDRQ];
  82. int ic_nmem;
  83. int ic_nport;
  84. int ic_nirq;
  85. int ic_ndrq;
  86. };
  87. /*
  88. * Used to build lists of IDs and description strings for PnP drivers.
  89. */
  90. struct isa_pnp_id {
  91. uint32_t ip_id;
  92. const char *ip_desc;
  93. };
  94. enum isa_device_ivars {
  95. ISA_IVAR_PORT,
  96. ISA_IVAR_PORT_0 = ISA_IVAR_PORT,
  97. ISA_IVAR_PORT_1,
  98. ISA_IVAR_PORTSIZE,
  99. ISA_IVAR_PORTSIZE_0 = ISA_IVAR_PORTSIZE,
  100. ISA_IVAR_PORTSIZE_1,
  101. ISA_IVAR_MADDR,
  102. ISA_IVAR_MADDR_0 = ISA_IVAR_MADDR,
  103. ISA_IVAR_MADDR_1,
  104. ISA_IVAR_MEMSIZE,
  105. ISA_IVAR_MEMSIZE_0 = ISA_IVAR_MEMSIZE,
  106. ISA_IVAR_MEMSIZE_1,
  107. ISA_IVAR_IRQ,
  108. ISA_IVAR_IRQ_0 = ISA_IVAR_IRQ,
  109. ISA_IVAR_IRQ_1,
  110. ISA_IVAR_DRQ,
  111. ISA_IVAR_DRQ_0 = ISA_IVAR_DRQ,
  112. ISA_IVAR_DRQ_1,
  113. ISA_IVAR_VENDORID,
  114. ISA_IVAR_SERIAL,
  115. ISA_IVAR_LOGICALID,
  116. ISA_IVAR_COMPATID,
  117. ISA_IVAR_CONFIGATTR,
  118. ISA_IVAR_PNP_CSN,
  119. ISA_IVAR_PNP_LDN,
  120. ISA_IVAR_PNPBIOS_HANDLE
  121. };
  122. /*
  123. * ISA_IVAR_CONFIGATTR bits
  124. */
  125. #define ISACFGATTR_CANDISABLE (1 << 0) /* can be disabled */
  126. #define ISACFGATTR_DYNAMIC (1 << 1) /* dynamic configuration */
  127. #define ISACFGATTR_HINTS (1 << 3) /* source of config is hints */
  128. #define ISA_PNP_DESCR "E:pnpid;D:#"
  129. #define ISA_PNP_INFO(t) \
  130. MODULE_PNP_INFO(ISA_PNP_DESCR, isa, t, t, nitems(t) - 1); \
  131. /*
  132. * Simplified accessors for isa devices
  133. */
  134. #define ISA_ACCESSOR(var, ivar, type) \
  135. __BUS_ACCESSOR(isa, var, ISA, ivar, type)
  136. ISA_ACCESSOR(port, PORT, int)
  137. ISA_ACCESSOR(portsize, PORTSIZE, int)
  138. ISA_ACCESSOR(irq, IRQ, int)
  139. ISA_ACCESSOR(drq, DRQ, int)
  140. ISA_ACCESSOR(maddr, MADDR, int)
  141. ISA_ACCESSOR(msize, MEMSIZE, int)
  142. ISA_ACCESSOR(vendorid, VENDORID, int)
  143. ISA_ACCESSOR(serial, SERIAL, int)
  144. ISA_ACCESSOR(logicalid, LOGICALID, int)
  145. ISA_ACCESSOR(compatid, COMPATID, int)
  146. ISA_ACCESSOR(configattr, CONFIGATTR, int)
  147. ISA_ACCESSOR(pnp_csn, PNP_CSN, int)
  148. ISA_ACCESSOR(pnp_ldn, PNP_LDN, int)
  149. ISA_ACCESSOR(pnpbios_handle, PNPBIOS_HANDLE, int)
  150. extern void isa_probe_children(device_t dev);
  151. void isa_dmacascade(int chan);
  152. void isa_dmadone(int flags, caddr_t addr, int nbytes, int chan);
  153. int isa_dma_init(int chan, u_int bouncebufsize, int flag);
  154. void isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan);
  155. int isa_dma_acquire(int chan);
  156. void isa_dma_release(int chan);
  157. int isa_dmastatus(int chan);
  158. int isa_dmastop(int chan);
  159. int isa_dmatc(int chan);
  160. #define isa_dmainit(chan, size) do { \
  161. if (isa_dma_init(chan, size, M_NOWAIT)) \
  162. printf("WARNING: isa_dma_init(%d, %ju) failed\n", \
  163. (int)(chan), (uintmax_t)(size)); \
  164. } while (0)
  165. void isa_hinted_child(device_t parent, const char *name, int unit);
  166. void isa_hint_device_unit(device_t bus, device_t child, const char *name,
  167. int *unitp);
  168. int isab_attach(device_t dev);
  169. #endif /* _KERNEL */
  170. #endif /* !_ISA_ISAVAR_H_ */