<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ice-online.com/index.php?action=history&amp;feed=atom&amp;title=ICE_Help_DRIVERS</id>
	<title>ICE Help DRIVERS - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ice-online.com/index.php?action=history&amp;feed=atom&amp;title=ICE_Help_DRIVERS"/>
	<link rel="alternate" type="text/html" href="https://wiki.ice-online.com/index.php?title=ICE_Help_DRIVERS&amp;action=history"/>
	<updated>2026-06-21T08:56:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.ice-online.com/index.php?title=ICE_Help_DRIVERS&amp;diff=557&amp;oldid=prev</id>
		<title>ConvertBot: Low level drivers for ICE-DSP cards</title>
		<link rel="alternate" type="text/html" href="https://wiki.ice-online.com/index.php?title=ICE_Help_DRIVERS&amp;diff=557&amp;oldid=prev"/>
		<updated>2020-04-27T18:32:58Z</updated>

		<summary type="html">&lt;p&gt;Low level drivers for ICE-DSP cards&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #eef9ff; border: 1px solid #999; padding: 10px;&amp;quot;&amp;gt;[[ICE_Help|&amp;amp;uarr; ''Go to the full list of ICE Help pages'']].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
'''Summary:''' Low level drivers for ICE-DSP cards&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file covers the general operation and installation of low level drivers&lt;br /&gt;
for the supported Operating Systems.&lt;br /&gt;
&lt;br /&gt;
=== GENERAL - Overview of driver functions&amp;lt;span id=&amp;quot;GENERAL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The following discussions refer to any of the ICE cards on the PCI bus.&lt;br /&gt;
The ICE-PIC, ICE-MBT, and ICE-SLimpIC all look the same to the driver.&lt;br /&gt;
Note that in this document, only the ICE-PIC is referenced.&lt;br /&gt;
&lt;br /&gt;
This section describes the functions and responsibilities of the ICE-PIC &lt;br /&gt;
device driver:  &lt;br /&gt;
&lt;br /&gt;
1. Provide a logical handle to each device on the system.  This is a device&lt;br /&gt;
file in UNIX and a device name in VMS or Windows.&lt;br /&gt;
&lt;br /&gt;
2. Read and Write registers on the PCI interface chip.&lt;br /&gt;
&lt;br /&gt;
3. Lock a user buffer in memory and map its pages to the PCI bus&lt;br /&gt;
for PCI bus DMA mastering by the ICE-PIC.&lt;br /&gt;
&lt;br /&gt;
To achieve high sustained DMA rates, the driver does not implement the standard&lt;br /&gt;
read and write interfaces.  Instead, the driver is responsible for locking a &lt;br /&gt;
user buffer in memory and mapping these pages to the PCI bus.  The SHARC then &lt;br /&gt;
takes control of the PCI-IF chip to arbitrate input/output DMAs between the host&lt;br /&gt;
memory and the SHARC's internal memory.&lt;br /&gt;
&lt;br /&gt;
Data is written into (or read from) the ICE-PIC using a circular buffer.  &lt;br /&gt;
The application polls the ICE-PIC for the current buffer pointer to find out&lt;br /&gt;
if new data has been written or read from the host buffer.  There are no host&lt;br /&gt;
interrupts or other host CPU activity involved with the data transfer. The &lt;br /&gt;
SHARC processor handles all of the DMA sequencing, and the PCI-IF handles the &lt;br /&gt;
bus arbitration at the hardware level with the PCI bus controller.&lt;br /&gt;
&lt;br /&gt;
In PCI compliant systems, a card is allowed to specify a minimum time that &lt;br /&gt;
it will have the bus for a burst transfer, and a maximum time that it can be &lt;br /&gt;
denied control of the bus.  By tuning these parameters, it is possible to get &lt;br /&gt;
extremely high transfer rates with relatively small buffers on the card to &lt;br /&gt;
cover the PCI bus sharing latencies.  The dual-ported memory in the SHARC chip &lt;br /&gt;
supports 100/120Mby DMA to the host, and 100/120Mby to its link ports &lt;br /&gt;
simultaneously. The FIFO (circular buffer) size in the SHARC can be adjusted &lt;br /&gt;
from 4KBy to 128kBy and is used to absorb hardware level latencies.  The SHARC&lt;br /&gt;
can run special purpose C or assembly language code to implement other transfer &lt;br /&gt;
schemes if necessary.&lt;br /&gt;
&lt;br /&gt;
While the circular DMAs are in progress, the application code can query the&lt;br /&gt;
card for the current DMA pointer allowing continuous access to real-time data&lt;br /&gt;
with resolution to a 4-byte word.  The card can simultaneously process 32 DMA&lt;br /&gt;
channels to different host buffers, and possibly for different processes.&lt;br /&gt;
Since a process must be able to hold a lock on a card for multiple driver &lt;br /&gt;
calls, system level locks are called by the library functions.  The DMAs&lt;br /&gt;
are not affected by process locks, only actions performed on the host.&lt;br /&gt;
&lt;br /&gt;
The main security function of the driver is to make sure that the SHARC chip&lt;br /&gt;
does not perform a DMA to a non-mapped memory address.  This is possible if&lt;br /&gt;
the application code unmaps the user buffer while a DMA is still in progress&lt;br /&gt;
or unmaps the buffer during a crash.  The first case is handled by checks in &lt;br /&gt;
the run-time libraries.  The driver must implement a procedure to check that &lt;br /&gt;
all buffers for a process are unmapped cleanly before the process exits.  If &lt;br /&gt;
this is not the case, the driver assumes a process has crashed and shuts down &lt;br /&gt;
the SHARC chip.&lt;br /&gt;
&lt;br /&gt;
The following ioctl() method calls must be implemented by the driver:&lt;br /&gt;
&lt;br /&gt;
 IOCTL_READ - read a register on the PCI-IF chip&lt;br /&gt;
 IOCTL_WRITE - write a register on the PCI-IF chip&lt;br /&gt;
 IOCTL_ACMD - execute command packet on the SHARC &lt;br /&gt;
 IOCTL_MAP - map a user buffer into PCI space&lt;br /&gt;
 IOCTL_UNMAP - unmaps a user buffer from PCI space&lt;br /&gt;
