isa.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*-
  2. * SPDX-License-Identifier: (BSD-2-Clause-FreeBSD AND ISC)
  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. #include <sys/cdefs.h>
  29. __FBSDID("$FreeBSD$");
  30. /*-
  31. * Modifications for Intel architecture by Garrett A. Wollman.
  32. * Copyright 1998 Massachusetts Institute of Technology
  33. *
  34. * Permission to use, copy, modify, and distribute this software and
  35. * its documentation for any purpose and without fee is hereby
  36. * granted, provided that both the above copyright notice and this
  37. * permission notice appear in all copies, that both the above
  38. * copyright notice and this permission notice appear in all
  39. * supporting documentation, and that the name of M.I.T. not be used
  40. * in advertising or publicity pertaining to distribution of the
  41. * software without specific, written prior permission. M.I.T. makes
  42. * no representations about the suitability of this software for any
  43. * purpose. It is provided "as is" without express or implied
  44. * warranty.
  45. *
  46. * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
  47. * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
  48. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  49. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
  50. * SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  51. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  52. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  53. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  54. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  55. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  56. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  57. * SUCH DAMAGE.
  58. */
  59. #include <sys/param.h>
  60. #include <sys/bus.h>
  61. #include <sys/kernel.h>
  62. #include <sys/malloc.h>
  63. #include <sys/module.h>
  64. #include <machine/bus.h>
  65. #include <sys/rman.h>
  66. #include <machine/resource.h>
  67. #include <isa/isavar.h>
  68. #include <isa/isa_common.h>
  69. void
  70. isa_init(device_t dev)
  71. {
  72. }
  73. /*
  74. * This implementation simply passes the request up to the parent
  75. * bus, which in our case is the special i386 nexus, substituting any
  76. * configured values if the caller defaulted. We can get away with
  77. * this because there is no special mapping for ISA resources on an Intel
  78. * platform. When porting this code to another architecture, it may be
  79. * necessary to interpose a mapping layer here.
  80. */
  81. struct resource *
  82. isa_alloc_resource(device_t bus, device_t child, int type, int *rid,
  83. rman_res_t start, rman_res_t end, rman_res_t count, u_int flags)
  84. {
  85. /*
  86. * Consider adding a resource definition.
  87. */
  88. int passthrough = (device_get_parent(child) != bus);
  89. int isdefault = RMAN_IS_DEFAULT_RANGE(start, end);
  90. struct isa_device* idev = DEVTOISA(child);
  91. struct resource_list *rl = &idev->id_resources;
  92. struct resource_list_entry *rle;
  93. if (!passthrough && !isdefault) {
  94. rle = resource_list_find(rl, type, *rid);
  95. if (!rle) {
  96. if (*rid < 0)
  97. return 0;
  98. switch (type) {
  99. case SYS_RES_IRQ:
  100. if (*rid >= ISA_NIRQ)
  101. return 0;
  102. break;
  103. case SYS_RES_DRQ:
  104. if (*rid >= ISA_NDRQ)
  105. return 0;
  106. break;
  107. case SYS_RES_MEMORY:
  108. if (*rid >= ISA_NMEM)
  109. return 0;
  110. break;
  111. case SYS_RES_IOPORT:
  112. if (*rid >= ISA_NPORT)
  113. return 0;
  114. break;
  115. default:
  116. return 0;
  117. }
  118. resource_list_add(rl, type, *rid, start, end, count);
  119. }
  120. }
  121. return resource_list_alloc(rl, bus, child, type, rid,
  122. start, end, count, flags);
  123. }
  124. int
  125. isa_release_resource(device_t bus, device_t child, int type, int rid,
  126. struct resource *r)
  127. {
  128. struct isa_device* idev = DEVTOISA(child);
  129. struct resource_list *rl = &idev->id_resources;
  130. return resource_list_release(rl, bus, child, type, rid, r);
  131. }
  132. /*
  133. * On this platform, isa can also attach to the legacy bus.
  134. */
  135. DRIVER_MODULE(isa, legacy, isa_driver, isa_devclass, 0, 0);
  136. /*
  137. * Attach the ISA bus to the xenpv bus in order to get syscons.
  138. */
  139. DRIVER_MODULE(isa, xenpv, isa_driver, isa_devclass, 0, 0);