fresh commit
This commit is contained in:
commit
e68c1ec8c6
20 files changed
+5802
No files matched your search
Binary file not shown.
@@ -0,0 +1,340 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) 19yy <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
; Installer for 3c589.device.
|
||||||
|
; Copyright © 2003 Neil Cafferkey.
|
||||||
|
; $VER: "Install 3c589.device" 1.2 (25.2.2004)
|
||||||
|
|
||||||
|
|
||||||
|
; Set constants
|
||||||
|
|
||||||
|
(set #kick-too-low-msg "Kickstart 2.05 or greater is required.")
|
||||||
|
|
||||||
|
(set #dev-name "3c589.device")
|
||||||
|
(set #devs-source "Devs/networks")
|
||||||
|
(set @default-dest "DEVS:networks")
|
||||||
|
(set #pccard-name "pccard.library")
|
||||||
|
(set #libs-source "Libs")
|
||||||
|
(set #libs-dest "LIBS:")
|
||||||
|
|
||||||
|
|
||||||
|
; Check Kickstart version
|
||||||
|
|
||||||
|
(if (< (/ (getversion) 65536) 37)
|
||||||
|
(abort #kick-too-low-msg)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
; Install pccard.library
|
||||||
|
|
||||||
|
(copylib
|
||||||
|
(source (tackon #libs-source #pccard-name))
|
||||||
|
(dest #libs-dest)
|
||||||
|
; (newname #dev-name)
|
||||||
|
(help @copylib-help)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
; Install device
|
||||||
|
|
||||||
|
(copylib
|
||||||
|
(source (tackon #devs-source #dev-name))
|
||||||
|
(dest @default-dest)
|
||||||
|
(help @copylib-help)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,234 @@
|
|||||||
|
@database "3c589.device Manual"
|
||||||
|
@$VER: "3c589.device Manual" 1.5 (4.2.2010)
|
||||||
|
@author "Neil Cafferkey"
|
||||||
|
@(c) "Neil Cafferkey"
|
||||||
|
|
||||||
|
Copyright (C) 2003-2010 Neil Cafferkey
|
||||||
|
|
||||||
|
This manual is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This manual is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this manual; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
|
@node "main" "3c589.device Manual"
|
||||||
|
|
||||||
|
@{b}@{u}3c589.device 1.5@{uu}@{ub} - A 3Com Etherlink III PC Card driver
|
||||||
|
|
||||||
|
|
||||||
|
@{"Introduction" link "intro"}
|
||||||
|
|
||||||
|
@{"Installation and Usage" link "install"}
|
||||||
|
@{"Performance" link "performance"}
|
||||||
|
|
||||||
|
@{"Author and Legal Information" link "author-legal"}
|
||||||
|
|
||||||
|
@{"History" link "history"}
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
|
@node "intro" "Introduction"
|
||||||
|
|
||||||
|
@{u}@{b}Introduction@{ub}@{uu}
|
||||||
|
|
||||||
|
3c589.device is a SANA-II network driver for 3Com Etherlink III PC Cards.
|
||||||
|
These are sold by several companies under a variety of model names; see
|
||||||
|
below for (probable) compatibility. In short, 10 Mbps cards work; 100 Mbps
|
||||||
|
cards do not. Also note that the original 3C589 "A" revision (without any
|
||||||
|
extension letter) does not work.
|
||||||
|
|
||||||
|
The following ethernet and ethernet/modem cards should work:
|
||||||
|
|
||||||
|
@{u}@{b}Company@{uu} @{u}Model@{ub}@{uu}
|
||||||
|
|
||||||
|
@{b}3Com@{ub} 3C562
|
||||||
|
3C562B
|
||||||
|
3C562C
|
||||||
|
3C562D
|
||||||
|
3C563B
|
||||||
|
3C563C
|
||||||
|
3C563D
|
||||||
|
3C589B
|
||||||
|
3C589C
|
||||||
|
3C589D
|
||||||
|
3C589E
|
||||||
|
|
||||||
|
@{b}3Com Megahertz@{ub} 3C3FEM556C
|
||||||
|
3CCE589EC
|
||||||
|
3CCE589ET
|
||||||
|
3CCEM556
|
||||||
|
3CCEM556B
|
||||||
|
3CXE589D
|
||||||
|
3CXE589EC
|
||||||
|
3CXEM556
|
||||||
|
|
||||||
|
@{b}Farallon/Netopia@{ub} EtherMac/EtherWave PN595-TP
|
||||||
|
EtherMac/EtherWave PN595-C
|
||||||
|
|
||||||
|
@{b}Hitachi@{ub} HT-4840-13
|
||||||
|
|
||||||
|
@{b}Motorola@{ub} Marquis
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
|
@node "install" "Installation and Usage"
|
||||||
|
|
||||||
|
@{u}@{b}Requirements@{ub}@{uu}
|
||||||
|
|
||||||
|
3c589.device needs an A600 or A1200 and OS 2.05 or greater.
|
||||||
|
|
||||||
|
@{u}@{b}Installation@{ub}@{uu}
|
||||||
|
|
||||||
|
To install 3c589.device, run the 'Install' script. In your networking
|
||||||
|
software, set the SANA-II device name to @{b}networks/3c589.device@{ub} and the
|
||||||
|
unit number to @{b}0@{ub}.
|
||||||
|
|
||||||
|
@{u}@{b}Cable types@{ub}@{uu}
|
||||||
|
|
||||||
|
Your Etherlink III card will have been programmed to use a certain cable
|
||||||
|
type. If you need to change this setting, I believe there is 3Com software
|
||||||
|
available for Windows to change this and other settings. Check their web
|
||||||
|
site.
|
||||||
|
|
||||||
|
In the future there may be a utility provided to change this setting on an
|
||||||
|
Amiga.
|
||||||
|
|
||||||
|
3c589.device has so far only been tested with @{"10baseT" link "cable"} cabling. @{"10base2" link "cable"}
|
||||||
|
cabling should also work. I'm not sure if there was ever an Etherlink III
|
||||||
|
PC Card with an AUI connection, but if there was, it should work.
|
||||||
|
|
||||||
|
@{u}@{b}Multifunction cards@{ub}@{uu}
|
||||||
|
|
||||||
|
Although 3c589.device works with some multifunction ethernet/modem cards,
|
||||||
|
only one of these functions can be used at a time. This is due to
|
||||||
|
limitations in AmigaOS's card.resource.
|
||||||
|
|
||||||
|
@{u}@{b}A1200 hardware bug@{ub}@{uu}
|
||||||
|
|
||||||
|
The A1200 (but not the A600) has a hardware bug which prevents a card being
|
||||||
|
reset except on insertion or removal. There are both hardware and software
|
||||||
|
remedies for this problem. The software solution is CardReset
|
||||||
|
(util/boot/CardReset.lha on Aminet). There are several different types of
|
||||||
|
hardware fixes, some of which are available commercially.
|
||||||
|
|
||||||
|
@{u}@{b}Problems@{ub}@{uu}
|
||||||
|
|
||||||
|
With some A1200 motherboards, hot insertion or removal of a 3c589-compatible
|
||||||
|
card may cause the system to reset.
|
||||||
|
|
||||||
|
Miami will cause the system to hang if the card is removed while online.
|
||||||
|
Re-insertion won't help.
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
|
@node "performance" "Performance"
|
||||||
|
|
||||||
|
@{u}@{b}Performance@{ub}@{uu}
|
||||||
|
|
||||||
|
On a 40MHz 68030 system, the following FTP speeds have been achieved:
|
||||||
|
|
||||||
|
@{b}@{u}Upload@{uu} @{u}Download@{ub}@{uu}
|
||||||
|
@{i}kbytes/s kbytes/s@{ui}
|
||||||
|
|
||||||
|
@{b}AmiTCP 3.0b:@{ub} 407 497
|
||||||
|
@{b}Genesis:@{ub} 373 551
|
||||||
|
@{b}Miami 3.2b:@{ub} 191 279
|
||||||
|
|
||||||
|
There is no version of the device specially compiled for CPUs above the
|
||||||
|
68000, since there was no performance benefit.
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
|
@node "author-legal" "Author and Legal Information"
|
||||||
|
|
||||||
|
@{u}@{b}Author and Legal Information@{ub}@{uu}
|
||||||
|
|
||||||
|
3c589.device was written by Neil Cafferkey.
|
||||||
|
|
||||||
|
Please send bug reports, suggestions, and any other correspondence to one of
|
||||||
|
the following addresses.
|
||||||
|
|
||||||
|
E-mail: caffer@cs.ucc.ie
|
||||||
|
|
||||||
|
Post: Neil Cafferkey,
|
||||||
|
30, Upper Kensington,
|
||||||
|
Rochestown,
|
||||||
|
Cork,
|
||||||
|
Ireland.
|
||||||
|
|
||||||
|
3c589.device and pccard.library are released under the terms of the
|
||||||
|
@{"GNU General Public Licence" link "GPL/MAIN"}. See the individual source files for copyright
|
||||||
|
information.
|
||||||
|
|
||||||
|
The full pccard.library archive, which includes the source code and
|
||||||
|
developer files, is available on Aminet as "util/libs/pccard.lha".
|
||||||
|
|
||||||
|
All trademarks are owned by their owners.
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
|
@node "history" "History"
|
||||||
|
|
||||||
|
@{u}@{b}History@{ub}@{uu}
|
||||||
|
|
||||||
|
@{b}V1.5 (February 2010)@{ub}
|
||||||
|
|
||||||
|
- Fixed lock-up when closing device under AmigaOS 4.0.
|
||||||
|
|
||||||
|
@{b}V1.4 (March 2004)@{ub}
|
||||||
|
|
||||||
|
- Now works with 3C562D/3C563D (thanks to Francisco Miguel Guerrero García
|
||||||
|
for lending me one of these cards).
|
||||||
|
- Multicast and broadcast flags weren't set properly. Fixed.
|
||||||
|
- Fixed memory leak in initialisation code (thanks to Adam Markiewicz).
|
||||||
|
- Only the first packet read in any interrupt could be recognised as
|
||||||
|
an orphan. Fixed.
|
||||||
|
- Support for IEEE 802.3 frames.
|
||||||
|
- Fixed bug in media selection code.
|
||||||
|
- Removed request for information about Farallon and Motorola cards, since
|
||||||
|
it appears that they use the same manufacturer and product codes as the
|
||||||
|
official 3Com cards, and hence already work (thanks to Kjell Linden).
|
||||||
|
- Fixed a bug in handling transmission errors.
|
||||||
|
|
||||||
|
@{b}V1.3 (February 2003)@{ub}
|
||||||
|
|
||||||
|
- Added 4 to reported length of incoming raw packets to make ShapeShifter
|
||||||
|
and Fusion work (thanks to Marcin Ozdzinski).
|
||||||
|
- Fixed a buffer overrun.
|
||||||
|
|
||||||
|
@{b}V1.2 (January 2003)@{ub}
|
||||||
|
|
||||||
|
- Bug fix: couldn't handle more than 64kb of attribute address space,
|
||||||
|
causing some cards not to work (thanks to Tom Parker).
|
||||||
|
|
||||||
|
@{b}V1.1 (January 2003)@{ub}
|
||||||
|
|
||||||
|
- First release.
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
|
@node "cable" "Cable Types"
|
||||||
|
|
||||||
|
10baseT: Twisted Pair (TP) cabling with RJ45 connectors.
|
||||||
|
|
||||||
|
10base2: Thin coaxial cable with BNC connectors.
|
||||||
|
|
||||||
|
@endnode
|
||||||
|
|
||||||
|
|
||||||
BIN
Binary file not shown.
@@ -0,0 +1,20 @@
|
|||||||
|
Short: Driver for 3Com PCMCIA network cards
|
||||||
|
Author: caffer@cs.ucc.ie (Neil Cafferkey)
|
||||||
|
Uploader: caffer@cs.ucc.ie (Neil Cafferkey)
|
||||||
|
Version: 1.5
|
||||||
|
Type: driver/net
|
||||||
|
Requires: A1200 or A600, compatible card
|
||||||
|
Architecture: m68k-amigaos >= 2.0.0
|
||||||
|
|
||||||
|
3c589.device is a SANA-II network driver for 3Com Etherlink III PC Cards
|
||||||
|
(PCMCIA cards). Note that not all 3Com cards work with this driver, and that
|
||||||
|
some compatible cards are rebranded by other manufacturers. See the
|
||||||
|
documentation in the archive for a list of compatible cards. In short,
|
||||||
|
10 Mbps cards work; 100 Mbps cards do not.
|
||||||
|
|
||||||
|
This package is released under the GNU General Public Licence.
|
||||||
|
|
||||||
|
Changes in this version:
|
||||||
|
|
||||||
|
- Fixed lock-up when closing device under AmigaOS 4.0.
|
||||||
|
|
||||||
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,31 @@
|
|||||||
|
# File: Makefile
|
||||||
|
|
||||||
|
CFLAGS = -msmall-code -O3 -ansi -Wall -Wno-uninitialized -Wno-parentheses
|
||||||
|
CC = gcc $(CFLAGS)
|
||||||
|
MAKEFILE = Makefile
|
||||||
|
LINKER = ld -e _Main -s
|
||||||
|
AMIGA_LIB = GG:lib/libamiga.a
|
||||||
|
C_LIB = GG:lib/libnix/libnix13.a
|
||||||
|
|
||||||
|
DEV_NAME = 3c589.device
|
||||||
|
OBJS = device.o unit.o request.o
|
||||||
|
HDRS = device.h
|
||||||
|
|
||||||
|
.c.o :
|
||||||
|
$(CC) -c $<
|
||||||
|
|
||||||
|
$(DEV_NAME): $(MAKEFILE) $(OBJS)
|
||||||
|
$(LINKER) $(OBJS) $(AMIGA_LIB) $(C_LIB) -o $(DEV_NAME)
|
||||||
|
Protect "$(DEV_NAME)" "-e"
|
||||||
|
|
||||||
|
$(OBJS): $(MAKEFILE) $(HDRS)
|
||||||
|
|
||||||
|
unit.o: etherlink3.h
|
||||||
|
|
||||||
|
install: $(DEV_NAME)
|
||||||
|
Copy CLONE "$(DEV_NAME)" "DEVS:networks/"
|
||||||
|
Flush "$(DEV_NAME)"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
Delete "$(DEV_NAME)" "#?.o"
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
DESIGN NOTES:
|
||||||
|
|
||||||
|
- Type tracking has been implemented in an unusual way in order to make it
|
||||||
|
more suitable for multiple users. Each client that tracks a particular
|
||||||
|
packet type is given the impression that it is the only one doing so.
|
||||||
|
When a client begins tracking a packet type that is already being
|
||||||
|
tracked, the current packet statistics are recorded internally. These
|
||||||
|
initial statistics are then subtracted from the figures returned from
|
||||||
|
every S2_GETTYPESTATS call the client makes.
|
||||||
|
- The cards' 8-bit statistics registers appear to be unreadable using the
|
||||||
|
A1200's PCMCIA slot.
|
||||||
|
- S2_CopyToBuff32 functions are not used because the non-raw portion of
|
||||||
|
received packets is not 32-bit aligned.
|
||||||
|
|
||||||
|
|
||||||
|
TCP/IP STACK BUGS TO CONSIDER:
|
||||||
|
|
||||||
|
- Miami(DX) doesn't like requests being aborted upon S2_OFFLINE.
|
||||||
|
- MiamiDX's CopyFromBuff16/32 functions appear to be broken.
|
||||||
|
- Genesis calls S2_ONLINE before S2_CONFIGINTERFACE?
|
||||||
|
- When a device goes back online without Genesis's intervention, Genesis
|
||||||
|
displays the message "eth0 is online again" or similar, but keeps the
|
||||||
|
interface's indicator red and doesn't disable the "Online" button or
|
||||||
|
enable the "Offline" button.
|
||||||
|
|
||||||
|
|
||||||
+651
@@ -0,0 +1,651 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
File: device.c
|
||||||
|
Author: Neil Cafferkey
|
||||||
|
Copyright (C) 2000-2010 Neil Cafferkey
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <exec/types.h>
|
||||||
|
#include <exec/resident.h>
|
||||||
|
#include <exec/errors.h>
|
||||||
|
#include <utility/utility.h>
|
||||||
|
#include "initializers.h"
|
||||||
|
|
||||||
|
#include <proto/exec.h>
|
||||||
|
#include <proto/alib.h>
|
||||||
|
#include <proto/utility.h>
|
||||||
|
|
||||||
|
#include "device.h"
|
||||||
|
|
||||||
|
#include "unit_protos.h"
|
||||||
|
#include "request_protos.h"
|
||||||
|
|
||||||
|
#define VERSION 1
|
||||||
|
#define REVISION 5
|
||||||
|
#define UNIT_COUNT 1
|
||||||
|
#define UTILITY_VERSION 36
|
||||||
|
#define PCCARD_VERSION 1
|
||||||
|
|
||||||
|
|
||||||
|
/* Private prototypes */
|
||||||
|
|
||||||
|
static struct DevBase *DevInit(struct DevBase *dev_base REG("d0"),
|
||||||
|
APTR seg_list REG("a0"),struct DevBase *base REG(BASE_REG));
|
||||||
|
static BYTE DevOpen(ULONG unit_no REG("d0"),
|
||||||
|
struct IOSana2Req *request REG("a1"),ULONG flags REG("d1"),
|
||||||
|
struct DevBase *base REG(BASE_REG));
|
||||||
|
static APTR DevClose(struct IOSana2Req *request REG("a1"),
|
||||||
|
struct DevBase *base REG(BASE_REG));
|
||||||
|
static APTR DevExpunge(struct DevBase *base REG(BASE_REG));
|
||||||
|
static APTR DevReserved();
|
||||||
|
static VOID DevBeginIO(struct IOSana2Req *request REG("a1"),
|
||||||
|
struct DevBase *base REG(BASE_REG));
|
||||||
|
static VOID DevAbortIO(struct IOSana2Req *request REG("a1"),
|
||||||
|
struct DevBase *base REG(BASE_REG));
|
||||||
|
VOID DeleteDevice(struct DevBase *base);
|
||||||
|
|
||||||
|
extern const APTR vectors[];
|
||||||
|
extern const APTR init_table[];
|
||||||
|
|
||||||
|
|
||||||
|
/* Return an error immediately if someone tries to run the device */
|
||||||
|
|
||||||
|
LONG Main()
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEVICE_NAME "3c589.device"
|
||||||
|
|
||||||
|
const TEXT device_name[]=DEVICE_NAME;
|
||||||
|
static const TEXT version_string[]=DEVICE_NAME " 1.5 (3.2.2010)\n";
|
||||||
|
static const TEXT card_name[]=CARDRESNAME;
|
||||||
|
static const TEXT utility_name[]=UTILITYNAME;
|
||||||
|
static const TEXT pccard_name[]=PCCARDNAME;
|
||||||
|
static const TEXT timer_name[]=TIMERNAME;
|
||||||
|
|
||||||
|
|
||||||
|
const struct Resident device_rom_tag=
|
||||||
|
{
|
||||||
|
RTC_MATCHWORD,
|
||||||
|
(struct Resident *)&device_rom_tag,
|
||||||
|
(APTR)init_table,
|
||||||
|
RTF_AUTOINIT,
|
||||||
|
VERSION,
|
||||||
|
NT_DEVICE,
|
||||||
|
0,
|
||||||
|
(STRPTR)device_name,
|
||||||
|
(STRPTR)version_string,
|
||||||
|
(APTR)init_table
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const APTR vectors[]=
|
||||||
|
{
|
||||||
|
(APTR)DevOpen,
|
||||||
|
(APTR)DevClose,
|
||||||
|
(APTR)DevExpunge,
|
||||||
|
(APTR)DevReserved,
|
||||||
|
(APTR)DevBeginIO,
|
||||||
|
(APTR)DevAbortIO,
|
||||||
|
(APTR)-1
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const struct
|
||||||
|
{
|
||||||
|
SMALLINITBYTEDEF(type);
|
||||||
|
SMALLINITPINTDEF(name);
|
||||||
|
SMALLINITBYTEDEF(flags);
|
||||||
|
SMALLINITWORDDEF(version);
|
||||||
|
SMALLINITWORDDEF(revision);
|
||||||
|
SMALLINITPINTDEF(id_string);
|
||||||
|
INITENDDEF;
|
||||||
|
}
|
||||||
|
init_data=
|
||||||
|
{
|
||||||
|
SMALLINITBYTE(OFFSET(Node,ln_Type),NT_DEVICE),
|
||||||
|
SMALLINITPINT(OFFSET(Node,ln_Name),device_name),
|
||||||
|
SMALLINITBYTE(OFFSET(Library,lib_Flags),LIBF_SUMUSED|LIBF_CHANGED),
|
||||||
|
SMALLINITWORD(OFFSET(Library,lib_Version),VERSION),
|
||||||
|
SMALLINITWORD(OFFSET(Library,lib_Revision),REVISION),
|
||||||
|
SMALLINITPINT(OFFSET(Library,lib_IdString),version_string),
|
||||||
|
INITEND
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const APTR init_table[]=
|
||||||
|
{
|
||||||
|
(APTR)sizeof(struct DevBase),
|
||||||
|
(APTR)vectors,
|
||||||
|
(APTR)&init_data,
|
||||||
|
(APTR)DevInit
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const ULONG rx_tags[]=
|
||||||
|
{
|
||||||
|
S2_CopyToBuff,
|
||||||
|
S2_CopyToBuff16
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const ULONG tx_tags[]=
|
||||||
|
{
|
||||||
|
S2_CopyFromBuff,
|
||||||
|
S2_CopyFromBuff16,
|
||||||
|
S2_CopyFromBuff32
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevInit ***********************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevInit -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* dev_base = DevInit(dev_base,seg_list)
|
||||||
|
*
|
||||||
|
* struct DevBase *DevInit(struct DevBase *,APTR);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct DevBase *DevInit(struct DevBase *dev_base REG("d0"),
|
||||||
|
APTR seg_list REG("a0"),struct DevBase *base REG(BASE_REG))
|
||||||
|
{
|
||||||
|
BOOL success=TRUE;
|
||||||
|
|
||||||
|
dev_base->sys_base=(APTR)base;
|
||||||
|
base=dev_base;
|
||||||
|
base->seg_list=seg_list;
|
||||||
|
|
||||||
|
base->card_base=OpenResource(card_name);
|
||||||
|
base->utility_base=(APTR)OpenLibrary(utility_name,UTILITY_VERSION);
|
||||||
|
base->pccard_base=OpenLibrary(pccard_name,PCCARD_VERSION);
|
||||||
|
if((base->card_base==NULL)||(base->utility_base==NULL)||
|
||||||
|
(base->pccard_base==NULL))
|
||||||
|
success=FALSE;
|
||||||
|
|
||||||
|
if(OpenDevice(timer_name,UNIT_VBLANK,(APTR)&base->timer_request,0)!=0)
|
||||||
|
success=FALSE;
|
||||||
|
|
||||||
|
NewList((APTR)(&dev_base->units));
|
||||||
|
|
||||||
|
if(!success)
|
||||||
|
{
|
||||||
|
DeleteDevice(base);
|
||||||
|
base=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevOpen ***********************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevOpen -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* error = DevOpen(unit_num,request,flags)
|
||||||
|
*
|
||||||
|
* BYTE DevOpen(ULONG,struct IOSana2Req *,ULONG);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static BYTE DevOpen(ULONG unit_num REG("d0"),
|
||||||
|
struct IOSana2Req *request REG("a1"),ULONG flags REG("d1"),
|
||||||
|
struct DevBase *base REG(BASE_REG))
|
||||||
|
{
|
||||||
|
struct DevUnit *unit;
|
||||||
|
BYTE error=0;
|
||||||
|
struct Opener *opener;
|
||||||
|
struct TagItem *tag_list;
|
||||||
|
UWORD i;
|
||||||
|
|
||||||
|
base->device.dd_Library.lib_OpenCnt++;
|
||||||
|
base->device.dd_Library.lib_Flags&=~LIBF_DELEXP;
|
||||||
|
|
||||||
|
request->ios2_Req.io_Unit=NULL;
|
||||||
|
tag_list=request->ios2_BufferManagement;
|
||||||
|
request->ios2_BufferManagement=NULL;
|
||||||
|
|
||||||
|
/* Check request size and unit number */
|
||||||
|
|
||||||
|
if((request->ios2_Req.io_Message.mn_Length<sizeof(struct IOSana2Req))
|
||||||
|
||(unit_num>=UNIT_COUNT))
|
||||||
|
error=IOERR_OPENFAIL;
|
||||||
|
|
||||||
|
/* Get the requested unit */
|
||||||
|
|
||||||
|
if(error==0)
|
||||||
|
{
|
||||||
|
request->ios2_Req.io_Unit=(APTR)unit=GetUnit(unit_num,base);
|
||||||
|
if(unit==NULL)
|
||||||
|
error=IOERR_OPENFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle device sharing */
|
||||||
|
|
||||||
|
if(error==0)
|
||||||
|
{
|
||||||
|
if((unit->open_count!=0)&&(((unit->flags&UNITF_SHARED)==0)||
|
||||||
|
((flags&SANA2OPF_MINE)!=0)))
|
||||||
|
error=IOERR_UNITBUSY;
|
||||||
|
unit->open_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(error==0)
|
||||||
|
{
|
||||||
|
if((flags&SANA2OPF_MINE)==0)
|
||||||
|
unit->flags|=UNITF_SHARED;
|
||||||
|
else if((flags&SANA2OPF_PROM)!=0)
|
||||||
|
unit->flags|=UNITF_PROM;
|
||||||
|
|
||||||
|
/* Set up buffer-management structure and get hooks */
|
||||||
|
|
||||||
|
request->ios2_BufferManagement=opener=
|
||||||
|
AllocVec(sizeof(struct Opener),MEMF_PUBLIC);
|
||||||
|
if(opener==NULL)
|
||||||
|
error=IOERR_OPENFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(error==0)
|
||||||
|
{
|
||||||
|
NewList(&opener->read_port.mp_MsgList);
|
||||||
|
opener->read_port.mp_Flags=PA_IGNORE;
|
||||||
|
NewList((APTR)&opener->initial_stats);
|
||||||
|
|
||||||
|
for(i=0;i<2;i++)
|
||||||
|
opener->rx_function=(APTR)GetTagData(rx_tags[i],
|
||||||
|
(UPINT)opener->rx_function,tag_list);
|
||||||
|
for(i=0;i<3;i++)
|
||||||
|
opener->tx_function=(APTR)GetTagData(tx_tags[i],
|
||||||
|
(UPINT)opener->tx_function,tag_list);
|
||||||
|
|
||||||
|
opener->filter_hook=(APTR)GetTagData(S2_PacketFilter,NULL,tag_list);
|
||||||
|
opener->dma_tx_function=
|
||||||
|
(APTR)GetTagData(S2_DMACopyFromBuff32,NULL,tag_list);
|
||||||
|
|
||||||
|
Disable();
|
||||||
|
AddTail((APTR)&unit->openers,(APTR)opener);
|
||||||
|
Enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Back out if anything went wrong */
|
||||||
|
|
||||||
|
if(error!=0)
|
||||||
|
DevClose(request,base);
|
||||||
|
|
||||||
|
/* Return */
|
||||||
|
|
||||||
|
request->ios2_Req.io_Error=error;
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevClose **********************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevClose -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* seg_list = DevClose(request)
|
||||||
|
*
|
||||||
|
* APTR DevClose(struct IOSana2Req *);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static APTR DevClose(struct IOSana2Req *request REG("a1"),
|
||||||
|
struct DevBase *base REG(BASE_REG))
|
||||||
|
{
|
||||||
|
struct DevUnit *unit;
|
||||||
|
APTR seg_list;
|
||||||
|
struct Opener *opener;
|
||||||
|
|
||||||
|
/* Free buffer-management resources */
|
||||||
|
|
||||||
|
opener=(APTR)request->ios2_BufferManagement;
|
||||||
|
if(opener!=NULL)
|
||||||
|
{
|
||||||
|
Disable();
|
||||||
|
Remove((APTR)opener);
|
||||||
|
Enable();
|
||||||
|
FreeVec(opener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Delete the unit if it's no longer in use */
|
||||||
|
|
||||||
|
unit=(APTR)request->ios2_Req.io_Unit;
|
||||||
|
if(unit!=NULL)
|
||||||
|
{
|
||||||
|
if((--unit->open_count)==0)
|
||||||
|
{
|
||||||
|
Remove((APTR)unit);
|
||||||
|
DeleteUnit(unit,base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Expunge the device if a delayed expunge is pending */
|
||||||
|
|
||||||
|
seg_list=NULL;
|
||||||
|
|
||||||
|
if((--base->device.dd_Library.lib_OpenCnt)==0)
|
||||||
|
{
|
||||||
|
if((base->device.dd_Library.lib_Flags&LIBF_DELEXP)!=0)
|
||||||
|
seg_list=DevExpunge(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
return seg_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevExpunge ********************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevExpunge -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* seg_list = DevExpunge()
|
||||||
|
*
|
||||||
|
* APTR DevExpunge(VOID);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static APTR DevExpunge(struct DevBase *base REG(BASE_REG))
|
||||||
|
{
|
||||||
|
APTR seg_list;
|
||||||
|
|
||||||
|
if(base->device.dd_Library.lib_OpenCnt==0)
|
||||||
|
{
|
||||||
|
seg_list=base->seg_list;
|
||||||
|
Remove((APTR)base);
|
||||||
|
DeleteDevice(base);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base->device.dd_Library.lib_Flags|=LIBF_DELEXP;
|
||||||
|
seg_list=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return seg_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevReserved *******************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevReserved -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* result = DevReserved()
|
||||||
|
*
|
||||||
|
* APTR DevReserved(VOID);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static APTR DevReserved()
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevBeginIO ********************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevBeginIO -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* DevBeginIO(request)
|
||||||
|
*
|
||||||
|
* VOID DevBeginIO(struct IORequest *);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VOID DevBeginIO(struct IOSana2Req *request REG("a1"),
|
||||||
|
struct DevBase *base REG(BASE_REG))
|
||||||
|
{
|
||||||
|
struct DevUnit *unit;
|
||||||
|
|
||||||
|
request->ios2_Req.io_Error=0;
|
||||||
|
unit=(APTR)request->ios2_Req.io_Unit;
|
||||||
|
|
||||||
|
if(AttemptSemaphore(&unit->access_lock))
|
||||||
|
ServiceRequest(request,base);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PutRequest(unit->request_ports[GENERAL_QUEUE],(APTR)request,base);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DevAbortIO ********************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DevAbortIO -- Try to stop a request.
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* DevAbortIO(request)
|
||||||
|
*
|
||||||
|
* VOID DevAbortIO(struct IOSana2Req *);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
* Do our best to halt the progress of a request.
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
* Disable() used instead of a semaphore because device uses interrupts.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VOID DevAbortIO(struct IOSana2Req *request REG("a1"),
|
||||||
|
struct DevBase *base REG(BASE_REG))
|
||||||
|
{
|
||||||
|
struct DevUnit *unit;
|
||||||
|
|
||||||
|
unit=(APTR)request->ios2_Req.io_Unit;
|
||||||
|
|
||||||
|
Disable();
|
||||||
|
if((request->ios2_Req.io_Message.mn_Node.ln_Type==NT_MESSAGE)
|
||||||
|
&&((request->ios2_Req.io_Flags&IOF_QUICK)==0))
|
||||||
|
{
|
||||||
|
Remove((APTR)request);
|
||||||
|
request->ios2_Req.io_Error=IOERR_ABORTED;
|
||||||
|
request->ios2_WireError=S2WERR_GENERIC_ERROR;
|
||||||
|
ReplyMsg((APTR)request);
|
||||||
|
}
|
||||||
|
Enable();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****i* 3c589.device/DeleteDevice ******************************************
|
||||||
|
*
|
||||||
|
* NAME
|
||||||
|
* DeleteDevice -- .
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
* DeleteDevice()
|
||||||
|
*
|
||||||
|
* VOID DeleteDevice(VOID);
|
||||||
|
*
|
||||||
|
* FUNCTION
|
||||||
|
*
|
||||||
|
* INPUTS
|
||||||
|
*
|
||||||
|
* RESULT
|
||||||
|
*
|
||||||
|
* EXAMPLE
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* BUGS
|
||||||
|
*
|
||||||
|
* SEE ALSO
|
||||||
|
*
|
||||||
|
****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
VOID DeleteDevice(struct DevBase *base)
|
||||||
|
{
|
||||||
|
UWORD neg_size,pos_size;
|
||||||
|
|
||||||
|
/* Close devices */
|
||||||
|
|
||||||
|
CloseDevice((APTR)&base->timer_request);
|
||||||
|
|
||||||
|
/* Close libraries */
|
||||||
|
|
||||||
|
if(base->pccard_base!=NULL)
|
||||||
|
CloseLibrary(base->pccard_base);
|
||||||
|
if(base->utility_base!=NULL)
|
||||||
|
CloseLibrary((APTR)base->utility_base);
|
||||||
|
|
||||||
|
/* Free device's memory */
|
||||||
|
|
||||||
|
neg_size=base->device.dd_Library.lib_NegSize;
|
||||||
|
pos_size=base->device.dd_Library.lib_PosSize;
|
||||||
|
FreeMem((UBYTE *)base-neg_size,pos_size+neg_size);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+257
@@ -0,0 +1,257 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (C) 2001-2004 Neil Cafferkey
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DEVICE_H
|
||||||
|
#define DEVICE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <exec/types.h>
|
||||||
|
#include <exec/devices.h>
|
||||||
|
#include <exec/interrupts.h>
|
||||||
|
#include <exec/semaphores.h>
|
||||||
|
#include <devices/sana2.h>
|
||||||
|
#include <devices/sana2specialstats.h>
|
||||||
|
#include <resources/card.h>
|
||||||
|
#include <libraries/pccard.h>
|
||||||
|
#include <devices/timer.h>
|
||||||
|
|
||||||
|
#ifndef UPINT
|
||||||
|
typedef ULONG UPINT;
|
||||||
|
typedef LONG PINT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mc68000
|
||||||
|
#define REG(A) __asm(A)
|
||||||
|
#else
|
||||||
|
#define REG(A)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define USE_HACKS
|
||||||
|
|
||||||
|
|
||||||
|
struct DevBase
|
||||||
|
{
|
||||||
|
struct Device device;
|
||||||
|
APTR seg_list;
|
||||||
|
struct ExecBase *sys_base;
|
||||||
|
APTR card_base;
|
||||||
|
struct UtilityBase *utility_base;
|
||||||
|
struct Library *pccard_base;
|
||||||
|
struct MinList units;
|
||||||
|
struct timerequest timer_request;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
WRITE_QUEUE,
|
||||||
|
ADOPT_QUEUE,
|
||||||
|
EVENT_QUEUE,
|
||||||
|
GENERAL_QUEUE,
|
||||||
|
REQUEST_QUEUE_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ADDRESS_SIZE 6
|
||||||
|
#define HEADER_SIZE 14
|
||||||
|
#define PREAMBLE_SIZE 4
|
||||||
|
#define PACKET_DEST 0
|
||||||
|
#define PACKET_SOURCE 6
|
||||||
|
#define PACKET_TYPE 12
|
||||||
|
#define PACKET_DATA 14
|
||||||
|
#define MTU 1500
|
||||||
|
#define MAX_PACKET_SIZE ((HEADER_SIZE)+(MTU))
|
||||||
|
|
||||||
|
#define STAT_COUNT 3
|
||||||
|
|
||||||
|
|
||||||
|
struct DevUnit
|
||||||
|
{
|
||||||
|
struct MinNode node;
|
||||||
|
ULONG unit_num;
|
||||||
|
ULONG open_count;
|
||||||
|
UWORD flags;
|
||||||
|
UWORD transceiver;
|
||||||
|
struct Task *task;
|
||||||
|
struct MsgPort *request_ports[REQUEST_QUEUE_COUNT];
|
||||||
|
struct DevBase *device;
|
||||||
|
struct CardHandle *card_handle;
|
||||||
|
UBYTE *tuple_buffer;
|
||||||
|
UBYTE *rx_buffer;
|
||||||
|
UBYTE *tx_buffer;
|
||||||
|
volatile UBYTE *config_base;
|
||||||
|
volatile UBYTE *io_base;
|
||||||
|
ULONG card_removed_signal;
|
||||||
|
ULONG card_inserted_signal;
|
||||||
|
ULONG range_count;
|
||||||
|
UBYTE address[ADDRESS_SIZE];
|
||||||
|
UBYTE default_address[ADDRESS_SIZE];
|
||||||
|
struct MinList openers;
|
||||||
|
struct MinList type_trackers;
|
||||||
|
struct MinList multicast_ranges;
|
||||||
|
struct Interrupt rx_int;
|
||||||
|
struct Interrupt tx_int;
|
||||||
|
struct Sana2DeviceStats stats;
|
||||||
|
ULONG special_stats[STAT_COUNT];
|
||||||
|
struct SignalSemaphore access_lock;
|
||||||
|
UWORD rx_filter_cmd;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct Opener
|
||||||
|
{
|
||||||
|
struct MinNode node;
|
||||||
|
struct MsgPort read_port;
|
||||||
|
BOOL (*rx_function)(APTR REG("a0"),APTR REG("a1"),ULONG REG("d0"));
|
||||||
|
BOOL (*tx_function)(APTR REG("a0"),APTR REG("a1"),ULONG REG("d0"));
|
||||||
|
ULONG *(*dma_tx_function)(APTR REG("a0"));
|
||||||
|
struct Hook *filter_hook;
|
||||||
|
struct MinList initial_stats;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct TypeStats
|
||||||
|
{
|
||||||
|
struct MinNode node;
|
||||||
|
ULONG packet_type;
|
||||||
|
struct Sana2PacketTypeStats stats;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct TypeTracker
|
||||||
|
{
|
||||||
|
struct MinNode node;
|
||||||
|
ULONG packet_type;
|
||||||
|
struct Sana2PacketTypeStats stats;
|
||||||
|
ULONG user_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct AddressRange
|
||||||
|
{
|
||||||
|
struct MinNode node;
|
||||||
|
ULONG add_count;
|
||||||
|
ULONG lower_bound_left;
|
||||||
|
ULONG upper_bound_left;
|
||||||
|
UWORD lower_bound_right;
|
||||||
|
UWORD upper_bound_right;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Unit flags */
|
||||||
|
|
||||||
|
#define UNITF_SHARED (1<<0)
|
||||||
|
#define UNITF_ONLINE (1<<1)
|
||||||
|
#define UNITF_HAVECARD (1<<2)
|
||||||
|
#define UNITF_HAVEADAPTER (1<<3)
|
||||||
|
#define UNITF_CONFIGURED (1<<4)
|
||||||
|
#define UNITF_PROM (1<<5)
|
||||||
|
#define UNITF_ROADRUNNER (1<<6)
|
||||||
|
|
||||||
|
|
||||||
|
IMPORT const TEXT device_name[];
|
||||||
|
|
||||||
|
#define HANDLE_PRIORITY 10
|
||||||
|
|
||||||
|
#define S2_3C589_WRITEEEPROM 0x998f
|
||||||
|
|
||||||
|
|
||||||
|
/* Endianness macros */
|
||||||
|
|
||||||
|
#define BEWord(A)\
|
||||||
|
(A)
|
||||||
|
|
||||||
|
#define MakeBEWord(A)\
|
||||||
|
BEWord(A)
|
||||||
|
|
||||||
|
#define LEWord(A)\
|
||||||
|
({\
|
||||||
|
UWORD _LEWord_A=(A);\
|
||||||
|
_LEWord_A=((_LEWord_A)<<8)|((_LEWord_A)>>8);\
|
||||||
|
})
|
||||||
|
|
||||||
|
#define MakeLEWord(A)\
|
||||||
|
LEWord(A)
|
||||||
|
|
||||||
|
#define BELong(A)\
|
||||||
|
(A)
|
||||||
|
|
||||||
|
#define LELong(A)\
|
||||||
|
({\
|
||||||
|
ULONG _LELong_A=(A);\
|
||||||
|
_LELong_A=(LEWord(_LELong_A)<<16)|LEWord((_LELong_A)>>16);\
|
||||||
|
})
|
||||||
|
|
||||||
|
#define MakeLELong(A)\
|
||||||
|
LELong(A)
|
||||||
|
|
||||||
|
|
||||||
|
/* I/O macros */
|
||||||
|
|
||||||
|
#define ByteIn(address)\
|
||||||
|
(*((volatile UBYTE *)(address)))
|
||||||
|
|
||||||
|
#define ByteOut(address,value)\
|
||||||
|
*((volatile UBYTE *)(address))=(value)
|
||||||
|
|
||||||
|
#define WordIn(address)\
|
||||||
|
(*((volatile UWORD *)(address)))
|
||||||
|
|
||||||
|
#define WordOut(address,value)\
|
||||||
|
*((volatile UWORD *)(address))=(value)
|
||||||
|
|
||||||
|
#define LongIn(address)\
|
||||||
|
(*((volatile ULONG *)(address)))
|
||||||
|
|
||||||
|
#define LongOut(address,value)\
|
||||||
|
*((volatile ULONG *)(address))=(value)
|
||||||
|
|
||||||
|
#define LEWordIn(address)\
|
||||||
|
LEWord(WordIn(address))
|
||||||
|
|
||||||
|
#define LEWordOut(address,value)\
|
||||||
|
WordOut(address,MakeLEWord(value))
|
||||||
|
|
||||||
|
#define LELongIn(address)\
|
||||||
|
LELong(LongIn(address))
|
||||||
|
|
||||||
|
#define LELongOut(address,value)\
|
||||||
|
LongOut(address,MakeLELong(value))
|
||||||
|
|
||||||
|
#define BEWordOut(address,value)\
|
||||||
|
WordOut(address,MakeBEWord(value))
|
||||||
|
|
||||||
|
|
||||||
|
/* Library and device bases */
|
||||||
|
|
||||||
|
#define SysBase (base->sys_base)
|
||||||
|
#define CardResource (base->card_base)
|
||||||
|
#define UtilityBase (base->utility_base)
|
||||||
|
#define PCCardBase (base->pccard_base)
|
||||||
|
#define TimerBase (base->timer_request.tr_node.io_Device)
|
||||||
|
|
||||||
|
#ifndef BASE_REG
|
||||||
|
#define BASE_REG "a6"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*register APTR base asm(BASE_REG);*/
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,320 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (C) 2002 Neil Cafferkey
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ETHERLINK3_H
|
||||||
|
#define ETHERLINK3_H
|
||||||
|
|
||||||
|
|
||||||
|
/* Registers */
|
||||||
|
/* ========= */
|
||||||
|
|
||||||
|
/* All Windows */
|
||||||
|
|
||||||
|
#define EL3REG_COMMAND 14
|
||||||
|
#define EL3REG_STATUS 14
|
||||||
|
|
||||||
|
/* Window 0 */
|
||||||
|
|
||||||
|
#define EL3REG_MAKERID 0
|
||||||
|
#define EL3REG_PRODUCTID 2
|
||||||
|
#define EL3REG_ADAPTERID 2
|
||||||
|
#define EL3REG_CONFIG 4
|
||||||
|
#define EL3REG_ADDRCONFIG 6
|
||||||
|
#define EL3REG_RESCONFIG 8 /* also in window 3 */
|
||||||
|
#define EL3REG_EEPROMCMD 10 /* window 2 has alternative version */
|
||||||
|
#define EL3REG_EEPROMDATA 12
|
||||||
|
|
||||||
|
/* Window 1 */
|
||||||
|
|
||||||
|
#define EL3REG_DATA0 0
|
||||||
|
#define EL3REG_DATA1 2
|
||||||
|
#define EL3REG_RXSTATUS 8
|
||||||
|
#define EL3REG_TIMER 10
|
||||||
|
#define EL3REG_TXSTATUS 11
|
||||||
|
#define EL3REG_TXSPACE 12 /* also in window 3 */
|
||||||
|
|
||||||
|
/* Window 2 */
|
||||||
|
|
||||||
|
#define EL3REG_ADDRESS0 0
|
||||||
|
#define EL3REG_ADDRESS1 1
|
||||||
|
#define EL3REG_ADDRESS2 2
|
||||||
|
#define EL3REG_ADDRESS3 3
|
||||||
|
#define EL3REG_ADDRESS4 4
|
||||||
|
#define EL3REG_ADDRESS5 5
|
||||||
|
#define EL3REG_SRAMDIAG 6
|
||||||
|
#define EL3REG_MULTIFUNCCONFIG 8
|
||||||
|
#define EL3REG_ALTEEPROMCMD 10
|
||||||
|
|
||||||
|
/* Window 3 */
|
||||||
|
|
||||||
|
#define EL3REG_ROMCONTROL 4
|
||||||
|
#define EL3REG_TXRECLAIM 6
|
||||||
|
#define EL3REG_RXSPACE 10
|
||||||
|
|
||||||
|
/* Window 4 */
|
||||||
|
|
||||||
|
#define EL3REG_FIFODIAG 4
|
||||||
|
#define EL3REG_NETDIAG 6
|
||||||
|
#define EL3REG_CONTROLLERSTATUS 8
|
||||||
|
#define EL3REG_MEDIA 10
|
||||||
|
|
||||||
|
/* Window 5 */
|
||||||
|
|
||||||
|
#define EL3REG_TXSTARTTHRESH 0
|
||||||
|
#define EL3REG_TXAVAILTHRESH 2
|
||||||
|
#define EL3REG_RXEARLYTHRESH 6
|
||||||
|
#define EL3REG_RXFILTER 8
|
||||||
|
#define EL3REG_INTMASK 10
|
||||||
|
#define EL3REG_READZEROMASK 12
|
||||||
|
|
||||||
|
|
||||||
|
/* (Some) EEPROM data offsets */
|
||||||
|
/* ========================== */
|
||||||
|
|
||||||
|
#define EL3EEPROM_ADDRESS0 0
|
||||||
|
#define EL3EEPROM_ADDRESS1 1
|
||||||
|
#define EL3EEPROM_ADDRESS2 2
|
||||||
|
#define EL3EEPROM_PRODUCTID 3
|
||||||
|
#define EL3EEPROM_MANFDATA0 4
|
||||||
|
#define EL3EEPROM_MANFDATA1 5
|
||||||
|
#define EL3EEPROM_MANFDATA2 6
|
||||||
|
#define EL3EEPROM_MAKERID 7
|
||||||
|
#define EL3EEPROM_ADDRCONFIG 8
|
||||||
|
#define EL3EEPROM_RESCONFIG 9
|
||||||
|
#define EL3EEPROM_ALTADDRESS0 10
|
||||||
|
#define EL3EEPROM_ALTADDRESS1 11
|
||||||
|
#define EL3EEPROM_ALTADDRESS2 12
|
||||||
|
#define EL3EEPROM_SOFTWAREINFO 13
|
||||||
|
#define EL3EEPROM_COMPATIBILITY 14
|
||||||
|
#define EL3EEPROM_CHECKSUM 15
|
||||||
|
|
||||||
|
|
||||||
|
/* EEPROM commands */
|
||||||
|
/* =============== */
|
||||||
|
|
||||||
|
#define EL3ECMD_WRITEDISABLE (0x0<<4)
|
||||||
|
#define EL3ECMD_WRITEALL (0x1<<4)
|
||||||
|
#define EL3ECMD_ERASEALL (0x2<<4)
|
||||||
|
#define EL3ECMD_WRITEENABLE (0x3<<4)
|
||||||
|
#define EL3ECMD_WRITE (0x4<<4)
|
||||||
|
#define EL3ECMD_READ (0x8<<4)
|
||||||
|
#define EL3ECMD_ERASE (0xc<<4)
|
||||||
|
|
||||||
|
|
||||||
|
/* Commands */
|
||||||
|
/* ======== */
|
||||||
|
|
||||||
|
#define EL3CMD_GLOBALRESET (0<<11)
|
||||||
|
#define EL3CMD_SELECTWINDOW (1<<11)
|
||||||
|
#define EL3CMD_STARTCOAX (2<<11)
|
||||||
|
#define EL3CMD_RXDISABLE (3<<11)
|
||||||
|
#define EL3CMD_RXENABLE (4<<11)
|
||||||
|
#define EL3CMD_RXRESET (5<<11)
|
||||||
|
#define EL3CMD_RXDISCARD (8<<11)
|
||||||
|
#define EL3CMD_TXENABLE (9<<11)
|
||||||
|
#define EL3CMD_TXDISABLE (10<<11)
|
||||||
|
#define EL3CMD_TXRESET (11<<11)
|
||||||
|
#define EL3CMD_REQINT (12<<11)
|
||||||
|
#define EL3CMD_ACKINT (13<<11)
|
||||||
|
#define EL3CMD_SETINTMASK (14<<11)
|
||||||
|
#define EL3CMD_SETZEROMASK (15<<11)
|
||||||
|
#define EL3CMD_SETRXFILTER (16<<11)
|
||||||
|
#define EL3CMD_SETRXTHRESH (17<<11)
|
||||||
|
#define EL3CMD_SETTXTHRESH (18<<11)
|
||||||
|
#define EL3CMD_SETTXSTART (19<<11)
|
||||||
|
#define EL3CMD_STATSENABLE (21<<11)
|
||||||
|
#define EL3CMD_STATSDISABLE (22<<11)
|
||||||
|
#define EL3CMD_STOPCOAX (23<<11)
|
||||||
|
#define EL3CMD_POWERUP (27<<11)
|
||||||
|
#define EL3CMD_POWERDOWN (28<<11)
|
||||||
|
#define EL3CMD_POWERAUTO (29<<11)
|
||||||
|
|
||||||
|
|
||||||
|
/* Interrupt types */
|
||||||
|
/* =============== */
|
||||||
|
|
||||||
|
#define EL3INTB_UPDATESTATS 7
|
||||||
|
#define EL3INTB_REQINT 6
|
||||||
|
#define EL3INTB_RXEARLY 5
|
||||||
|
#define EL3INTB_RXCOMPLETE 4
|
||||||
|
#define EL3INTB_TXAVAIL 3
|
||||||
|
#define EL3INTB_TXCOMPLETE 2
|
||||||
|
#define EL3INTB_FAILURE 1
|
||||||
|
#define EL3INTB_ANY 0
|
||||||
|
|
||||||
|
#define EL3INTF_UPDATESTATS (1<<EL3INTB_UPDATESTATS)
|
||||||
|
#define EL3INTF_REQINT (1<<EL3INTB_REQINT)
|
||||||
|
#define EL3INTF_RXEARLY (1<<EL3INTB_RXEARLY)
|
||||||
|
#define EL3INTF_RXCOMPLETE (1<<EL3INTB_RXCOMPLETE)
|
||||||
|
#define EL3INTF_TXAVAIL (1<<EL3INTB_TXAVAIL)
|
||||||
|
#define EL3INTF_TXCOMPLETE (1<<EL3INTB_TXCOMPLETE)
|
||||||
|
#define EL3INTF_FAILURE (1<<EL3INTB_FAILURE)
|
||||||
|
#define EL3INTF_ANY (1<<EL3INTB_ANY)
|
||||||
|
|
||||||
|
|
||||||
|
/* Register Details */
|
||||||
|
/* ================ */
|
||||||
|
|
||||||
|
/* Configuration Control Register */
|
||||||
|
|
||||||
|
#define EL3REG_CONFIGB_NOTPCCARD 14
|
||||||
|
#define EL3REG_CONFIGB_HASAUI 13
|
||||||
|
#define EL3REG_CONFIGB_HASCOAX 12
|
||||||
|
#define EL3REG_CONFIGB_HASTP 9
|
||||||
|
#define EL3REG_CONFIGB_USEINTERNAL 8
|
||||||
|
#define EL3REG_CONFIGB_RESET 2
|
||||||
|
#define EL3REG_CONFIGB_ENABLE 0
|
||||||
|
|
||||||
|
#define EL3REG_CONFIGF_NOTPCCARD (1<<EL3REG_CONFIGB_NOTPCCARD)
|
||||||
|
#define EL3REG_CONFIGF_HASAUI (1<<EL3REG_CONFIGB_HASAUI)
|
||||||
|
#define EL3REG_CONFIGF_HASCOAX (1<<EL3REG_CONFIGB_HASCOAX)
|
||||||
|
#define EL3REG_CONFIGF_HASTP (1<<EL3REG_CONFIGB_HASTP)
|
||||||
|
#define EL3REG_CONFIGF_USEINTERNAL (1<<EL3REG_CONFIGB_USEINTERNAL)
|
||||||
|
#define EL3REG_CONFIGF_RESET (1<<EL3REG_CONFIGB_RESET)
|
||||||
|
#define EL3REG_CONFIGF_ENABLE (1<<EL3REG_CONFIGB_ENABLE)
|
||||||
|
|
||||||
|
/* Address Configuration Register */
|
||||||
|
|
||||||
|
#define EL3REG_ADDRCONFIGB_AUTOSELECT 7
|
||||||
|
|
||||||
|
#define EL3REG_ADDRCONFIGF_AUTOSELECT (1<<EL3REG_ADDRCONFIGB_AUTOSELECT)
|
||||||
|
|
||||||
|
#define EL3REG_ADDRCONFIG_XCVRMASK 0xc000
|
||||||
|
|
||||||
|
#define EL3REG_ADDRCONFIG_XCVRTP (0<<14)
|
||||||
|
#define EL3REG_ADDRCONFIG_XCVRAUI (1<<14)
|
||||||
|
#define EL3REG_ADDRCONFIG_XCVRCOAX (3<<14)
|
||||||
|
|
||||||
|
/* Status Register */
|
||||||
|
|
||||||
|
#define EL3REG_STATUSB_CMDINPROGRESS 12
|
||||||
|
|
||||||
|
#define EL3REG_STATUSF_CMDINPROGRESS (1<<EL3REG_STATUSB_CMDINPROGRESS)
|
||||||
|
|
||||||
|
#define EL3REG_STATUS_WINDOWMASK 0xe0
|
||||||
|
|
||||||
|
/* EEPROM Command Register */
|
||||||
|
|
||||||
|
#define EL3REG_EEPROMCMDB_BUSY 15
|
||||||
|
|
||||||
|
#define EL3REG_EEPROMCMDF_BUSY (1<<EL3REG_EEPROMCMDB_BUSY)
|
||||||
|
|
||||||
|
/* RX Status Register */
|
||||||
|
|
||||||
|
#define EL3REG_RXSTATUSB_INCOMPLETE 15
|
||||||
|
#define EL3REG_RXSTATUSB_ERROR 14
|
||||||
|
|
||||||
|
#define EL3REG_RXSTATUSF_INCOMPLETE (1<<EL3REG_RXSTATUSB_INCOMPLETE)
|
||||||
|
#define EL3REG_RXSTATUSF_ERROR (1<<EL3REG_RXSTATUSB_ERROR)
|
||||||
|
|
||||||
|
#define EL3REG_RXSTATUS_ERRORMASK 0x3800
|
||||||
|
#define EL3REG_RXSTATUS_SIZEMASK 0x07ff
|
||||||
|
|
||||||
|
/* TX Status Register */
|
||||||
|
|
||||||
|
#define EL3REG_TXSTATUSB_COMPLETE 7
|
||||||
|
#define EL3REG_TXSTATUSB_ONSUCCESS 6
|
||||||
|
#define EL3REG_TXSTATUSB_JABBER 5
|
||||||
|
#define EL3REG_TXSTATUSB_UNDERRUN 4
|
||||||
|
#define EL3REG_TXSTATUSB_MAXCOLLISIONS 3
|
||||||
|
#define EL3REG_TXSTATUSB_OVERFLOW 2
|
||||||
|
|
||||||
|
#define EL3REG_TXSTATUSF_COMPLETE (1<<EL3REG_TXSTATUSB_COMPLETE)
|
||||||
|
#define EL3REG_TXSTATUSF_ONSUCCESS (1<<EL3REG_TXSTATUSB_ONSUCCESS)
|
||||||
|
#define EL3REG_TXSTATUSF_JABBER (1<<EL3REG_TXSTATUSB_JABBER)
|
||||||
|
#define EL3REG_TXSTATUSF_UNDERRUN (1<<EL3REG_TXSTATUSB_UNDERRUN)
|
||||||
|
#define EL3REG_TXSTATUSF_MAXCOLLISIONS (1<<EL3REG_TXSTATUSB_MAXCOLLISIONS)
|
||||||
|
#define EL3REG_TXSTATUSF_OVERFLOW (1<<EL3REG_TXSTATUSB_OVERFLOW)
|
||||||
|
|
||||||
|
/* Net Diagnostic Port Register */
|
||||||
|
|
||||||
|
#define EL3REG_NETDIAGB_EXTERNALLOOP 15
|
||||||
|
#define EL3REG_NETDIAGB_ENDECLOOP 14
|
||||||
|
#define EL3REG_NETDIAGB_CONTROLLERLOOP 13
|
||||||
|
#define EL3REG_NETDIAGB_FIFOLOOP 12
|
||||||
|
#define EL3REG_NETDIAGB_TXON 11
|
||||||
|
#define EL3REG_NETDIAGB_RXON 10
|
||||||
|
#define EL3REG_NETDIAGB_TXING 9
|
||||||
|
#define EL3REG_NETDIAGB_NEEDTXRESET 8
|
||||||
|
#define EL3REG_NETDIAGB_STATSON 7
|
||||||
|
#define EL3REG_NETDIAGB_TESTLVD 0
|
||||||
|
|
||||||
|
#define EL3REG_NETDIAGF_EXTERNALLOOP (1<<EL3REG_NETDIAGB_EXTERNALLOOP)
|
||||||
|
#define EL3REG_NETDIAGF_ENDECLOOP (1<<EL3REG_NETDIAGB_ENDECLOOP)
|
||||||
|
#define EL3REG_NETDIAGF_CONTROLLERLOOP (1<<EL3REG_NETDIAGB_CONTROLLERLOOP)
|
||||||
|
#define EL3REG_NETDIAGF_FIFOLOOP (1<<EL3REG_NETDIAGB_FIFOLOOP)
|
||||||
|
#define EL3REG_NETDIAGF_TXON (1<<EL3REG_NETDIAGB_TXON)
|
||||||
|
#define EL3REG_NETDIAGF_RXON (1<<EL3REG_NETDIAGB_RXON)
|
||||||
|
#define EL3REG_NETDIAGF_TXING (1<<EL3REG_NETDIAGB_TXING)
|
||||||
|
#define EL3REG_NETDIAGF_NEEDTXRESET (1<<EL3REG_NETDIAGB_NEEDTXRESET)
|
||||||
|
#define EL3REG_NETDIAGF_STATSON (1<<EL3REG_NETDIAGB_STATSON)
|
||||||
|
#define EL3REG_NETDIAGF_TESTLVD (1<<EL3REG_NETDIAGB_TESTLVD)
|
||||||
|
|
||||||
|
#define EL3REG_NETDIAG_REVMASK 0x3e
|
||||||
|
|
||||||
|
/* Media Type and Status Register */
|
||||||
|
|
||||||
|
#define EL3REG_MEDIAB_TP 15
|
||||||
|
#define EL3REG_MEDIAB_COAX 14
|
||||||
|
#define EL3REG_MEDIAB_SQE 12
|
||||||
|
#define EL3REG_MEDIAB_BEAT 11
|
||||||
|
#define EL3REG_MEDIAB_POLEREV 10
|
||||||
|
#define EL3REG_MEDIAB_JABBER 9
|
||||||
|
#define EL3REG_MEDIAB_UNSQUELCH 8
|
||||||
|
#define EL3REG_MEDIAB_BEATENABLE 7
|
||||||
|
#define EL3REG_MEDIAB_JABBERENABLE 6
|
||||||
|
#define EL3REG_MEDIAB_CRS 5
|
||||||
|
#define EL3REG_MEDIAB_COLLISION 4
|
||||||
|
#define EL3REG_MEDIAB_SQESTATSENABLE 3
|
||||||
|
#define EL3REG_MEDIAB_CRCSTRIPDISABLE 2
|
||||||
|
#define EL3REG_MEDIAB_LINKLIGHT 0
|
||||||
|
|
||||||
|
#define EL3REG_MEDIAF_TP (1<<EL3REG_MEDIAB_TP)
|
||||||
|
#define EL3REG_MEDIAF_COAX (1<<EL3REG_MEDIAB_COAX)
|
||||||
|
#define EL3REG_MEDIAF_SQE (1<<EL3REG_MEDIAB_SQE)
|
||||||
|
#define EL3REG_MEDIAF_BEAT (1<<EL3REG_MEDIAB_BEAT)
|
||||||
|
#define EL3REG_MEDIAF_POLEREV (1<<EL3REG_MEDIAB_POLEREV)
|
||||||
|
#define EL3REG_MEDIAF_JABBER (1<<EL3REG_MEDIAB_JABBER)
|
||||||
|
#define EL3REG_MEDIAF_UNSQUELCH (1<<EL3REG_MEDIAB_UNSQUELCH)
|
||||||
|
#define EL3REG_MEDIAF_BEATENABLE (1<<EL3REG_MEDIAB_BEATENABLE)
|
||||||
|
#define EL3REG_MEDIAF_JABBERENABLE (1<<EL3REG_MEDIAB_JABBERENABLE)
|
||||||
|
#define EL3REG_MEDIAF_CRS (1<<EL3REG_MEDIAB_CRS)
|
||||||
|
#define EL3REG_MEDIAF_COLLISION (1<<EL3REG_MEDIAB_COLLISION)
|
||||||
|
#define EL3REG_MEDIAF_SQESTATSENABLE (1<<EL3REG_MEDIAB_SQESTATSENABLE)
|
||||||
|
#define EL3REG_MEDIAF_CRCSTRIPDISABLE (1<<EL3REG_MEDIAB_CRCSTRIPDISABLE)
|
||||||
|
#define EL3REG_MEDIAF_LINKLIGHT (1<<EL3REG_MEDIAB_LINKLIGHT)
|
||||||
|
|
||||||
|
|
||||||
|
/* Command parameters */
|
||||||
|
/* ================== */
|
||||||
|
|
||||||
|
#define EL3CMD_SETRXFILTERB_UCAST 0
|
||||||
|
#define EL3CMD_SETRXFILTERB_MCAST 1
|
||||||
|
#define EL3CMD_SETRXFILTERB_BCAST 2
|
||||||
|
#define EL3CMD_SETRXFILTERB_PROM 3
|
||||||
|
|
||||||
|
#define EL3CMD_SETRXFILTERF_UCAST (1<<EL3CMD_SETRXFILTERB_UCAST)
|
||||||
|
#define EL3CMD_SETRXFILTERF_MCAST (1<<EL3CMD_SETRXFILTERB_MCAST)
|
||||||
|
#define EL3CMD_SETRXFILTERF_BCAST (1<<EL3CMD_SETRXFILTERB_BCAST)
|
||||||
|
#define EL3CMD_SETRXFILTERF_PROM (1<<EL3CMD_SETRXFILTERB_PROM)
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
$VER: initializers.h 41.4 (21.11.2003)
|
||||||
|
Copyright (C) 2000-2003 Neil Cafferkey
|
||||||
|
|
||||||
|
This file is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Lesser General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2.1 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this file; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EXEC_INITIALIZERS_H
|
||||||
|
#define EXEC_INITIALIZERS_H
|
||||||
|
|
||||||
|
#include <exec/types.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Use the OFFSET macro as the offset parameter of one of the other
|
||||||
|
macros */
|
||||||
|
/*
|
||||||
|
#ifdef OFFSET
|
||||||
|
#undef OFFSET
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
#define OFFSET(struct_name, struct_field) \
|
||||||
|
((ULONG)(&(((struct struct_name *)0)->struct_field)))
|
||||||
|
|
||||||
|
/* Use the following macros in the structure definition */
|
||||||
|
|
||||||
|
#define INITBYTEDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o1; UBYTE name ## _o2; \
|
||||||
|
UBYTE name ## _o3; UBYTE name ## _v; UBYTE name ## _p
|
||||||
|
#define INITWORDDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o1; UBYTE name ## _o2; \
|
||||||
|
UWORD name ## _v
|
||||||
|
#define INITLONGDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o1; UBYTE name ## _o2; \
|
||||||
|
ULONG name ## _v
|
||||||
|
#define INITPINTDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o1; UBYTE name ## _o2; \
|
||||||
|
UPINT name ## _v
|
||||||
|
|
||||||
|
#define SMALLINITBYTEDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o; UBYTE name ## _v; UBYTE name ## _p
|
||||||
|
#define SMALLINITWORDDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o; UWORD name ## _v
|
||||||
|
#define SMALLINITLONGDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o; ULONG name ## _v
|
||||||
|
#define SMALLINITPINTDEF(name) \
|
||||||
|
UBYTE name ## _c; UBYTE name ## _o; UPINT name ## _v
|
||||||
|
|
||||||
|
#define INITENDDEF UBYTE the_end
|
||||||
|
|
||||||
|
/* Use the following macros to fill in a structure */
|
||||||
|
|
||||||
|
#define NEWINITBYTE(offset, value) \
|
||||||
|
0xe0, (UBYTE)((offset) >> 16), (UBYTE)((offset) >> 8), (UBYTE)(offset), \
|
||||||
|
(UBYTE)(value), 0
|
||||||
|
#define NEWINITWORD(offset, value) \
|
||||||
|
0xd0, (UBYTE)((offset) >> 16), (UBYTE)((offset) >> 8), (UBYTE)(offset), \
|
||||||
|
(UWORD)(value)
|
||||||
|
#define NEWINITLONG(offset, value) \
|
||||||
|
0xc0, (UBYTE)((offset) >> 16), (UBYTE)((offset) >> 8), (UBYTE)(offset), \
|
||||||
|
(ULONG)(value)
|
||||||
|
#define INITPINT(offset, value) \
|
||||||
|
0xc0, (UBYTE)((offset) >> 16), (UBYTE)((offset) >> 8), (UBYTE)(offset), \
|
||||||
|
(UPINT)(value)
|
||||||
|
|
||||||
|
#define SMALLINITBYTE(offset, value) \
|
||||||
|
0xa0, (offset), (UBYTE)(value), 0
|
||||||
|
#define SMALLINITWORD(offset, value) \
|
||||||
|
0x90, (offset), (UWORD)(value)
|
||||||
|
#define SMALLINITLONG(offset, value) \
|
||||||
|
0x80, (offset), (ULONG)(value)
|
||||||
|
#define SMALLINITPINT(offset, value) \
|
||||||
|
0x80, (offset), (UPINT)(value)
|
||||||
|
|
||||||
|
#define INITEND 0
|
||||||
|
|
||||||
|
/* Obsolete definitions */
|
||||||
|
|
||||||
|
#define INITBYTE(offset, value) \
|
||||||
|
(0xe000 | ((UWORD)(offset) >> 16)), \
|
||||||
|
(UWORD)(offset), (UWORD)((value) << 8)
|
||||||
|
#define INITWORD(offset, value) \
|
||||||
|
(0xd000 | ((UWORD)(offset) >> 16)), (UWORD)(offset), (UWORD)(value)
|
||||||
|
#define INITLONG(offset, value) \
|
||||||
|
(0xc000 | ((UWORD)(offset) >> 16)), (UWORD)(offset), \
|
||||||
|
(UWORD)((value) >> 16), (UWORD)(value)
|
||||||
|
#define INITAPTR(offset, value) \
|
||||||
|
(0xc000 | ((UWORD)(offset) >> 16)), (UWORD)(offset), \
|
||||||
|
(UWORD)((ULONG)(value) >> 16), (UWORD)(value)
|
||||||
|
|
||||||
|
#endif
|
||||||
+1523
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
File: request_protos.h
|
||||||
|
Author: Neil Cafferkey
|
||||||
|
Copyright (C) 2002 Neil Cafferkey
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef REQUEST_PROTOS_H
|
||||||
|
#define REQUEST_PROTOS_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "device.h"
|
||||||
|
|
||||||
|
VOID ServiceRequest(struct IOSana2Req *request,struct DevBase *base);
|
||||||
|
VOID PutRequest(struct MsgPort *port,struct IORequest *request,
|
||||||
|
struct DevBase *base);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
+2166
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
File: unit_protos.h
|
||||||
|
Author: Neil Cafferkey
|
||||||
|
Copyright (C) 2002 Neil Cafferkey
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UNIT_PROTOS_H
|
||||||
|
#define UNIT_PROTOS_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "device.h"
|
||||||
|
|
||||||
|
struct DevUnit *GetUnit(ULONG unit_num,struct DevBase *base);
|
||||||
|
struct DevUnit *FindUnit(ULONG unit_num,struct DevBase *base);
|
||||||
|
struct DevUnit *CreateUnit(ULONG unit_num,struct DevBase *base);
|
||||||
|
VOID DeleteUnit(struct DevUnit *unit,struct DevBase *base);
|
||||||
|
VOID ConfigureAdapter(struct DevUnit *unit,struct DevBase *base);
|
||||||
|
VOID GoOnline(struct DevUnit *unit,struct DevBase *base);
|
||||||
|
VOID GoOffline(struct DevUnit *unit,struct DevBase *base);
|
||||||
|
BOOL AddMulticastRange(struct DevUnit *unit,UBYTE *lower_bound,
|
||||||
|
UBYTE *upper_bound,struct DevBase *base);
|
||||||
|
BOOL RemMulticastRange(struct DevUnit *unit,UBYTE *lower_bound,
|
||||||
|
UBYTE *upper_bound,struct DevBase *base);
|
||||||
|
struct TypeStats *FindTypeStats(struct DevUnit *unit,struct MinList *list,
|
||||||
|
ULONG packet_type,struct DevBase *base);
|
||||||
|
VOID FlushUnit(struct DevUnit *unit,UBYTE last_queue,BYTE error,
|
||||||
|
struct DevBase *base);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Reference in new issue
Block a user