&lt;br /&gt;
The driver must also implement an open(), close(), and cancel() method.&lt;br /&gt;
&lt;br /&gt;
=== VMS - VMS ICE-DSP Driver Installation Notes &amp;lt;span id=&amp;quot;VMS&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Load the ICE software tree onto the system.  The logical ICEROOT should be &lt;br /&gt;
defined pointing to root of this tree.  &lt;br /&gt;
&lt;br /&gt;
 $assign/trans=conc DKA100:[ICExxx.] ICEROOT&lt;br /&gt;
&lt;br /&gt;
The higher level driver utilities, located in the ICELIB.C file, operate in &lt;br /&gt;
the user's context.  These functions are shared between VMS, OSF, SUN, Linux, &lt;br /&gt;
and WNT.  The user will be making all calls to the driver through this &lt;br /&gt;
interface.  &lt;br /&gt;
&lt;br /&gt;
The driver is located in the [.DRV.VMS] area of the ICE option tree.&lt;br /&gt;
It should be left in this area to insure that it is in sync with the higher &lt;br /&gt;
level driver routines in the ICELIB.C file.  The driver uses IOC$ routines&lt;br /&gt;
to access the PCI bus to insure hardware independence and should run on all &lt;br /&gt;
DEC AXP platforms.&lt;br /&gt;
&lt;br /&gt;
The command procedures BUILD.COM, CONFIG.COM, and CONNECT.COM are provided &lt;br /&gt;
to automate the building and installation of the driver.  &lt;br /&gt;
&lt;br /&gt;
To build the driver and utilities, type:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; set default ICEROOT:[drv.vms]&lt;br /&gt;
 &amp;gt; @build&lt;br /&gt;
&lt;br /&gt;
To see if any cards are recognized on this system (without connecting), you &lt;br /&gt;
must enable CMKRNL and PHYS_IO privileges. Then, type:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; @config&lt;br /&gt;
&lt;br /&gt;
To connect all of the recognized devices, you must enable CMKRNL and PHYS_IO &lt;br /&gt;
privileges. Then, type:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; @connect&lt;br /&gt;
&lt;br /&gt;
The devices will be installed with the names ICA0, ICB0, ICC0, ...&lt;br /&gt;
&lt;br /&gt;
On clustered systems, it may be desirable to specify unique device names&lt;br /&gt;
for each node in the cluster.  If you wish to change the sequence of the &lt;br /&gt;
device names, specify the list as the first argument to the @connect &lt;br /&gt;
procedure.  Only the &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; in IC&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;0 may be changed.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; @connect &amp;quot;ICF0,ICG0,ICE0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The devices will be installed with the names ICF0, ICG0, ICE0, ...&lt;br /&gt;
&lt;br /&gt;
To exercise the cards, use the mid-level driver libraries in the LIB area of&lt;br /&gt;
this software tree.  A small test program in the TEST area may be used to run&lt;br /&gt;
a series of tests on the card. To build and run the test routine:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; set default ICEROOT:[TEST]&lt;br /&gt;
 &amp;gt; @build.vms&lt;br /&gt;
 &amp;gt; test&lt;br /&gt;
&lt;br /&gt;
An X-Midas macro and primitive are also available to run diagnostic tests on &lt;br /&gt;
each card.&lt;br /&gt;
&lt;br /&gt;
X-Midas users should enter this name in the device name slot in the&lt;br /&gt;
hardware config table as shown in the examples below:  &lt;br /&gt;
&lt;br /&gt;
 PIC1==ICEPIC,DEVNO=0,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,DEVNO=1,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,DEVNO=2,IOM=xxx, &lt;br /&gt;
or&lt;br /&gt;
 PIC1==ICEPIC,PCI-DEV,ICA0:,,,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,PCI-DEV,ICB0:,,,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,PCI-DEV,ICC0:,,,IOM=xxx, &lt;br /&gt;
