summaryrefslogtreecommitdiffstats
path: root/sys/isa/atkbd_isa.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/isa/atkbd_isa.c')
-rw-r--r--sys/isa/atkbd_isa.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/sys/isa/atkbd_isa.c b/sys/isa/atkbd_isa.c
index 4513049..ade1ba0 100644
--- a/sys/isa/atkbd_isa.c
+++ b/sys/isa/atkbd_isa.c
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: $
+ * $Id: atkbd_isa.c,v 1.1 1999/01/23 16:53:27 dfr Exp $
*/
#include "atkbd.h"
@@ -52,6 +52,7 @@ devclass_t atkbd_devclass;
static int atkbdprobe(device_t dev);
static int atkbdattach(device_t dev);
+static void atkbd_isa_intr(void *arg);
static device_method_t atkbd_methods[] = {
DEVMETHOD(device_probe, atkbdprobe),
@@ -69,13 +70,10 @@ static driver_t atkbd_driver = {
static int
atkbdprobe(device_t dev)
{
- atkbd_softc_t *sc;
u_long port;
u_long irq;
u_long flags;
- sc = (atkbd_softc_t *)device_get_softc(dev);
-
device_set_desc(dev, "AT Keyboard");
/* obtain parameters */
@@ -84,14 +82,16 @@ atkbdprobe(device_t dev)
BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_FLAGS, &flags);
/* probe the device */
- return atkbd_probe_unit(device_get_unit(dev), sc, port, irq, flags);
+ return atkbd_probe_unit(device_get_unit(dev), port, irq, flags);
}
static int
atkbdattach(device_t dev)
{
atkbd_softc_t *sc;
+ u_long port;
u_long irq;
+ u_long flags;
struct resource *res;
void *ih;
int zero = 0;
@@ -99,21 +99,32 @@ atkbdattach(device_t dev)
sc = (atkbd_softc_t *)device_get_softc(dev);
- error = atkbd_attach_unit(device_get_unit(dev), sc);
+ BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_PORT, &port);
+ BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_IRQ, &irq);
+ BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_FLAGS, &flags);
+
+ error = atkbd_attach_unit(device_get_unit(dev), sc, port, irq, flags);
if (error)
return error;
/* declare our interrupt handler */
- BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_IRQ, &irq);
res = bus_alloc_resource(dev, SYS_RES_IRQ, &zero, irq, irq, 1,
RF_SHAREABLE | RF_ACTIVE);
- BUS_SETUP_INTR(device_get_parent(dev), dev, res,
- (driver_intr_t *) kbdsw[sc->kbd->kb_index]->intr, sc->kbd,
+ BUS_SETUP_INTR(device_get_parent(dev), dev, res, atkbd_isa_intr, sc,
&ih);
return 0;
}
+static void
+atkbd_isa_intr(void *arg)
+{
+ atkbd_softc_t *sc;
+
+ sc = (atkbd_softc_t *)arg;
+ (*kbdsw[sc->kbd->kb_index]->intr)(sc->kbd, NULL);
+}
+
DRIVER_MODULE(atkbd, atkbdc, atkbd_driver, atkbd_devclass, 0, 0);
#endif /* NATKBD > 0 */
OpenPOWER on IntegriCloud