#!/bin/sh
#
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
# Made on Sun Jun 25 20:24:59 CEST 2006 by Martin Bochnig at martux.org
#
# This archive contains:
#
#	./aperture
#	
#	./aperture/Makefile
#	./aperture/Makefile.amd64
#	./aperture/Makefile.sparcv9
#	./aperture/README
#	./aperture/aperture.c
#	./aperture/aperture.conf
#	./aperture/devlink.tab
#
echo c - ./aperture
mkdir -p ./aperture > /dev/null 2>&1
#
echo x - ./aperture/Makefile
sed 's/^X//' >./aperture/Makefile << 'END-of-./aperture/Makefile'
X#
X#   File: makefile for aperture Framebuffer Driver
X# Author: Doug Anson (danson@lgc.com)
X#   Date: 2/15/94
X# Modified: David Holland (davidh@use.com)
X#   Date: 2/23/94
X#   - Changed name, and debugging structure
X# Modified: Marc Aurele La France (tsi@xfree86.org)
X#   Date: 2001.06.08
X#   - SPARC support, cleanup and turf aptest.
X#
X# >>NOTE<< Have a look at Makefile.sparcv9 for  specifics.
X#
X# Modified: Martin Bochnig (martin@martux.org)
X#   Date: 2006.06.24
X#   - Slightly modified to also build on Solaris 10 and 11.
X#   - amd64 64 bit kernel support
X#   - cosmetical changes to also support sun4v, not only sun4u
X#
X# >>NOTE<< Have a look at Makefile.amd64 for amd64 specifics.
X#
X# GNU gcc compiler
XCC=gcc
XCFLGS=-fno-builtin -Wall -O3
X
X#
X# SUNWspro compiler
X#CC=/opt/SUNWspro/bin/cc
X#CFLGS=-Xa -xnolib -xO3
X
X#
X# Debug error reporting
X#DEBUG_FLG=
X#DEBUG_FLG=-DAPERTURE_DEBUG
X
X#
X# Files and object declarations
XKERNEL_FLGS=-D_KERNEL -DSUNDDI
XCFLAGS= $(CFLGS) $(KERNEL_FLGS) $(DEBUG_FLG)
XCFILES= aperture.c
XOBJS= aperture.o
XDRIVER= aperture
X
X#
X# Make rules
Xall: $(DRIVER)
X
X$(DRIVER): $(OBJS)
X	@if [ -f "Makefile.`isainfo -k`" ]; then \
X		make -f Makefile.`isainfo -k` $(DRIVER); \
X	else \
X		rm -f $(DRIVER); \
X		ld -r -o $(DRIVER) $(OBJS); \
X	fi
X
Xinstall: $(DRIVER)
X	@if [ -f "Makefile.`isainfo -k`" ]; then \
X		make -f Makefile.`isainfo -k` install; \
X	else \
X		cp aperture.conf /kernel/drv; \
X		cp $(DRIVER) /kernel/drv; \
X	fi
X
Xadd_drv:
X	@if [ -f "Makefile.`isainfo -k`" ]; then \
X		make -f Makefile.`isainfo -k` add_drv; \
X	else \
X		add_drv aperture; \
X	fi
X
Xclean:
X	rm -f *% *.BAK $(OBJS) $(DRIVER) core
X
X.SUFFIXES: .i
X
X.c.i:
X	$(CC) -E $(CFLAGS) $*.c > $@
X
X.c.o:
X	@if [ -f "Makefile.`isainfo -k`" ]; then \
X		make -f Makefile.`isainfo -k` $@; \
X	else \
X		rm -f $@; \
X		$(CC) -c $(CFLAGS) $*.c -o $@; \
X	fi
END-of-./aperture/Makefile
echo x - ./aperture/Makefile.amd64
sed 's/^X//' >./aperture/Makefile.amd64 << 'END-of-./aperture/Makefile.amd64'
X#
X#   File: Makefile for aperture Framebuffer Driver
X# Author: Doug Anson (danson@lgc.com)
X#   Date: 2/15/94
X# Modified: David Holland (davidh@use.com)
X#   Date: 2/23/94
X#   - Changed name, and debugging structure
X# Modified: Marc Aurele La France (tsi@xfree86.org)
X#   Date: 2001.06.08
X#   - SPARC support, cleanup and turf aptest.
X# Modified: Martin Bochnig (martin@martux.org)
X#   - amd64 64 bit kernel support, cosmetics and also
X#     supporting sun4v (and arbitrary sparcv9) platforms
X#     as well as SunOS 5.10 or higher now
X#   - Changed name
X#
X
X#
X# GNU gcc compiler, version 3.2 or later
X#
XCC=gcc
XCFLGS=-fno-builtin -Wall -O3 -m64 -mcmodel=kernel
X
X#
X# SUNWspro compiler (untested, might not properly work for amd64 here)
X#CC=/opt/SUNWspro/bin/cc
X#CFLGS=-Xa -xarch=v9 -xnolib -xO3
X
X#
X# Debug error reporting
X#DEBUG_FLG=
X#DEBUG_FLG=-DAPERTURE_DEBUG
X
X#
X# Files and object declarations
XKERNEL_FLGS=-D_KERNEL -DSUNDDI
XCFLAGS= $(CFLGS) $(KERNEL_FLGS) $(DEBUG_FLG)
XCFILES= aperture.c
XOBJS= aperture.o
XDRIVER= aperture
X
X#
X# Make rules
Xall: $(DRIVER)
X
X$(DRIVER): $(OBJS)
X	rm -f $(DRIVER)
X	ld -r -o $(DRIVER) $(OBJS)
X
Xinstall: $(DRIVER)
X	cp aperture.conf /kernel/drv
X	cp $(DRIVER) /kernel/drv/amd64
X
Xadd_drv:
X	add_drv aperture
X
Xclean:
X	rm -f *% *.BAK $(OBJS) $(DRIVER) core
X
X.SUFFIXES: .i
X
X.c.i:
X	$(CC) -E $(CFLAGS) $*.c > $@
END-of-./aperture/Makefile.amd64
echo x - ./aperture/Makefile.sparcv9
sed 's/^X//' >./aperture/Makefile.sparcv9 << 'END-of-./aperture/Makefile.sparcv9'
X#
X#   File: makefile for aperture Framebuffer Driver
X# Author: Doug Anson (danson@lgc.com)
X#   Date: 2/15/94
X# Modified: David Holland (davidh@use.com)
X#   Date: 2/23/94
X#   - Changed name, and debugging structure
X# Modified: Marc Aurele La France (tsi@xfree86.org)
X#   Date: 2001.06.08
X#   - SPARC support, cleanup and turf aptest.
X# Modified: Martin Bochnig (martin@martux.org)
X#   Date: 2006.06.24
X#   - Changed name for generic sparcv9 support
X#   - updated to better work with Solaris 10 and 11
X#
X
X#
X# GNU gcc compiler, version 3.2 or later
X#
XCC=gcc
XCFLGS=-fno-builtin -Wall -O3 -m64
X
X#
X# SUNWspro compiler
X#CC=/opt/SUNWspro/bin/cc
X#CFLGS=-Xa -xarch=v9 -xnolib -xO3
X
X#
X# Debug error reporting
X#DEBUG_FLG=
X#DEBUG_FLG=-DAPERTURE_DEBUG
X
X#
X# Files and object declarations
XKERNEL_FLGS=-D_KERNEL -DSUNDDI
XCFLAGS= $(CFLGS) $(KERNEL_FLGS) $(DEBUG_FLG)
XCFILES= aperture.c
XOBJS= aperture.o
XDRIVER= aperture
X
X#
X# Make rules
Xall: $(DRIVER)
X
X$(DRIVER): $(OBJS)
X	rm -f $(DRIVER)
X	ld -r -o $(DRIVER) $(OBJS)
X
Xinstall: $(DRIVER)
X	cp aperture.conf /kernel/drv
X	cp $(DRIVER) /kernel/drv/sparcv9
X
Xadd_drv:
X	add_drv aperture
X
Xclean:
X	rm -f *% *.BAK $(OBJS) $(DRIVER) core
X
X.SUFFIXES: .i
X
X.c.i:
X	$(CC) -E $(CFLAGS) $*.c > $@
END-of-./aperture/Makefile.sparcv9
echo x - ./aperture/README
sed 's/^X//' >./aperture/README << 'END-of-./aperture/README'
XFramebuffer aperture driver.
X
XThis driver was written to provide a device that, unlike /dev/mem, allows
Xmmap()'ing of ranges beyond installed memory.
X
XThe original x86-based version of this driver was the collaborative work of
XDoug Anson (danson@lgc.com), and David Holland (davidh@use.com).  It has since
Xbeen rewritten to also work on sparc machines and - later on - also on sparcv9 
Xand recently amd64 64 bit kernels.
XIt flawlessly compiles and installs on Solaris 10 and 11 now.
X
X
XInstallation instructions:
X
X1) Check the Makefile, for appropriate CC, and CFLAGS definitions.  Compiling
X   with APERTURE_DEBUG defined means the driver will generate reams of
X   debugging output.  You'll probably want to leave this off...
X
X2) Type 'make' (or 'gmake').  Both the driver and test program should compile 
X   without any problems. No warning messages should be generated.
X
X3) Become 'root'.
X
X4) Type 'make install' and 'make add_drv'.  The screen should look something
X   like this:
X
X	# make install
X	cp aperture aperture.conf /kernel/drv
X	# make add_drv
X	add_drv aperture
X
X   On a sparcv9 machine this will mention the /kernel/drv/sparcv9 directory
X   instead of /kernel/drv. Similarily /kernel/drv/amd64 should be used on amd64.
X
X   This installs the driver to the system.
X
X5) While as root modify the file /etc/devlink.tab, adding these lines:
X
X# The following entry is for the framebuffer driver
Xtype=ddi_pseudo;name=aperture	fbs/\M0
X
X   Add that line exactly as shown. You may also simply add the
X   contents of the devlink.tab file supplied to /etc/devlink.tab.
X   It contains the lines as well.  (Yes, that is a tab between
X   aperture and fbs, not spaces - very important)
X
X6) Perform a reconfiguration boot of the system.
X
X	# touch /reconfigure
X	# init 6
X
XBug reports, questions, suggestions, etc can be sent to xfree86@xfree86.org.
END-of-./aperture/README
echo x - ./aperture/aperture.c
sed 's/^X//' >./aperture/aperture.c << 'END-of-./aperture/aperture.c'
X/*
X * Copyright (C) 2001 The XFree86 Project, Inc.  All Rights Reserved.
X *
X * Permission is hereby granted, free of charge, to any person obtaining a copy
X * of this software and associated documentation files (the "Software"), to
X * deal in the Software without restriction, including without limitation the
X * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
X * sell copies of the Software, and to permit persons to whom the Software is
X * furnished to do so, subject to the following conditions:
X *
X * The above copyright notice and this permission notice shall be included in
X * all copies or substantial portions of the Software.
X *
X * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
X * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
X * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
X * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
X * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
X * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
X *
X * Except as contained in this notice, the name of the XFree86 Project shall
X * not be used in advertising or otherwise to promote the sale, use or other
X * dealings in this Software without prior written authorization from the
X * XFree86 Project.
X */
X
X/*
X * Aperture driver for Solaris.
X */
X
X/*
X * Modified: Martin Bochnig (martin@martux.org)
X * Log:      Commented out obsolete kernel interfaces DDI_IDENTIFIED and DDI_NOT_IDENTIFIED
X *           not supported by SunOS 5.10 or higher anymore, 
X *           see http://docs.sun.com/app/docs/doc/819-2255/6n4ibnffr?a=view
X */
X
X#include <sys/conf.h>
X#include <sys/ddi.h>
X#include <sys/modctl.h>
X#include <sys/open.h>
X#include <sys/stat.h>
X#include <sys/sunddi.h>
X
X#define DEV_IDENT  "aperture"
X#define DEV_BANNER "XFree86 aperture driver"
X
X#ifndef D_64BIT
X#define D_64BIT 0
X#endif
X
X#ifndef NULL
X#define NULL ((void *)0)
X#endif
X
X/*
X * open(9E)
X */
X/*ARGSUSED*/
Xstatic int
Xaperture_open
X(
X#ifdef __STDC__
X	dev_t *devp,
X	int flag,
X	int typ,
X	struct cred *cred
X#endif
X)
X#ifndef __STDC__
X	dev_t *devp;
X	int flag;
X	int typ;
X	struct cred *cred;
X#endif
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering open()\n");
X
X#endif
X
X	if ((typ != OTYP_CHR) || (getminor(*devp)))
X		error = EINVAL;
X	else
X		error = 0;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving open() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X/*
X * mmap(9E)
X */
X/*ARGSUSED*/
Xstatic int
Xaperture_mmap
X(
X#ifdef __STDC__
X	dev_t dev,
X	off_t off,
X	int prot
X#endif
X)
X#ifndef __STDC__
X	dev_t dev;
X	off_t off;
X	int prot;
X#endif
X{
X	pfn_t pf;
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering mmap(0x%016lx)\n", off);
X
X#endif
X
X	pf = btop((unsigned long)off);
X
X	/* Deal with mmap(9E) interface limits */
X	error = (int)pf;
X	if ((error < 0) || (pf != (pfn_t)error))
X		error = -1;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving mmap() = 0x%08lx", error);
X
X#endif
X
X	return error;
X}
X
Xstatic struct cb_ops aperture_cb_ops =
X{
X	aperture_open,		/* open */
X	nulldev,		/* close */
X	nodev,			/* strategy */
X	nodev,			/* print */
X	nodev,			/* dump */
X	nodev,			/* read */
X	nodev,			/* write */
X	nodev,			/* ioctl */
X	nodev,			/* devmap */
X	aperture_mmap,		/* mmap */
X	ddi_segmap,		/* segmap */
X	nochpoll,		/* poll */
X	ddi_prop_op,		/* cb_prop_op */
X	0,			/* streamtab  */
X	D_NEW | D_MP | D_64BIT	/* Driver compatibility flag */
X};
X
X
Xstatic dev_info_t *aperture_dip;	/* private copy of devinfo pointer */
X
X/*
X * getinfo(9E)
X */
X/*ARGSUSED*/
Xstatic int
Xaperture_getinfo
X(
X#ifdef __STDC__
X	dev_info_t *dip,
X	ddi_info_cmd_t infocmd,
X	void *arg,
X	void **result
X#endif
X)
X#ifndef __STDC__
X	dev_info_t *dip;
X	ddi_info_cmd_t infocmd;
X	void *arg;
X	void **result;
X#endif
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering getinfo()\n");
X
X#endif
X
X	switch (infocmd) {
X	case DDI_INFO_DEVT2DEVINFO:
X		*result = aperture_dip;
X		error = DDI_SUCCESS;
X		break;
X	case DDI_INFO_DEVT2INSTANCE:
X		*result = NULL;
X		error = DDI_SUCCESS;
X		break;
X	default:
X		error = DDI_FAILURE;
X	}
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving getinfo() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X/*
X * identify(9E)
X */
X/*ARGSUSED*/
Xstatic int
Xaperture_identify
X(
X#ifdef __STDC__
X	dev_info_t *dip
X#endif
X)
X#ifndef __STDC__
X	dev_info_t *dip;
X#endif
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering identify()\n");
X
X#endif
X
X	if (strcmp(ddi_get_name(dip), DEV_IDENT))
X	  error = 1 /* DDI_NOT_IDENTIFIED obsolete since SunOS 5.10 */ ;
X	else
X	  error = 2 /* DDI_IDENTIFIED obsolete since SunOS 5.10 */ ;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving identify() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X/*
X * attach(9E)
X */
X/*ARGSUSED*/
Xstatic int
Xaperture_attach
X(
X#ifdef __STDC__
X	dev_info_t *dip,
X	ddi_attach_cmd_t cmd
X#endif
X)
X#ifndef __STDC__
X	dev_info_t *dip;
X	ddi_attach_cmd_t cmd;
X#endif
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering attach()\n");
X
X#endif
X
X	if (cmd != DDI_ATTACH)
X	{
X
X#ifdef APERTURE_DEBUG
X
X		cmn_err(CE_CONT, DEV_IDENT ":  not attach(, DDI_ATTACH)\n");
X
X#endif
X
X		error = DDI_FAILURE;
X	}
X	else
X	{
X		error = ddi_create_minor_node(dip, ddi_get_name(dip), S_IFCHR,
X					      (minor_t)ddi_get_instance(dip),
X					      NULL, 0 /* NODESPECIFIC_DEV obsolete since SunOS 5.10 */ );
X
X		if (error == DDI_SUCCESS)
X		{
X			aperture_dip = dip;
X			ddi_report_dev(dip);
X		}
X	}
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving attach() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X/*
X * detach(9E)
X */
Xstatic int
Xaperture_detach
X(
X#ifdef __STDC__
X	dev_info_t *dip,
X	ddi_detach_cmd_t cmd
X#endif
X)
X#ifndef __STDC__
X	dev_info_t *dip;
X	ddi_detach_cmd_t cmd;
X#endif
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering detach()\n");
X
X#endif
X
X	if (cmd != DDI_DETACH)
X	{
X		error = DDI_FAILURE;
X	}
X	else
X	{
X		ddi_remove_minor_node(dip, NULL);
X		aperture_dip = NULL;
X		error = DDI_SUCCESS;
X	}
X
X#if APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving detach() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X
Xstatic struct dev_ops aperture_ops =
X{
X	DEVO_REV,		/* revision */
X	0,			/* refcnt  */
X	aperture_getinfo,	/* getinfo */
X	aperture_identify,	/* identify */
X	nulldev,		/* probe */
X	aperture_attach,	/* attach */
X	aperture_detach,	/* detach */
X	nodev,			/* reset */
X	&aperture_cb_ops,	/* driver operations */
X	NULL			/* bus operations */
X};
X
X
Xstatic struct modldrv modldrv =
X{
X	&mod_driverops,		/* mod_ops structure pointer */
X	DEV_BANNER,		/* driver banner string */
X	&aperture_ops,		/* dev_ops structure pointer */
X};
X
X
Xstatic struct modlinkage modlinkage =
X{
X	MODREV_1,		/* module API revision */
X	{
X		&modldrv,	/* module driver structure pointer */
X		NULL		/* list termination */
X	}
X};
X
X
X/*
X * _init(9E)
X */
Xint
X_init
X(
X#ifdef __STDC__
X	void
X#endif
X)
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering _init()\n");
X
X#endif
X
X	error = mod_install(&modlinkage);
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving _init() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X/*
X * _info(9E)
X */
Xint
X_info
X(
X#ifdef __STDC__
X	struct modinfo *modinfop
X#endif
X)
X#ifndef __STDC__
X	struct modinfo *modinfop;
X#endif
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering _info()\n");
X
X#endif
X
X	error = mod_info(&modlinkage, modinfop);
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving _info() = %d\n", error);
X
X#endif
X
X	return error;
X}
X
X/*
X * _fini(9E)
X */
Xint
X_fini
X(
X#ifdef __STDC__
X	void
X#endif
X)
X{
X	int error;
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  entering _fini()\n");
X
X#endif
X
X	error = mod_remove(&modlinkage);
X
X#ifdef APERTURE_DEBUG
X
X	cmn_err(CE_CONT, DEV_IDENT ":  leaving _fini() = %d\n", error);
X
X#endif
X
X	return error;
X}
END-of-./aperture/aperture.c
echo x - ./aperture/aperture.conf
sed 's/^X//' >./aperture/aperture.conf << 'END-of-./aperture/aperture.conf'
X#
X# Copyright 1994 Doug Anson, danson@lgc.com & David Holland, davidh@use.com
X#
X# File:   aperture.conf
X# Author: Doug Anson (danson@lgc.com)
X# 
X# Modified: David Holland (davidh@use.com)
X# Log:	    Change comments		02/23/94
X#	    Change defaults/comments	09/25/94
X#
X# Modified: Marc Aurele La France (tsi@xfree86.org)
X# Log:      SPARC changes		2001.09
X#
X# Purpose:  This conf file is used by the aperture driver.
X#
Xname="aperture" parent="pseudo";
END-of-./aperture/aperture.conf
echo x - ./aperture/devlink.tab
sed 's/^X//' >./aperture/devlink.tab << 'END-of-./aperture/devlink.tab'
X# The following entry is for the aperture driver
Xtype=ddi_pseudo;name=aperture	fbs/\M0
END-of-./aperture/devlink.tab
exit