&lt;br /&gt;
[[ICE_Help_ICELIB#PIC_OPEN|See HELP PIC_OPEN]] for hardware file setup details.&lt;br /&gt;
&lt;br /&gt;
VMS 7.3 ISSUES:  TBD &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== OSF - OSF ICE-DSP Driver Installation Notes&amp;lt;span id=&amp;quot;OSF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Load the ICE software tree onto the system.  The environment symbol ICEROOT&lt;br /&gt;
should be defined pointing to root of this tree.  &lt;br /&gt;
&lt;br /&gt;
The driver source files are in the $ICEROOT/drv/osf directory. &lt;br /&gt;
To install the driver, follow these steps:&lt;br /&gt;
&lt;br /&gt;
You should be in the $ICEROOT/drv/osf directory to run the config script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. To uninstall a previous driver, type: &lt;br /&gt;
&lt;br /&gt;
 ./icepic remove&lt;br /&gt;
&lt;br /&gt;
 This removes the module from the system startup.&lt;br /&gt;
 Then REBOOT the system.  This is very important.&lt;br /&gt;
&lt;br /&gt;
2. To make and install the new driver, type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic install&lt;br /&gt;
&lt;br /&gt;
The script adds the path to the driver area to the file&lt;br /&gt;
/usr/sys/conf/BINARY.list and then throws it up in a vi editor&lt;br /&gt;
for you to delete any old icepic entries.  There should only&lt;br /&gt;
be one line with the word icepic in it.&lt;br /&gt;
&lt;br /&gt;
If successful, the driver is now installed, started and added to &lt;br /&gt;
the system startup for autostarting when the system is rebooted.&lt;br /&gt;
&lt;br /&gt;
3. To start the driver without rebooting, type: &lt;br /&gt;
&lt;br /&gt;
 ./icepic start&lt;br /&gt;
&lt;br /&gt;
The driver is now installed.  At boot time, the system will scan the PCI bus&lt;br /&gt;
and start the driver for each ICE-PIC card it finds.  They will show up in the&lt;br /&gt;
/dev filesystem as /dev/ice/pic0[a-z], /dev/ice/pic1[a-z] ...&lt;br /&gt;
&lt;br /&gt;
The multiple minor devices allow the driver to call a very important cleanup &lt;br /&gt;
routine when a process exits without cleaning up in a multi-user environment.  &lt;br /&gt;
&lt;br /&gt;
To address a device, the pic_open call needs only the major device number.&lt;br /&gt;
The pic_open call finds the next available minor device slot and opens the &lt;br /&gt;
appropriate /dev/ice/pic&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;* device.  To specify the major device number, &lt;br /&gt;
the syntax DEVNO=&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; is preferred, but for backwards compatibility reasons,&lt;br /&gt;
the standard syntax like /dev/icepic&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; can also be used.  In this case, the&lt;br /&gt;
major device number is the trailing character.  The /dev/icepic&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; device will&lt;br /&gt;
not really exist.&lt;br /&gt;
&lt;br /&gt;
To exercise the cards, use the mid-level driver libraries in the ./lib area of&lt;br /&gt;
this software tree.  A small test program in the ./test area may be used to run&lt;br /&gt;
a series of tests on the card.  An X-Midas macro and primitive are also &lt;br /&gt;
available to run more diagnostic tests on each card.  See test/readme.txt.&lt;br /&gt;
&lt;br /&gt;
X-Midas users should enter this name in the device name slot in the&lt;br /&gt;
hardware configuration table as shown in the examples below:  &lt;br /&gt;
&lt;br /&gt;
 PIC1==ICEPIC,DEVNO=0,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,DEVNO=1,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,DEVNO=2,IOM=xxx, &lt;br /&gt;
or&lt;br /&gt;
 PIC1==ICEPIC,PCI-DEV,/dev/icepic0,,,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,PCI-DEV,/dev/icepic1,,,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,PCI-DEV,/dev/icepic2,,,IOM=xxx, &lt;br /&gt;
&lt;br /&gt;
[[ICE_Help_ICELIB#PIC_OPEN|See HELP PIC_OPEN]] for hardware file setup details.&lt;br /&gt;
 &lt;br /&gt;
=== LNX - Linux ICE-DSP Driver Installation Notes&amp;lt;span id=&amp;quot;LNX&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Load the ICE software tree onto the system.  The environment symbol ICEROOT&lt;br /&gt;
should be defined pointing to root of this tree.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE: The environment symbol XMAREA_ICE overrides ICEROOT for X-Midas users.'''&lt;br /&gt;
The driver source files are in the $ICEROOT/drv/lnx directory. &lt;br /&gt;
To install the driver, follow these steps:&lt;br /&gt;
&lt;br /&gt;
1. Edit the $ICEROOT/drv/lnx/icepic file to set the RAM allocation &lt;br /&gt;
parameters as described below.  Follow the notes in this file to&lt;br /&gt;
set other installation specific flags as well. &lt;br /&gt;
&lt;br /&gt;
 ram_alloc = DMA RAM allocator {0=Manual, 1=Kernel&amp;lt;4G, 2=Kernel&amp;gt;4G, 3=Kernel&amp;gt;ram_start, 4=PreKernel}&lt;br /&gt;
 ram_start = IceDisk RAM Start in Mbytes (-1 or AUTO for top of the OS ram set by mem=xxxM in boot cmdline)&lt;br /&gt;
 ram_sized = IceDisk RAM in Mbytes (-1 or AUTO for all memory available above mem=xxxM)&lt;br /&gt;
 ram_sizem = Mappable RAM in Mbytes (at least 24 for PIC self tests)&lt;br /&gt;
 ram_nodes = Number of NUMA nodes to cover (allocation is duplicated for each node) (ram_alloc must be &amp;gt;0)&lt;br /&gt;
&lt;br /&gt;
RAMdisk memory of ram_sized MBytes starts at ram_start. &lt;br /&gt;
RAMdisk memory is followed directly by the Dynamically Mappable memory &lt;br /&gt;
of ram_sizem Mbytes.  Insure ram_sizem &amp;gt;= 4 to run the system self tests.  &lt;br /&gt;
&lt;br /&gt;
These parameters can be over-ridden on the kernel command line as:&lt;br /&gt;
 ice.ra=X - ram_alloc&lt;br /&gt;
 ice.rs=X - ram_start&lt;br /&gt;
 ice.rd=X - ram_sized&lt;br /&gt;
 ice.rm=X - ram_sizem&lt;br /&gt;
 ice.rn=X - ram_nodes&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 kernel /vmlinuz-2.6.32-358.6.2.el6.x86_64 ro root=LABEL=ICESYS nomodeset ... ice.ra=2 ice.rn=2 ice.rd=8192 ice.rm=1024 ...&lt;br /&gt;
&lt;br /&gt;
See the section below on Special RAM Handling for details.&lt;br /&gt;
&lt;br /&gt;
2. cd to the $ICEROOT/drv/lnx directory and type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic make&lt;br /&gt;
&lt;br /&gt;
to make the driver and the setram utility.&lt;br /&gt;
&lt;br /&gt;
3. To install the driver, type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic install&lt;br /&gt;
&lt;br /&gt;
This drops the kernel module start and stop scripts into the &lt;br /&gt;
appropriate /etc/rc.d directories for auto initialization and&lt;br /&gt;
cleanup with the rest of the system device driver modules.  &lt;br /&gt;
&lt;br /&gt;
To load the driver without rebooting the system type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic start&lt;br /&gt;
&lt;br /&gt;
This script can also be used to stop or restart the driver. &lt;br /&gt;
&lt;br /&gt;
The driver is now installed.  At boot time, the system will scan the PCI bus&lt;br /&gt;
and start the driver for each ICE-PIC card it finds.  They will show up in the&lt;br /&gt;
/dev filesystem as /dev/icepic0, /dev/icepic1 ...&lt;br /&gt;
&lt;br /&gt;
To change the RAM allocation without reloading the driver, use the setram &lt;br /&gt;
routine in this driver directory.&lt;br /&gt;
&lt;br /&gt;
To exercise the cards, use the mid-level driver libraries in the ./lib area of&lt;br /&gt;
this software tree.  A small test program in the ./test area may be used to run&lt;br /&gt;
a series of tests on the card. An X-Midas macro and primitive are also &lt;br /&gt;
available to run more diagnostic tests on each card.  See test/readme.txt.&lt;br /&gt;
&lt;br /&gt;
X-Midas users should enter this name in the device name slot in the&lt;br /&gt;
hardware configuration table as shown in the examples below:  &lt;br /&gt;
&lt;br /&gt;
 PIC1==ICEPIC,DEVNO=0,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,DEVNO=1,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,DEVNO=2,IOM=xxx, &lt;br /&gt;
or&lt;br /&gt;
 PIC1==ICEPIC,PCI-DEV,/dev/icepic0,,,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,PCI-DEV,/dev/icepic1,,,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,PCI-DEV,/dev/icepic2,,,IOM=xxx, &lt;br /&gt;
&lt;br /&gt;
[[ICE_Help_ICELIB#PIC_OPEN|See HELP PIC_OPEN]] for hardware file setup details.&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
'''Sizing the RAM areas&lt;br /&gt;
'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Applications typically need a 1 or 2 second buffer for each input/output being used &lt;br /&gt;
by each card in the system.  Thus, the necessary size for the ICE-PIC DMA memory&lt;br /&gt;
is largely application specific.  Normally 512M, or 5 seconds at 100Mby/sec, will&lt;br /&gt;
suffice.  &lt;br /&gt;
&lt;br /&gt;
Midas applications should use the ICE ramdisk so that allocation problems can &lt;br /&gt;
be handled at the Midas file system level rather than at the driver level.  &lt;br /&gt;
This allows fixing allocation problems without disturbing other applications.  &lt;br /&gt;
Using the MAPPABLE area, to fix an allocation problem, all applications must &lt;br /&gt;
be stopped and the driver restarted.  The RAMDISK also allows other primitives &lt;br /&gt;
like DATALIST and PLOT to look at the RAM buffers while in use.  &lt;br /&gt;
&lt;br /&gt;
Non-Midas applications will need to use the MAPPABLE area.  If you have a mix of &lt;br /&gt;
Midas/NonMidas apps, both can use the MAPPABLE area.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Special RAM Handling in Linux&lt;br /&gt;
'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Since Intel machines cannot map contiguous PCI address space into contiguous&lt;br /&gt;
virtual address space, it is necessary to allocate contiguous physically &lt;br /&gt;
addressable RAM buffers to support high speed dma and mmap() them to virtual &lt;br /&gt;
addresses for user programs to access the data.&lt;br /&gt;
&lt;br /&gt;
In Linux, this can be done by allocating a piece of physical memory for the high&lt;br /&gt;
speed DMA by the ICE-PIC.  This physical memory can be mapped to a ramdisk for &lt;br /&gt;
allocation management and convenient access, or for on-demand mappable memory &lt;br /&gt;
from the ICEPIC driver, or both.  The ramdisk is not a Linux ramdisk device, &lt;br /&gt;
but a Midas specific filesystem.&lt;br /&gt;
&lt;br /&gt;
Beginning in ICE-398, the ICE ram can be dynamically allocated at system boot by &lt;br /&gt;
specifying ram_alloc &amp;gt; 0.  This uses Kernel Allocated Memory (KAM) that is known to &lt;br /&gt;
the system and can be used for direct IO and other advanced DMA handlers.  The kernel &lt;br /&gt;
will look for the largest continuous block of memory available &amp;lt;= ram_sized+ram_sizem.&lt;br /&gt;
The operational framework must use the mappable section of ram_sizem or have a &lt;br /&gt;
Midas Ramdisk of ram_sized that is auto-configured from the /proc/driver/icepic text.&lt;br /&gt;
This /proc/driver/icepic file shows the start address of the KAM that may be different &lt;br /&gt;
each time the system boots.  '''Note:''' The KAM allocation is not guaranteed, depending on &lt;br /&gt;
other system allocations that may fracture the kernel memory before the ICE driver loads.&lt;br /&gt;
However, on most systems with &amp;gt;= 16G of memory, finding &amp;lt;= 2G is a pretty safe request.&lt;br /&gt;
&lt;br /&gt;
If you need to guarantee a large allocation and do not need advanced DMA options, &lt;br /&gt;
the contiguous block of memory can be reserved at boot time by specifying the memory &lt;br /&gt;
parameters on the kernel command line.&lt;br /&gt;
&lt;br /&gt;
The simplest way to reserve large amounts of contiguous RAM is to confine the &lt;br /&gt;
OS to the lower part of memory using the mem=xxM kernel parameter.  &lt;br /&gt;
This leaves everything above this for the DMA RAM buffers.&lt;br /&gt;
&lt;br /&gt;
If you are using LILO for the boot loader, add the append= line to an entry &lt;br /&gt;
in /etc/lilo.conf as shown in the example below:  &lt;br /&gt;
&lt;br /&gt;
 default=icedisk&lt;br /&gt;
&lt;br /&gt;
 image=/boot/vmlinuz-2.0.34-0.6&lt;br /&gt;
 label=icedisk&lt;br /&gt;
 root=/dev/hda2&lt;br /&gt;
 append=&amp;quot;mem=32M&amp;quot;	&amp;lt;-- this line added&lt;br /&gt;
 read-only&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Don't forget to run lilo after editing lilo.conf !!!!&lt;br /&gt;
This can be made the default boot label by adding the default=&amp;lt;label&amp;gt; line.&lt;br /&gt;
&lt;br /&gt;
If you are using GRUB for the boot loader, edit /boot/grub/menu.lst and add&lt;br /&gt;
the icedisk title with the mem=xxM addition as shown in the example below:  &lt;br /&gt;
&lt;br /&gt;
 color white/blue black/light-gray&lt;br /&gt;
 default 2&lt;br /&gt;
 gfxmenu (hd0,1)/boot/message&lt;br /&gt;
 timeout 8&lt;br /&gt;
&lt;br /&gt;
 title icedisk&lt;br /&gt;
 kernel (hd0,1)/boot/vmlinuz root=/dev/hdb2 vga=0x314 ... showopts mem=32M&lt;br /&gt;
 initrd (hd0,1)/boot/initrd&lt;br /&gt;
&lt;br /&gt;
This can be made the default boot label by changing the default=N line, where &lt;br /&gt;
N is the zero-based title number.&lt;br /&gt;
&lt;br /&gt;
In the above cases, if the system has 128Mby of memory, 32Mby will be used by &lt;br /&gt;
the operating system, and the rest (96Mby starting at 32M) will be reserved &lt;br /&gt;
for the ICE driver.&lt;br /&gt;
&lt;br /&gt;
If you have memory above 4G in your system and a 5+ series card, it is best to use &lt;br /&gt;
the space above 4G.  Most systems with 8G of memory will leave a hole between 3G &lt;br /&gt;
and 4G for devices.  The physical memory will be split from 0G-3G and 4G-9G.  &lt;br /&gt;
For instance, to use the last 2G for the ice card,&lt;br /&gt;
&lt;br /&gt;
 append=&amp;quot;mem=7186M&amp;quot;	&amp;lt;-- this line added&lt;br /&gt;
&lt;br /&gt;
If you are using a 64 bit kernel and PIC5 or newer cards, the mapmem=addr$size is &lt;br /&gt;
the prefered approach to statically reserving a block of memory for the ICE driver.&lt;br /&gt;
The following is used in GRUB to reserve 2G starting at 4G for the ICE driver and&lt;br /&gt;
leaving the rest (above and below) for system use.&lt;br /&gt;
&lt;br /&gt;
 kernel (hd0,1)/boot/vmlinuz root=/dev/hdb2 vga=0x314 ... showopts memmap=2048M$4096M&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLDER SYSTEMS:&lt;br /&gt;
&lt;br /&gt;
For SlimPics, PIC4s and earlier cards, or on systems with &amp;lt; 4G of memory, it &lt;br /&gt;
gets complicated.  See below for a number of case examples.&lt;br /&gt;
&lt;br /&gt;
On laptops, the hot-plug PCI allocator may try to assign hardware to actual&lt;br /&gt;
physical memory above mem=XX instead of above physical memory.  The kernel will&lt;br /&gt;
not put devices below 256M.  If you have more memory than this, you should add &lt;br /&gt;
a system page near the top of memory to the system's list of useable memory. &lt;br /&gt;
The system will not assign hardware anywhere below the last useable page.  &lt;br /&gt;
So a laptop with 512M may want to use:&lt;br /&gt;
&lt;br /&gt;
 append=&amp;quot;mem=254M mem=1M@510M&amp;quot;		&amp;lt;-- this line added (pre 2.6 kernels)&lt;br /&gt;
 or&lt;br /&gt;
 append=&amp;quot;mem=254M memmap=1M@510M&amp;quot;	&amp;lt;-- this line added (2.6+ kernels)&lt;br /&gt;
&lt;br /&gt;
and be able to have 256M of ram available starting at 254M.  Why not use&lt;br /&gt;
1M@511 ?  We found many platforms want to put other stuff just below the top &lt;br /&gt;
of physical memory, in this case (512M-~128K).&lt;br /&gt;
&lt;br /&gt;
Kernels 2.6 and higher only parse mem= for the mem=X form.  The mem=X@Y or mem=X$Y&lt;br /&gt;
must be in a memmap= argument.  Pre 2.6 kernels do NOT support memmap= arg and 2.6+&lt;br /&gt;
kernels will treat mem=1M@510M the same as mem=1M so there is no universal form.&lt;br /&gt;
For the rest of this help, we will show mem[map]= where the 'map' is for 2.6+ kernels.&lt;br /&gt;
&lt;br /&gt;
In some laptop/linux/memory combinations, this does not stop the Card Services&lt;br /&gt;
driver from placing the card in physical memory.  A more on /proc/pci will show&lt;br /&gt;
where it put the card.  To stop it from doing this, we need to reserve the &lt;br /&gt;
memory region for the ice card.  The syntax is:&lt;br /&gt;
&lt;br /&gt;
 append=&amp;quot;mem=254M mem[map]=256M$254M mem[map]=1M@510M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where the amount of reserve is first, a $ sign, and the start of reserve.&lt;br /&gt;
&lt;br /&gt;
By similar argument, a machine with more than 4G of memory is only allowed&lt;br /&gt;
to use the region below 4G for the pre 5 series ice cards.  This syntax allows &lt;br /&gt;
the system to still use the memory region above 4G.  For example:&lt;br /&gt;
&lt;br /&gt;
 append=&amp;quot;mem=2048M mem[map]=4096M@4096M&amp;quot;	&amp;lt;-- this line added&lt;br /&gt;
&lt;br /&gt;
This system will have 2048M of ICE ram available starting at 2048M.  &lt;br /&gt;
The system may have also mapped PCI devices under the 4G region as well. &lt;br /&gt;
&lt;br /&gt;
Type&lt;br /&gt;
 prompt&amp;gt; more /var/log/boot.msg &lt;br /&gt;
or&lt;br /&gt;
 prompt&amp;gt; more /var/log/dmesg &lt;br /&gt;
or&lt;br /&gt;
 prompt&amp;gt; more /proc/iomem&lt;br /&gt;
&lt;br /&gt;
to see the kernels use of memory and make sure to stay away from the &lt;br /&gt;
regions that are (reserved).  Often, the last 256M before 4G is reserved&lt;br /&gt;
for PCI devices.  In that case, for a system with 8G of memory,&lt;br /&gt;
&lt;br /&gt;
 append=&amp;quot;mem=1792M mem[map]=4096M@4096M&amp;quot;	&amp;lt;-- this line added&lt;br /&gt;
&lt;br /&gt;
would be necessary to leave 2048M (2G) for the ice driver, and 6G-256M for the system.&lt;br /&gt;
&lt;br /&gt;
Some kernels do not support the memmap= keyword, so the ice card must use the top&lt;br /&gt;
of memory or some will be wasted.  The 5+ series ice cards support 64bit PCI &lt;br /&gt;
addressing so the ICE ram can be put above 4G.  The 4- series ice cards will not&lt;br /&gt;
run using memory above 4G. &lt;br /&gt;
&lt;br /&gt;
If you have memory above 4G in your system and a 5+ series card, just&lt;br /&gt;
use the space above 4G which is usually free of other driver clutter.  &lt;br /&gt;
Most systems with 8G of memory will leave a hole between 3G and 4G for devices.&lt;br /&gt;
The physical memory will be split from 0G-3G and 4G-9G.  &lt;br /&gt;
To use the last 2G for the ice card,&lt;br /&gt;
&lt;br /&gt;
 append=&amp;quot;mem=7186M&amp;quot;	&amp;lt;-- this line added&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The driver cannot handle different maps for mixed card systems at the same time.&lt;br /&gt;
'''NOTE:''' The driver cannot handle maps that span the 4G address boundary.  &lt;br /&gt;
 The ICE ramdisk and mappable area must be all above 4G or all below 4G.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Midas ICEDISK configuration&lt;br /&gt;
'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To configure a ramdisk in X-Midas, include the following entry in the file&lt;br /&gt;
diskunx.cfg in the X-Midas CFG area.  Make sure to also have an entry in &lt;br /&gt;
midas.cfg for a disk auxiliary that matches the entry in diskunx.cfg. &lt;br /&gt;
You must create the /???/icedisk/ directory on a real disk to contain the &lt;br /&gt;
Midas headers.  The detached portion holds the pointers to physical memory.&lt;br /&gt;
'''NOTE:''' This is NOT a Linux ramdrive, it's just physical memory that we told&lt;br /&gt;
Linux to leave alone.  The book-keeping is all internal to the X-Midas code.&lt;br /&gt;
&lt;br /&gt;
Example diskunx.cfg:&lt;br /&gt;
&lt;br /&gt;
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;
 ! Special disk handing table for UNIX systems&lt;br /&gt;
 ! mount_point  type  raw_device  raw_offset  raw_size&lt;br /&gt;
 !&lt;br /&gt;
 /midas/icedisk/  RAM  /dev/mem  32M  92M &lt;br /&gt;
 /sam/  CFS  /dev/rspc0  0  128M &lt;br /&gt;
&lt;br /&gt;
Example midas.cfg disk aux entry:&lt;br /&gt;
&lt;br /&gt;
 M_aux_list(9)       /midas/icedisk/&lt;br /&gt;
&lt;br /&gt;
Including the statement:&lt;br /&gt;
&lt;br /&gt;
 PIC AUX 9&lt;br /&gt;
&lt;br /&gt;
in the %xmstartup macro will then allow the PIC CREATE verbs to create files&lt;br /&gt;
on the ramdisk for DMAs using PICDRIVER, SOURCEPIC, and SINKPIC.&lt;br /&gt;
&lt;br /&gt;
To configure a ramdisk in NeXtMidas, include the following qualifiers in nmstartup.mm&lt;br /&gt;
where the auxiliary is being defined:&lt;br /&gt;
&lt;br /&gt;
 if env.ostype eqs &amp;quot;UNIX&amp;quot;&lt;br /&gt;
 set U:AUX.1 &amp;quot;/midas/data1/+/&amp;quot;				! normal aux&lt;br /&gt;
 set U:AUX.9 &amp;quot;ramd:/midas/icedisk/,RAM,500M,512M&amp;quot;	! ramdisk aux - specific&lt;br /&gt;
 set U:AUX.9 &amp;quot;ramd:/midas/icedisk/,RAM,AUTO,&amp;quot;		! ramdisk aux - automatically detect from loaded driver&lt;br /&gt;
 elseif env.ostype eqs &amp;quot;DOS&amp;quot;&lt;br /&gt;
 set U:AUX.9 &amp;quot;ramd:\midas\icedisk\,RAM,500M,512M&amp;quot;&lt;br /&gt;
 endif&lt;br /&gt;
&lt;br /&gt;
where the comma-seperated attributes are the identifier 'RAM' followed by the &lt;br /&gt;
start and size of the ramdisk.&lt;br /&gt;
&lt;br /&gt;
=== SOL - SUN Solaris ICE-DSP Driver Installation Notes&amp;lt;span id=&amp;quot;SOL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Load the ICE software tree onto the system.  The environment symbol ICEROOT&lt;br /&gt;
should be defined pointing to root of this tree.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE: The environment symbol XMAREA_ICE overrides ICEROOT for X-Midas users.'''&lt;br /&gt;
The driver source files are in the $ICEROOT/drv/sol directory. &lt;br /&gt;
To install the driver, follow these steps:&lt;br /&gt;
&lt;br /&gt;
'''NOTE: you must be in the /bin/csh to run this '''&lt;br /&gt;
&lt;br /&gt;
1. Edit the $ICEROOT/drv/sol/picdrv.conf file to set the card&lt;br /&gt;
configuration parameters.  Follow the instructions in this file.&lt;br /&gt;
If the device does not show up in the /devices directory, reboot&lt;br /&gt;
the system with &amp;quot;boot -r&amp;quot; to reconfigure the /devices area.  On&lt;br /&gt;
Solaris 8 you need to type &amp;quot;dev&amp;quot; at the boot promp to get to the&lt;br /&gt;
devices tree (cd to /devices does not work).&lt;br /&gt;
&lt;br /&gt;
Add the contents of $ICEROOT/drv/sol/devlink.tab to /etc/devlink.tab&lt;br /&gt;
file. This causes Solaris to create a soft link, &amp;quot;/dev/icepic0&amp;quot;, to &lt;br /&gt;
the character device in the /devices tree&lt;br /&gt;
&lt;br /&gt;
2. cd to the $ICEROOT/drv/sol directory. If you are using Solaris 2.6,&lt;br /&gt;
you will need to edit the icepic script to set the correct compiler &lt;br /&gt;
flags.  The default is for a Solaris 2.7 64-bit driver.  Then type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic make&lt;br /&gt;
&lt;br /&gt;
to make the driver.&lt;br /&gt;
&lt;br /&gt;
3. To install the driver, type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic install&lt;br /&gt;
&lt;br /&gt;
This drops the kernel module into the system area.&lt;br /&gt;
&lt;br /&gt;
To load the driver without rebooting the system type:&lt;br /&gt;
&lt;br /&gt;
 ./icepic start&lt;br /&gt;
&lt;br /&gt;
This script can also be used to stop or restart the driver. &lt;br /&gt;
&lt;br /&gt;
The driver is now installed.  At boot time, the system will attach the cards&lt;br /&gt;
listed in the picdrv.conf at the address or slot specified.  They will show &lt;br /&gt;
up in the /dev filesystem as /dev/icepic0, /dev/icepic1 ...&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' if you add or remove cards, the picdrv.conf file will need to be updated &lt;br /&gt;
and the driver reloaded.  So much for plug-and play on the SUN architecture...&lt;br /&gt;
&lt;br /&gt;
To exercise the cards, use the mid-level driver libraries in the ./lib area of&lt;br /&gt;
this software tree.  A small test program in the ./test area may be used to run&lt;br /&gt;
a series of tests on the card.  An X-Midas macro and primitive are also &lt;br /&gt;
available to run more diagnostic tests on each card.  See test/readme.txt.&lt;br /&gt;
&lt;br /&gt;
X-Midas users should enter this name in the device name slot in the&lt;br /&gt;
hardware configuration table as shown in the examples below:  &lt;br /&gt;
&lt;br /&gt;
 PIC1==ICEPIC,DEVNO=0,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,DEVNO=1,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,DEVNO=2,IOM=xxx, &lt;br /&gt;
or&lt;br /&gt;
 PIC1==ICEPIC,PCI-DEV,/dev/icepic0,,,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,PCI-DEV,/dev/icepic1,,,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,PCI-DEV,/dev/icepic2,,,IOM=xxx, &lt;br /&gt;
&lt;br /&gt;
[[ICE_Help_ICELIB#PIC_OPEN|See HELP PIC_OPEN]] for hardware file setup details.&lt;br /&gt;
 &lt;br /&gt;
=== SGI - Silicon Graphics ICE-DSP Driver Installation Notes&amp;lt;span id=&amp;quot;SGI&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Load the ICE software tree onto the system.  The environment symbol ICEROOT&lt;br /&gt;
should be defined pointing to root of this tree.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE: The environment symbol XMAREA_ICE overrides ICEROOT for X-Midas users.'''&lt;br /&gt;
The driver source files are in the $ICEROOT/drv/sgi directory. &lt;br /&gt;
To install the driver, follow these steps:&lt;br /&gt;
 &lt;br /&gt;
1. cd to the $ICEROOT/drv/sgi directory&lt;br /&gt;
&lt;br /&gt;
2. To dynamically load the driver, type &amp;quot;make install&amp;quot;.  This will &lt;br /&gt;
lboot the driver into the kernel.&lt;br /&gt;
&lt;br /&gt;
3. To rebuild /unix with the driver, type &amp;quot;make kernel&amp;quot; this will build a&lt;br /&gt;
/unix.install file, then reboot the system to load the driver, Once &lt;br /&gt;
this is done, the driver will load automatically each time the system &lt;br /&gt;
is booted.&lt;br /&gt;
&lt;br /&gt;
Check out /var/adm/SYSLOG for driver print statements (or the console)&lt;br /&gt;
&lt;br /&gt;
To exercise the cards, use the mid-level driver libraries in the ./lib area of&lt;br /&gt;
this software tree.  A small test program in the ./test area may be used to run&lt;br /&gt;
a series of tests on the card. An X-Midas macro and primitive are also &lt;br /&gt;
available to run more diagnostic tests on each card.  See test/readme.txt.&lt;br /&gt;
&lt;br /&gt;
X-Midas users should enter this name in the device name slot in the&lt;br /&gt;
hardware configuration table as shown in the examples below:  &lt;br /&gt;
&lt;br /&gt;
 PIC1==ICEPIC,DEVNO=0,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,DEVNO=1,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,DEVNO=2,IOM=xxx, &lt;br /&gt;
or&lt;br /&gt;
 PIC1==ICEPIC,PCI-DEV,/dev/icepic0,,,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,PCI-DEV,/dev/icepic1,,,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,PCI-DEV,/dev/icepic2,,,IOM=xxx, &lt;br /&gt;
&lt;br /&gt;
[[ICE_Help_ICELIB#PIC_OPEN|See HELP PIC_OPEN]] for hardware file setup details.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== WIN - Windows ICE-DSP Driver Installation Notes&amp;lt;span id=&amp;quot;WIN&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Load the ICE software tree onto the system.  The environment symbol ICEROOT&lt;br /&gt;
should be defined pointing to root of this tree.  &lt;br /&gt;
&lt;br /&gt;
The driver files are in the %ICEROOT%\drv\w2k, \wnt, or \w9x directories. &lt;br /&gt;
&lt;br /&gt;
This driver uses the WDM generic driver model supporting Win98 and Win2000 &lt;br /&gt;
platforms.  A non-PnP version was developed to support older NT4 platforms.&lt;br /&gt;
Windows-NT users are advised to upgrade to Windows-2000.&lt;br /&gt;
&lt;br /&gt;
If this is your first time, read the special RAM handling section below.&lt;br /&gt;
&lt;br /&gt;
To install the driver on Win98 or Win2000:&lt;br /&gt;
&lt;br /&gt;
1. Edit the BOOT.INI file to reserve physical RAM for high speed DMA.&lt;br /&gt;
2. Edit the Icepic.inf file in the  %ICEROOT%\drv\w2k or \w9x directory &lt;br /&gt;
to setup the RAM allocation parameters for your platform. &lt;br /&gt;
3. Reboot the system.&lt;br /&gt;
4. If the system does not automatically detect the new hardware,&lt;br /&gt;
select 'Add Hardware' from the Control Panel and let it find the new &lt;br /&gt;
Plug-n-Play PCI devices.&lt;br /&gt;
5. Select 'Browse for new driver files' and find the %ICEROOT%\drv\w2k &lt;br /&gt;
or \w9x area depending on your platform. &lt;br /&gt;
&lt;br /&gt;
To install the driver on WinNT:&lt;br /&gt;
&lt;br /&gt;
1. Edit the BOOT.INI file to reserve physical RAM for high speed DMA.&lt;br /&gt;
2. Edit the icepic.reg file in the  %ICEROOT%\drv\wnt directory &lt;br /&gt;
to setup the RAM allocation parameters for your platform. &lt;br /&gt;
3. Run icepic.reg and reboot the system.&lt;br /&gt;
&lt;br /&gt;
That's all there is to it.  The device names are Icepic0, Icepic1, ... IcepicN. &lt;br /&gt;
&lt;br /&gt;
NeXtMidas users should enter this name in the device name slot in the&lt;br /&gt;
hardware configuration table as shown in the examples below:  &lt;br /&gt;
&lt;br /&gt;
 PIC1==ICEPIC,DEVNO=0,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,DEVNO=1,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,DEVNO=2,IOM=xxx, &lt;br /&gt;
or&lt;br /&gt;
 PIC1==ICEPIC,PCI-DEV,Icepic0,,,IOM=xxx, &lt;br /&gt;
 PIC2==ICEPIC,PCI-DEV,Icepic1,,,IOM=xxx, &lt;br /&gt;
 PIC3==ICEPIC,PCI-DEV,Icepic2,,,IOM=xxx, &lt;br /&gt;
&lt;br /&gt;
[[ICE_Help_ICELIB#PIC_OPEN|See HELP PIC_OPEN]] for hardware file setup details.&lt;br /&gt;
 &lt;br /&gt;
To exercise the cards, use the mid-level driver libraries in the ./lib area of&lt;br /&gt;
this software tree.  A small test program in the ./test area may be used to run&lt;br /&gt;
a series of tests on the card.  An NeXtMidas macro and primitive are also &lt;br /&gt;
available to run more diagnostic tests on each card.  See test/readme.txt.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Special RAM Handling in Windows&lt;br /&gt;
'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Since Intel machines cannot map contiguous PCI address space into contiguous&lt;br /&gt;
virtual address space, it is necessary to allocate contiguous physically &lt;br /&gt;
addressable RAM buffers to support high speed dma and mmap() them to virtual &lt;br /&gt;
addresses for user programs to access the data.&lt;br /&gt;
&lt;br /&gt;
In Win2000, this is done by reserving a piece of physical memory for the &lt;br /&gt;
ICE-PICs high speed DMA.  This physical memory can be mapped to a ramdisk, as&lt;br /&gt;
in NeXtMidas, for allocation management and convenient access.&lt;br /&gt;
&lt;br /&gt;
To reserve the upper part of memory, add the /maxmem=n switch in the BOOT.INI&lt;br /&gt;
file which sits on the boot drive root directory, normally c:\boot.ini .&lt;br /&gt;
This tells the operating system to not use any of the memory above this value.&lt;br /&gt;
The following shows an example BOOT.INI file for Windows-2000 with the mods:&lt;br /&gt;
&lt;br /&gt;
 [boot loader]&lt;br /&gt;
 timeout=30&lt;br /&gt;
 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT&lt;br /&gt;
 [operating systems]&lt;br /&gt;
 multi(0)disk(0)rdisk(0)partition(1)\WINNT=&amp;quot;Microsoft Windows 2000 Professional&amp;quot; /fastdetect /maxmem=112&lt;br /&gt;
&lt;br /&gt;
The Icepic.inf file also needs to be modified to reflect your system.  The &lt;br /&gt;
[Strings] section at the top of the icepic.inf file has the following entries:&lt;br /&gt;
&lt;br /&gt;
 Ram.Start=&amp;quot;112&amp;quot;&lt;br /&gt;
 Ram.SizeDisk=&amp;quot;4&amp;quot;&lt;br /&gt;
 Ram.SizeMap=&amp;quot;12&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this example, the system has 128Mby of memory: 112Mby will be used &lt;br /&gt;
by the operating system, and the rest (16Mby) will be reserved for a &lt;br /&gt;
4Mby ramdisk (starting at 112M) and 12Mby mappable (starting at 112+4M).&lt;br /&gt;
&lt;br /&gt;
=== MAC - MAC-G3 ICE-DSP Driver Installation Notes&amp;lt;span id=&amp;quot;MAC&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
 This driver was written by General Dynamics Corp.&lt;br /&gt;
 Call Jim Crumley at 301-497-2040 for information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
[[Category:ICE_Help]]&lt;/div&gt;</summary>
		<author><name>ConvertBot</name></author>
		
	</entry>
</feed>