sio_puc.c revision 123910
190731Sjhay/*-
290731Sjhay * Copyright (c) 2002 JF Hay.  All rights reserved.
390731Sjhay * Copyright (c) 2001 M. Warner Losh.  All rights reserved.
490731Sjhay *
590731Sjhay * Redistribution and use in source and binary forms, with or without
690731Sjhay * modification, are permitted provided that the following conditions
790731Sjhay * are met:
890731Sjhay * 1. Redistributions of source code must retain the above copyright
990731Sjhay *    notice, this list of conditions and the following disclaimer.
1090731Sjhay * 2. Redistributions in binary form must reproduce the above copyright
1190731Sjhay *    notice, this list of conditions and the following disclaimer in the
1290731Sjhay *    documentation and/or other materials provided with the distribution.
1390731Sjhay *
1490731Sjhay * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1590731Sjhay * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1690731Sjhay * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1790731Sjhay * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1890731Sjhay * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1990731Sjhay * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2090731Sjhay * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2190731Sjhay * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2290731Sjhay * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2390731Sjhay * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2490731Sjhay */
2590731Sjhay
2690731Sjhay#include <sys/cdefs.h>
2790731Sjhay__FBSDID("$FreeBSD: head/sys/dev/sio/sio_puc.c 123910 2003-12-27 19:47:10Z imp $");
2890731Sjhay
2990731Sjhay#include <sys/param.h>
3090731Sjhay#include <sys/systm.h>
3190731Sjhay#include <sys/bus.h>
3290731Sjhay#include <sys/conf.h>
3390731Sjhay#include <sys/kernel.h>
3490731Sjhay#include <sys/lock.h>
3590731Sjhay#include <sys/malloc.h>
3690731Sjhay#include <sys/mutex.h>
3790731Sjhay#include <sys/module.h>
3890731Sjhay#include <sys/tty.h>
3990731Sjhay#include <machine/bus_pio.h>
4090731Sjhay#include <machine/bus.h>
4190731Sjhay#include <sys/timepps.h>
4290731Sjhay
4390731Sjhay#include <dev/pci/pcivar.h>
4490731Sjhay#include <dev/puc/pucvar.h>
4590731Sjhay#include <dev/sio/siovar.h>
4690731Sjhay#include <dev/sio/sioreg.h>
4790731Sjhay
4892739Salfredstatic	int	sio_puc_attach(device_t dev);
4992739Salfredstatic	int	sio_puc_probe(device_t dev);
5090731Sjhay
5190731Sjhaystatic device_method_t sio_puc_methods[] = {
5290731Sjhay	/* Device interface */
5390731Sjhay	DEVMETHOD(device_probe,		sio_puc_probe),
5490731Sjhay	DEVMETHOD(device_attach,	sio_puc_attach),
55123910Simp	DEVMETHOD(device_detach,	siodetach),
5690731Sjhay
5790731Sjhay	{ 0, 0 }
5890731Sjhay};
5990731Sjhay
6090731Sjhaystatic driver_t sio_puc_driver = {
6190731Sjhay	sio_driver_name,
6290731Sjhay	sio_puc_methods,
6390731Sjhay	0,
6490731Sjhay};
6590731Sjhay
6690731Sjhaystatic int
6790731Sjhaysio_puc_attach(dev)
6890731Sjhay	device_t	dev;
6990731Sjhay{
70106590Sjhb	uintptr_t rclk;
7190731Sjhay
7290731Sjhay	if (BUS_READ_IVAR(device_get_parent(dev), dev, PUC_IVAR_FREQ,
7390731Sjhay	    &rclk) != 0)
7490731Sjhay		rclk = DEFAULT_RCLK;
7590731Sjhay	return (sioattach(dev, 0, rclk));
7690731Sjhay}
7790731Sjhay
7890731Sjhaystatic int
7990731Sjhaysio_puc_probe(dev)
8090731Sjhay	device_t	dev;
8190731Sjhay{
82106590Sjhb	uintptr_t rclk;
8390731Sjhay
8490731Sjhay	if (BUS_READ_IVAR(device_get_parent(dev), dev, PUC_IVAR_FREQ,
8590731Sjhay	    &rclk) != 0)
8690731Sjhay		rclk = DEFAULT_RCLK;
8791875Snyan#ifdef PC98
8891875Snyan	SET_FLAG(dev, SET_IFTYPE(COM_IF_NS16550));
8991875Snyan#endif
90106590Sjhb	return (sioprobe(dev, 0, rclk, 1));
9190731Sjhay}
9290731Sjhay
9390731SjhayDRIVER_MODULE(sio, puc, sio_puc_driver, sio_devclass, 0, 0);
94