moved to trunk
This commit is contained in:
parent
50174b4df3
commit
550b1a27f7
|
@ -1,7 +1,7 @@
|
|||
cd ..\..\Bin
|
||||
..\Import\upx\bin\upx -9 Cxbx.exe
|
||||
..\Import\upx\bin\upx -9 Cxbx.dll
|
||||
copy Cxbx.exe ..\Export\Win32\Bin\
|
||||
copy Cxbx.dll ..\Export\Win32\Bin\
|
||||
cd ..\Build\win32
|
||||
|
||||
cd ..\..\Bin
|
||||
..\Import\upx\bin\upx -9 Cxbx.exe
|
||||
..\Import\upx\bin\upx -9 Cxbx.dll
|
||||
copy Cxbx.exe ..\Export\Win32\Bin\
|
||||
copy Cxbx.dll ..\Export\Win32\Bin\
|
||||
cd ..\Build\win32
|
||||
|
||||
|
|
682
COPYING
682
COPYING
|
@ -1,341 +1,341 @@
|
|||
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) <year> <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) year 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.
|
||||
|
||||
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) <year> <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) year 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.
|
||||
|
||||
|
|
696
Cxbe.vcproj
696
Cxbe.vcproj
|
@ -1,348 +1,348 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="Cxbe"
|
||||
ProjectGUID="{57797CD3-1E84-4CC4-9262-88900785F944}"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\Bin"
|
||||
IntermediateDirectory=".\Bin"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Bin/Cxbe.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories="Source,Source\Common\Win32,Source\Win32"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
PrecompiledHeaderFile=".\Bin/Cxbe.pch"
|
||||
AssemblerListingLocation=".\Bin/"
|
||||
ObjectFile=".\Bin/"
|
||||
ProgramDataBaseFileName=".\Bin/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1033"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile=".\Bin/Cxbe.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
ProgramDatabaseFile=".\Bin/Cxbe.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Bin/Cxbe.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Bin/Debug"
|
||||
IntermediateDirectory=".\Bin/Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Bin/Debug/Cxbe.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="Source,Source\Common\Win32,Source\Win32"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
PrecompiledHeaderFile=".\Bin/Debug/Cxbe.pch"
|
||||
AssemblerListingLocation=".\Bin/Debug/"
|
||||
ObjectFile=".\Bin/Debug/"
|
||||
ProgramDataBaseFileName=".\Bin/Debug/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1033"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile=".\Bin/Debug/Cxbe.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Bin/Debug/Cxbe.pdb"
|
||||
GenerateMapFile="true"
|
||||
MapFileName=".\Bin/Debug/Cxbe.map"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Bin/Debug/Cxbe.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Include"
|
||||
>
|
||||
<File
|
||||
RelativePath="Source\Common\Win32\AlignPosfix1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Win32\AlignPrefix1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Cxbx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Error.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Exe.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Xbe.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source"
|
||||
>
|
||||
<File
|
||||
RelativePath="Source\Common\Error.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Exe.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Cxbe\Main.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\OpenXDK.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Xbe.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="Cxbe"
|
||||
ProjectGUID="{57797CD3-1E84-4CC4-9262-88900785F944}"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\Bin"
|
||||
IntermediateDirectory=".\Bin"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Bin/Cxbe.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories="Source,Source\Common\Win32,Source\Win32"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
PrecompiledHeaderFile=".\Bin/Cxbe.pch"
|
||||
AssemblerListingLocation=".\Bin/"
|
||||
ObjectFile=".\Bin/"
|
||||
ProgramDataBaseFileName=".\Bin/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1033"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile=".\Bin/Cxbe.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
ProgramDatabaseFile=".\Bin/Cxbe.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Bin/Cxbe.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Bin/Debug"
|
||||
IntermediateDirectory=".\Bin/Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Bin/Debug/Cxbe.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="Source,Source\Common\Win32,Source\Win32"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
PrecompiledHeaderFile=".\Bin/Debug/Cxbe.pch"
|
||||
AssemblerListingLocation=".\Bin/Debug/"
|
||||
ObjectFile=".\Bin/Debug/"
|
||||
ProgramDataBaseFileName=".\Bin/Debug/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1033"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile=".\Bin/Debug/Cxbe.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Bin/Debug/Cxbe.pdb"
|
||||
GenerateMapFile="true"
|
||||
MapFileName=".\Bin/Debug/Cxbe.map"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Bin/Debug/Cxbe.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Include"
|
||||
>
|
||||
<File
|
||||
RelativePath="Source\Common\Win32\AlignPosfix1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Win32\AlignPrefix1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Cxbx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Error.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Exe.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Xbe.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source"
|
||||
>
|
||||
<File
|
||||
RelativePath="Source\Common\Error.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Exe.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Cxbe\Main.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\OpenXDK.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Source\Common\Xbe.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
|
|
70
Cxbx.sln
70
Cxbx.sln
|
@ -1,35 +1,35 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cxbe", "Cxbe.vcproj", "{57797CD3-1E84-4CC4-9262-88900785F944}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cxbx", "Cxbx.vcproj", "{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512} = {C5D1B9AB-7B32-4645-8B99-222384E41512}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CxbxKrnl", "CxbxKrnl.vcproj", "{C5D1B9AB-7B32-4645-8B99-222384E41512}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Release|Win32.Build.0 = Release|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Release|Win32.Build.0 = Release|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cxbe", "Cxbe.vcproj", "{57797CD3-1E84-4CC4-9262-88900785F944}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cxbx", "Cxbx.vcproj", "{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512} = {C5D1B9AB-7B32-4645-8B99-222384E41512}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CxbxKrnl", "CxbxKrnl.vcproj", "{C5D1B9AB-7B32-4645-8B99-222384E41512}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{57797CD3-1E84-4CC4-9262-88900785F944}.Release|Win32.Build.0 = Release|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{AAB45775-8951-4D79-8F0C-6EDE4F81D7E2}.Release|Win32.Build.0 = Release|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C5D1B9AB-7B32-4645-8B99-222384E41512}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
1568
Cxbx.vcproj
1568
Cxbx.vcproj
File diff suppressed because it is too large
Load Diff
3434
CxbxKrnl.vcproj
3434
CxbxKrnl.vcproj
File diff suppressed because it is too large
Load Diff
|
@ -1,375 +1,375 @@
|
|||
Cxbx Home Page: http://www.caustik.com/cxbx/
|
||||
|
||||
version: 0.8.0 (??/??/??)
|
||||
--------------------------------
|
||||
|
||||
- Turok is playable!
|
||||
|
||||
- Major GUI changes, new logo + about screens
|
||||
|
||||
- Single window emulation!
|
||||
|
||||
- Faux Fullscreen (Alt + Enter)!
|
||||
|
||||
- Preliminary pixel shader support!
|
||||
|
||||
- Vertex Shader support!
|
||||
|
||||
- Push Buffer support!
|
||||
|
||||
- Toggle Wireframe/Dots/Normal with F11
|
||||
|
||||
- HLE caching (so very very nice and speedy!)
|
||||
|
||||
- Tons of new debug support, including integrated debug console
|
||||
|
||||
- DirectSound support! Turok and Stella (Atari 2600 emulator)
|
||||
are both able to play sound+music, works great!
|
||||
|
||||
- Added auto-pause functionality when window is minimized
|
||||
|
||||
- Fixes to slider device input, some more robust error handling
|
||||
in input configuration (thanks Zomby!)
|
||||
|
||||
- Fixed start/back mapping problem :)
|
||||
|
||||
- Fixed a glitch in EmuExe that was outputting some bad Exes
|
||||
in situations such as the msdashboard. (thanks sop skrutt!)
|
||||
|
||||
- Fixed LineLoop rendering (X-Marbles, Gamepad, etc etc)
|
||||
|
||||
- Some speed optimizations for vertex buffer translation
|
||||
|
||||
- CreateDevice via proxy thread caused some issues with the
|
||||
interplay between directdraw & direct3d. I resolved this new
|
||||
issue and things are good again.
|
||||
|
||||
- Overlay support now should work with multimonitors
|
||||
|
||||
- Overlay support detection improved (again)
|
||||
|
||||
- Absurd amounts of new code, including general code cleanup
|
||||
|
||||
- Much much more that we dont even remember!
|
||||
|
||||
version: 0.7.8c (09/02/03)
|
||||
--------------------------------
|
||||
|
||||
- Spontaneous CreateDevice failures fixed (many, at least)
|
||||
|
||||
- Exe now able to generate into temporary directory, allowing
|
||||
games to be run from a read only device without path issues.
|
||||
|
||||
- Finally, Cxbx.dll and Cxbx.exe enforce version synchronization.
|
||||
This should at least diagnose about 9 billion people's problems.
|
||||
|
||||
- Very minor splash image tweaks
|
||||
|
||||
version: 0.7.8b (08/30/03)
|
||||
--------------------------------
|
||||
|
||||
- Fixed debug messages accidentally left in the previous release.
|
||||
|
||||
version: 0.7.8 (08/29/03)
|
||||
--------------------------------
|
||||
|
||||
- Halo executes (no graphics yet)
|
||||
|
||||
- Overlays simulated on PCs that do not support them in hardware.
|
||||
|
||||
- YUY2 overlay capabilities detection improved significantly
|
||||
|
||||
- Fixes to mesh rendering (thanks kingofc!). The "XRay" XDK demo is
|
||||
extremely impressive now (and runs very efficiently), as well as
|
||||
the Gamepad/Rumble demos.
|
||||
|
||||
- Z: drive simulation repaired
|
||||
|
||||
version: 0.7.7b (07/16/03)
|
||||
--------------------------------
|
||||
|
||||
- Fixed lost compatibility with X-Marbles, etc
|
||||
|
||||
version: 0.7.7 (07/15/03)
|
||||
--------------------------------
|
||||
|
||||
- Turok Evolution displays startup graphics and intro sequence!!
|
||||
|
||||
- Stella and a few other homebrew games are now playable :]
|
||||
This means you can play all your atari games on Cxbx, which
|
||||
is a great novelty.
|
||||
|
||||
- Finally low level emulation of the heap, which is a very
|
||||
very nice thing and fixed some glitches/bugs.
|
||||
|
||||
- Fixed timing (FPS is much higher now! it is unbelievable)
|
||||
|
||||
version: 0.7.6 (07/07/03)
|
||||
--------------------------------
|
||||
|
||||
- Many more homebrew apps show some graphics
|
||||
|
||||
- DirectInput bugs fixed
|
||||
|
||||
- PointSprites works great without source hack
|
||||
|
||||
- Lots of code cleanup
|
||||
|
||||
version: 0.7.5 (06/30/03)
|
||||
--------------------------------
|
||||
|
||||
- X-Marbles homebrew demo is playable!
|
||||
|
||||
- New GUI bitmap (thanks, bot!)
|
||||
|
||||
- DirectSound emulation has begun.
|
||||
|
||||
- Corrected converted Exe stack commit.
|
||||
|
||||
- Fixed a really annoying problem with the debugger
|
||||
not being able to attach, that has been around for
|
||||
way way too long.
|
||||
|
||||
- Caught up 4627 pretty far.
|
||||
|
||||
- PointSprites and Gamepad demos, and some other new
|
||||
XDK samples run better.
|
||||
|
||||
- Added more Direct3D/XAPI emulation, Hunter The Reckoning
|
||||
gets pretty far but no graphics yet.
|
||||
|
||||
version: 0.7.4 (06/23/03)
|
||||
--------------------------------
|
||||
|
||||
- FIRST RETAIL GAME GRAPHICS (simple, but yay!!)
|
||||
|
||||
- Quad rendering
|
||||
|
||||
- Tons of new XD3D emulation
|
||||
|
||||
- Some nice demos play now, including the cool PointSprites
|
||||
demo. There are some issues right now with the mipmap filters
|
||||
|
||||
- Fixed a user input bug (was ignoring digital buttons)
|
||||
|
||||
version: 0.7.3 (06/18/03)
|
||||
--------------------------------
|
||||
|
||||
- Meshes
|
||||
|
||||
- Indexed [primitive/vertex] rendering
|
||||
|
||||
- Fixed *part* of the invisible texture problem
|
||||
|
||||
version: 0.7.2 (06/13/03)
|
||||
--------------------------------
|
||||
|
||||
- Textures (bmp, jpg, png, partial .xpr, etc)
|
||||
|
||||
- rtinit/cinit run on lower level
|
||||
|
||||
- stdio seems to be working great :]
|
||||
|
||||
- some advanced texture stuff (TCI)
|
||||
|
||||
version: 0.7.1 (05/30/03)
|
||||
--------------------------------
|
||||
|
||||
- Video Configuration!
|
||||
|
||||
- Fixed some Xbe change detection logic
|
||||
|
||||
- Open Xbe and Import Exe can be done when a file
|
||||
is already open (automatically closes, checking if
|
||||
you made changes first).
|
||||
|
||||
- Direct3D Lighting is working!
|
||||
|
||||
version: 0.7.0 (05/27/03)
|
||||
--------------------------------
|
||||
|
||||
- Magically shrunk cxbx.dll/cxbx.exe file sizes enormously!
|
||||
|
||||
- Added Controller Input and Configuration!
|
||||
|
||||
- Added Recent Xbe/Exe file menus
|
||||
|
||||
- Support __declspec(thread) style TLS
|
||||
|
||||
- Fixed GUI color issues
|
||||
|
||||
- Massive code re-organization.
|
||||
|
||||
- Sooo many random optimizations
|
||||
|
||||
- Went lower level with certain components of
|
||||
emulation. Progress should speed up.
|
||||
|
||||
- Some Xbe parsing and debug output fixes.
|
||||
You should now be able to deal with the
|
||||
slightly odd Linux Xbe files.
|
||||
|
||||
- Much better emulation exception handling
|
||||
|
||||
version: 0.6.0-pre12 (02/23/03)
|
||||
--------------------------------
|
||||
|
||||
- HLE has advanced to intercepting Direct3D and
|
||||
Xapilib calls. A simple Xbox app built with a
|
||||
4361 or 4627 XDK has been shown to work.
|
||||
|
||||
version: 0.6.0-pre11 (02/09/03)
|
||||
--------------------------------
|
||||
|
||||
- HLE has begun. Cxbx is capable of emulating a
|
||||
blank XDK project. That is, if you had the XDK
|
||||
and created an Xbox "game" that did absolutely
|
||||
nothing, Cxbx could run it :P. Sounds pointless,
|
||||
but it is actually very significant
|
||||
|
||||
- New icon! Pending approval for use by the author
|
||||
|
||||
version: 0.6.0-pre10 (02/07/03)
|
||||
--------------------------------
|
||||
|
||||
- Tons of debug console output when opening, or
|
||||
converting, or saving xbe and exe files. This
|
||||
was very easy to add because of the flexible
|
||||
new debug console technique.
|
||||
|
||||
version: 0.6.0-pre9 (02/06/03)
|
||||
--------------------------------
|
||||
|
||||
- Released source code under GNU license.
|
||||
|
||||
- Debugging interface changed. Much cleaner.
|
||||
|
||||
version: 0.5.2 (12/14/02)
|
||||
--------------------------------
|
||||
|
||||
- Fixed a bug in section name generation. This might
|
||||
add some compatibility, not sure yet.
|
||||
|
||||
version: 0.5.1 (??/??/??)
|
||||
--------------------------------
|
||||
|
||||
- more .xbe information added to core and xbe dump
|
||||
|
||||
version: 0.5.0 (11/16/02)
|
||||
--------------------------------
|
||||
|
||||
- fixed a bug in displaying section digests.
|
||||
|
||||
- added conversion from .exe to .xbe!!
|
||||
|
||||
- more code cleanup, tiny ui improvements.
|
||||
|
||||
version: 0.4.4 (11/01/02)
|
||||
--------------------------------
|
||||
|
||||
- updated .xbe structure for more acccuracy
|
||||
|
||||
- added/fixed alot of information in xbe info
|
||||
dumps. most notably is the TLS information,
|
||||
which is finally completely correct.
|
||||
|
||||
- lots and lots of new kernel function prototypes
|
||||
and structs/enums are very accurate now.
|
||||
|
||||
version: 0.4.3 (10/09/02)
|
||||
--------------------------------
|
||||
|
||||
- added edit menu options to patch for allowing
|
||||
more than 64mb of ram, and also to toggle between
|
||||
debug mode / release mode. i also fixed a few
|
||||
relatively minor gui things, such as suggesting
|
||||
an appropriate name for saving an .xbe file, instead
|
||||
of just defaulting to "default.xbe".
|
||||
|
||||
version: 0.4.2 (10/07/02)
|
||||
--------------------------------
|
||||
|
||||
- finally got around to adding logo bitmap import
|
||||
feature. this is pretty damn cool because you
|
||||
can change that little logo that appears when
|
||||
you boot your xbox software to whatever you want
|
||||
it to be. for example, you can modify xbox media
|
||||
player to display "XBMP" instead of "Microsoft"
|
||||
|
||||
version: 0.4.1 (10/04/02)
|
||||
--------------------------------
|
||||
|
||||
- internally alot of little things have changed,
|
||||
code is organized pretty well now. software run
|
||||
through the emulator typically safely terminates,
|
||||
which is pretty damn cool from my perspective.
|
||||
|
||||
version: 0.4.0 (BETA) (09/16/02)
|
||||
--------------------------------
|
||||
|
||||
- total code rewrite. most the funcionality
|
||||
has remained intact with cleaner code UI
|
||||
and code design.
|
||||
|
||||
- logo bitmap is now decoded and displayed
|
||||
in the main window when you open an .xbe
|
||||
file. debug output window traces kernel
|
||||
calls. logo bitmap can be exported to a
|
||||
bitmap file.
|
||||
|
||||
- xbe_info.txt now displays the correctly
|
||||
decoded kernel thunk table address.
|
||||
|
||||
version: 0.3.1 (09/02/2002)
|
||||
--------------------------------
|
||||
|
||||
- significantly decreased file sizes for cxbx.exe
|
||||
and cxbx_krnl.dll. Also made debug output cleaner.
|
||||
|
||||
version: 0.3.0 (08/19/2002)
|
||||
--------------------------------
|
||||
|
||||
- various gui changes, new web site, significant
|
||||
changes in emulation theory. kernel exports are
|
||||
now hijacked and interpretted.
|
||||
|
||||
version: 0.2.2 (07/24/2002)
|
||||
---------------------------
|
||||
|
||||
- fixed various minor GUI problems
|
||||
|
||||
- added kernel thunk address description in GUI
|
||||
|
||||
version: 0.2.1 (07/24/2002)
|
||||
---------------------------
|
||||
|
||||
- added "Convert To .EXE" menu option.
|
||||
|
||||
- fixed problem where entry point wasn't being detected
|
||||
correctly when converting to .exe
|
||||
|
||||
version: 0.2.0 (07/24/2002)
|
||||
---------------------------
|
||||
|
||||
- drastically changed UI, took out convert to .exe
|
||||
feature (temporarily).
|
||||
|
||||
version: 0.1.3b(07/18/2002)
|
||||
---------------------------
|
||||
|
||||
- oops..fixed an incorrect debug xor value
|
||||
|
||||
version: 0.1.3 (07/16/2002)
|
||||
---------------------------
|
||||
|
||||
- .xbe file information dump now shows retail/debug
|
||||
translated addresses.
|
||||
|
||||
version: 0.1.2 (07/16/2002)
|
||||
---------------------------
|
||||
|
||||
- cxbx now dumps .xbe file information in a .txt file.
|
||||
|
||||
- new icon ?
|
||||
|
||||
Cxbx Home Page: http://www.caustik.com/cxbx/
|
||||
|
||||
version: 0.8.0 (??/??/??)
|
||||
--------------------------------
|
||||
|
||||
- Turok is playable!
|
||||
|
||||
- Major GUI changes, new logo + about screens
|
||||
|
||||
- Single window emulation!
|
||||
|
||||
- Faux Fullscreen (Alt + Enter)!
|
||||
|
||||
- Preliminary pixel shader support!
|
||||
|
||||
- Vertex Shader support!
|
||||
|
||||
- Push Buffer support!
|
||||
|
||||
- Toggle Wireframe/Dots/Normal with F11
|
||||
|
||||
- HLE caching (so very very nice and speedy!)
|
||||
|
||||
- Tons of new debug support, including integrated debug console
|
||||
|
||||
- DirectSound support! Turok and Stella (Atari 2600 emulator)
|
||||
are both able to play sound+music, works great!
|
||||
|
||||
- Added auto-pause functionality when window is minimized
|
||||
|
||||
- Fixes to slider device input, some more robust error handling
|
||||
in input configuration (thanks Zomby!)
|
||||
|
||||
- Fixed start/back mapping problem :)
|
||||
|
||||
- Fixed a glitch in EmuExe that was outputting some bad Exes
|
||||
in situations such as the msdashboard. (thanks sop skrutt!)
|
||||
|
||||
- Fixed LineLoop rendering (X-Marbles, Gamepad, etc etc)
|
||||
|
||||
- Some speed optimizations for vertex buffer translation
|
||||
|
||||
- CreateDevice via proxy thread caused some issues with the
|
||||
interplay between directdraw & direct3d. I resolved this new
|
||||
issue and things are good again.
|
||||
|
||||
- Overlay support now should work with multimonitors
|
||||
|
||||
- Overlay support detection improved (again)
|
||||
|
||||
- Absurd amounts of new code, including general code cleanup
|
||||
|
||||
- Much much more that we dont even remember!
|
||||
|
||||
version: 0.7.8c (09/02/03)
|
||||
--------------------------------
|
||||
|
||||
- Spontaneous CreateDevice failures fixed (many, at least)
|
||||
|
||||
- Exe now able to generate into temporary directory, allowing
|
||||
games to be run from a read only device without path issues.
|
||||
|
||||
- Finally, Cxbx.dll and Cxbx.exe enforce version synchronization.
|
||||
This should at least diagnose about 9 billion people's problems.
|
||||
|
||||
- Very minor splash image tweaks
|
||||
|
||||
version: 0.7.8b (08/30/03)
|
||||
--------------------------------
|
||||
|
||||
- Fixed debug messages accidentally left in the previous release.
|
||||
|
||||
version: 0.7.8 (08/29/03)
|
||||
--------------------------------
|
||||
|
||||
- Halo executes (no graphics yet)
|
||||
|
||||
- Overlays simulated on PCs that do not support them in hardware.
|
||||
|
||||
- YUY2 overlay capabilities detection improved significantly
|
||||
|
||||
- Fixes to mesh rendering (thanks kingofc!). The "XRay" XDK demo is
|
||||
extremely impressive now (and runs very efficiently), as well as
|
||||
the Gamepad/Rumble demos.
|
||||
|
||||
- Z: drive simulation repaired
|
||||
|
||||
version: 0.7.7b (07/16/03)
|
||||
--------------------------------
|
||||
|
||||
- Fixed lost compatibility with X-Marbles, etc
|
||||
|
||||
version: 0.7.7 (07/15/03)
|
||||
--------------------------------
|
||||
|
||||
- Turok Evolution displays startup graphics and intro sequence!!
|
||||
|
||||
- Stella and a few other homebrew games are now playable :]
|
||||
This means you can play all your atari games on Cxbx, which
|
||||
is a great novelty.
|
||||
|
||||
- Finally low level emulation of the heap, which is a very
|
||||
very nice thing and fixed some glitches/bugs.
|
||||
|
||||
- Fixed timing (FPS is much higher now! it is unbelievable)
|
||||
|
||||
version: 0.7.6 (07/07/03)
|
||||
--------------------------------
|
||||
|
||||
- Many more homebrew apps show some graphics
|
||||
|
||||
- DirectInput bugs fixed
|
||||
|
||||
- PointSprites works great without source hack
|
||||
|
||||
- Lots of code cleanup
|
||||
|
||||
version: 0.7.5 (06/30/03)
|
||||
--------------------------------
|
||||
|
||||
- X-Marbles homebrew demo is playable!
|
||||
|
||||
- New GUI bitmap (thanks, bot!)
|
||||
|
||||
- DirectSound emulation has begun.
|
||||
|
||||
- Corrected converted Exe stack commit.
|
||||
|
||||
- Fixed a really annoying problem with the debugger
|
||||
not being able to attach, that has been around for
|
||||
way way too long.
|
||||
|
||||
- Caught up 4627 pretty far.
|
||||
|
||||
- PointSprites and Gamepad demos, and some other new
|
||||
XDK samples run better.
|
||||
|
||||
- Added more Direct3D/XAPI emulation, Hunter The Reckoning
|
||||
gets pretty far but no graphics yet.
|
||||
|
||||
version: 0.7.4 (06/23/03)
|
||||
--------------------------------
|
||||
|
||||
- FIRST RETAIL GAME GRAPHICS (simple, but yay!!)
|
||||
|
||||
- Quad rendering
|
||||
|
||||
- Tons of new XD3D emulation
|
||||
|
||||
- Some nice demos play now, including the cool PointSprites
|
||||
demo. There are some issues right now with the mipmap filters
|
||||
|
||||
- Fixed a user input bug (was ignoring digital buttons)
|
||||
|
||||
version: 0.7.3 (06/18/03)
|
||||
--------------------------------
|
||||
|
||||
- Meshes
|
||||
|
||||
- Indexed [primitive/vertex] rendering
|
||||
|
||||
- Fixed *part* of the invisible texture problem
|
||||
|
||||
version: 0.7.2 (06/13/03)
|
||||
--------------------------------
|
||||
|
||||
- Textures (bmp, jpg, png, partial .xpr, etc)
|
||||
|
||||
- rtinit/cinit run on lower level
|
||||
|
||||
- stdio seems to be working great :]
|
||||
|
||||
- some advanced texture stuff (TCI)
|
||||
|
||||
version: 0.7.1 (05/30/03)
|
||||
--------------------------------
|
||||
|
||||
- Video Configuration!
|
||||
|
||||
- Fixed some Xbe change detection logic
|
||||
|
||||
- Open Xbe and Import Exe can be done when a file
|
||||
is already open (automatically closes, checking if
|
||||
you made changes first).
|
||||
|
||||
- Direct3D Lighting is working!
|
||||
|
||||
version: 0.7.0 (05/27/03)
|
||||
--------------------------------
|
||||
|
||||
- Magically shrunk cxbx.dll/cxbx.exe file sizes enormously!
|
||||
|
||||
- Added Controller Input and Configuration!
|
||||
|
||||
- Added Recent Xbe/Exe file menus
|
||||
|
||||
- Support __declspec(thread) style TLS
|
||||
|
||||
- Fixed GUI color issues
|
||||
|
||||
- Massive code re-organization.
|
||||
|
||||
- Sooo many random optimizations
|
||||
|
||||
- Went lower level with certain components of
|
||||
emulation. Progress should speed up.
|
||||
|
||||
- Some Xbe parsing and debug output fixes.
|
||||
You should now be able to deal with the
|
||||
slightly odd Linux Xbe files.
|
||||
|
||||
- Much better emulation exception handling
|
||||
|
||||
version: 0.6.0-pre12 (02/23/03)
|
||||
--------------------------------
|
||||
|
||||
- HLE has advanced to intercepting Direct3D and
|
||||
Xapilib calls. A simple Xbox app built with a
|
||||
4361 or 4627 XDK has been shown to work.
|
||||
|
||||
version: 0.6.0-pre11 (02/09/03)
|
||||
--------------------------------
|
||||
|
||||
- HLE has begun. Cxbx is capable of emulating a
|
||||
blank XDK project. That is, if you had the XDK
|
||||
and created an Xbox "game" that did absolutely
|
||||
nothing, Cxbx could run it :P. Sounds pointless,
|
||||
but it is actually very significant
|
||||
|
||||
- New icon! Pending approval for use by the author
|
||||
|
||||
version: 0.6.0-pre10 (02/07/03)
|
||||
--------------------------------
|
||||
|
||||
- Tons of debug console output when opening, or
|
||||
converting, or saving xbe and exe files. This
|
||||
was very easy to add because of the flexible
|
||||
new debug console technique.
|
||||
|
||||
version: 0.6.0-pre9 (02/06/03)
|
||||
--------------------------------
|
||||
|
||||
- Released source code under GNU license.
|
||||
|
||||
- Debugging interface changed. Much cleaner.
|
||||
|
||||
version: 0.5.2 (12/14/02)
|
||||
--------------------------------
|
||||
|
||||
- Fixed a bug in section name generation. This might
|
||||
add some compatibility, not sure yet.
|
||||
|
||||
version: 0.5.1 (??/??/??)
|
||||
--------------------------------
|
||||
|
||||
- more .xbe information added to core and xbe dump
|
||||
|
||||
version: 0.5.0 (11/16/02)
|
||||
--------------------------------
|
||||
|
||||
- fixed a bug in displaying section digests.
|
||||
|
||||
- added conversion from .exe to .xbe!!
|
||||
|
||||
- more code cleanup, tiny ui improvements.
|
||||
|
||||
version: 0.4.4 (11/01/02)
|
||||
--------------------------------
|
||||
|
||||
- updated .xbe structure for more acccuracy
|
||||
|
||||
- added/fixed alot of information in xbe info
|
||||
dumps. most notably is the TLS information,
|
||||
which is finally completely correct.
|
||||
|
||||
- lots and lots of new kernel function prototypes
|
||||
and structs/enums are very accurate now.
|
||||
|
||||
version: 0.4.3 (10/09/02)
|
||||
--------------------------------
|
||||
|
||||
- added edit menu options to patch for allowing
|
||||
more than 64mb of ram, and also to toggle between
|
||||
debug mode / release mode. i also fixed a few
|
||||
relatively minor gui things, such as suggesting
|
||||
an appropriate name for saving an .xbe file, instead
|
||||
of just defaulting to "default.xbe".
|
||||
|
||||
version: 0.4.2 (10/07/02)
|
||||
--------------------------------
|
||||
|
||||
- finally got around to adding logo bitmap import
|
||||
feature. this is pretty damn cool because you
|
||||
can change that little logo that appears when
|
||||
you boot your xbox software to whatever you want
|
||||
it to be. for example, you can modify xbox media
|
||||
player to display "XBMP" instead of "Microsoft"
|
||||
|
||||
version: 0.4.1 (10/04/02)
|
||||
--------------------------------
|
||||
|
||||
- internally alot of little things have changed,
|
||||
code is organized pretty well now. software run
|
||||
through the emulator typically safely terminates,
|
||||
which is pretty damn cool from my perspective.
|
||||
|
||||
version: 0.4.0 (BETA) (09/16/02)
|
||||
--------------------------------
|
||||
|
||||
- total code rewrite. most the funcionality
|
||||
has remained intact with cleaner code UI
|
||||
and code design.
|
||||
|
||||
- logo bitmap is now decoded and displayed
|
||||
in the main window when you open an .xbe
|
||||
file. debug output window traces kernel
|
||||
calls. logo bitmap can be exported to a
|
||||
bitmap file.
|
||||
|
||||
- xbe_info.txt now displays the correctly
|
||||
decoded kernel thunk table address.
|
||||
|
||||
version: 0.3.1 (09/02/2002)
|
||||
--------------------------------
|
||||
|
||||
- significantly decreased file sizes for cxbx.exe
|
||||
and cxbx_krnl.dll. Also made debug output cleaner.
|
||||
|
||||
version: 0.3.0 (08/19/2002)
|
||||
--------------------------------
|
||||
|
||||
- various gui changes, new web site, significant
|
||||
changes in emulation theory. kernel exports are
|
||||
now hijacked and interpretted.
|
||||
|
||||
version: 0.2.2 (07/24/2002)
|
||||
---------------------------
|
||||
|
||||
- fixed various minor GUI problems
|
||||
|
||||
- added kernel thunk address description in GUI
|
||||
|
||||
version: 0.2.1 (07/24/2002)
|
||||
---------------------------
|
||||
|
||||
- added "Convert To .EXE" menu option.
|
||||
|
||||
- fixed problem where entry point wasn't being detected
|
||||
correctly when converting to .exe
|
||||
|
||||
version: 0.2.0 (07/24/2002)
|
||||
---------------------------
|
||||
|
||||
- drastically changed UI, took out convert to .exe
|
||||
feature (temporarily).
|
||||
|
||||
version: 0.1.3b(07/18/2002)
|
||||
---------------------------
|
||||
|
||||
- oops..fixed an incorrect debug xor value
|
||||
|
||||
version: 0.1.3 (07/16/2002)
|
||||
---------------------------
|
||||
|
||||
- .xbe file information dump now shows retail/debug
|
||||
translated addresses.
|
||||
|
||||
version: 0.1.2 (07/16/2002)
|
||||
---------------------------
|
||||
|
||||
- cxbx now dumps .xbe file information in a .txt file.
|
||||
|
||||
- new icon ?
|
||||
|
||||
- various tiny improvements
|
|
@ -1,28 +1,28 @@
|
|||
Cxbx Code Cleanup - 05.06.06+
|
||||
|
||||
Legend :
|
||||
|
||||
- Todo
|
||||
: In progress
|
||||
+ Done, waiting to integrate
|
||||
* Done, integrated
|
||||
x Obsolete, Removed
|
||||
|
||||
< Delegated
|
||||
[ Completed, Update email sent
|
||||
~ Follow-Up Comment
|
||||
|
||||
: Import/Export
|
||||
* Pull upx into Import folder
|
||||
* Export Cxbx.exe/Cxbx.dll
|
||||
* Pull ntdll into Import folder
|
||||
* Pull jpegdec into Import folder
|
||||
: Structure
|
||||
* Move all includes into Source (since they are not exported!)
|
||||
- Organize all #include's cleanly, and use good relative paths when desirable
|
||||
- Move things out of CxbxKrnl.h if they are internal to CxbxKrnl
|
||||
- CxbxKrnl
|
||||
- CxbxKrnlVerifyVersion etc
|
||||
: General Cleanup
|
||||
- AutoSwapFS (like AutoMutex)
|
||||
|
||||
Cxbx Code Cleanup - 05.06.06+
|
||||
|
||||
Legend :
|
||||
|
||||
- Todo
|
||||
: In progress
|
||||
+ Done, waiting to integrate
|
||||
* Done, integrated
|
||||
x Obsolete, Removed
|
||||
|
||||
< Delegated
|
||||
[ Completed, Update email sent
|
||||
~ Follow-Up Comment
|
||||
|
||||
: Import/Export
|
||||
* Pull upx into Import folder
|
||||
* Export Cxbx.exe/Cxbx.dll
|
||||
* Pull ntdll into Import folder
|
||||
* Pull jpegdec into Import folder
|
||||
: Structure
|
||||
* Move all includes into Source (since they are not exported!)
|
||||
- Organize all #include's cleanly, and use good relative paths when desirable
|
||||
- Move things out of CxbxKrnl.h if they are internal to CxbxKrnl
|
||||
- CxbxKrnl
|
||||
- CxbxKrnlVerifyVersion etc
|
||||
: General Cleanup
|
||||
- AutoSwapFS (like AutoMutex)
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
If you are planning on doing development on Cxbx, please read:
|
||||
|
||||
a) You *must* have the current OpenXDK source tree available in
|
||||
your MSVC search path for /lib and /include. This is necessary
|
||||
because Cxbx implements kernel prototypes inside xboxkrnl.h
|
|
@ -1,78 +1,78 @@
|
|||
Technique for locating missed interceptions. The following IDAPro script, followed by the manual
|
||||
removal of functions that are detected by the HLE database, is excellent for detecting functions
|
||||
that should have been intercepted but were missed.
|
||||
|
||||
I typically clear the IDAPro console window, run the below script, then copy the resulting struct
|
||||
as a static global variable in Emu.cpp. I then use the CPP code immediately before the Xbe entry
|
||||
point, which will mark all uncaught functions with a breakpoint (0xCC). Obviously this will catch
|
||||
all HLE functions too, unless you remove them first. I haven't written a script to automate this
|
||||
yet, so it takes a few minutes.
|
||||
|
||||
-caustik
|
||||
|
||||
<begin idapro code>
|
||||
|
||||
auto addr;
|
||||
auto funcEnd;
|
||||
auto count;
|
||||
|
||||
auto startAddr;
|
||||
auto endAddr;
|
||||
|
||||
startAddr = AskAddr(0, "Input Start Address");
|
||||
endAddr = AskAddr(0, "Input End Address");
|
||||
|
||||
addr = FindCode(startAddr, SEARCH_DOWN | SEARCH_NEXT);
|
||||
count = 0;
|
||||
|
||||
Message("uint32 funcAddr[]=\n");
|
||||
Message("{\n");
|
||||
|
||||
Jump(addr);
|
||||
|
||||
while(1)
|
||||
{
|
||||
count = count+1;
|
||||
|
||||
addr = NextFunction(addr+1);
|
||||
|
||||
if(addr == BADADDR || addr > endAddr)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
funcEnd = FindFuncEnd(addr);
|
||||
|
||||
Message(" 0x%.08X, // -> 0x%.08X (Size : %d bytes)\n", addr, funcEnd, funcEnd - addr);
|
||||
|
||||
Jump(addr);
|
||||
}
|
||||
|
||||
Message("}\n");
|
||||
|
||||
</end idapro code>
|
||||
|
||||
<begin c code>
|
||||
|
||||
Where funcExclude is an array of uint32 addresses to exclude from the search...
|
||||
|
||||
for(int v=0;v<sizeof(funcAddr)/sizeof(uint32);v++)
|
||||
{
|
||||
bool bExclude = false;
|
||||
for(int r=0;r<sizeof(funcExclude)/sizeof(uint32);r++)
|
||||
{
|
||||
if(funcAddr[v] == funcExclude[r])
|
||||
{
|
||||
bExclude = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bExclude)
|
||||
{
|
||||
*(uint08*)(funcAddr[v]) = 0xCC;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Technique for locating missed interceptions. The following IDAPro script, followed by the manual
|
||||
removal of functions that are detected by the HLE database, is excellent for detecting functions
|
||||
that should have been intercepted but were missed.
|
||||
|
||||
I typically clear the IDAPro console window, run the below script, then copy the resulting struct
|
||||
as a static global variable in Emu.cpp. I then use the CPP code immediately before the Xbe entry
|
||||
point, which will mark all uncaught functions with a breakpoint (0xCC). Obviously this will catch
|
||||
all HLE functions too, unless you remove them first. I haven't written a script to automate this
|
||||
yet, so it takes a few minutes.
|
||||
|
||||
-caustik
|
||||
|
||||
<begin idapro code>
|
||||
|
||||
auto addr;
|
||||
auto funcEnd;
|
||||
auto count;
|
||||
|
||||
auto startAddr;
|
||||
auto endAddr;
|
||||
|
||||
startAddr = AskAddr(0, "Input Start Address");
|
||||
endAddr = AskAddr(0, "Input End Address");
|
||||
|
||||
addr = FindCode(startAddr, SEARCH_DOWN | SEARCH_NEXT);
|
||||
count = 0;
|
||||
|
||||
Message("uint32 funcAddr[]=\n");
|
||||
Message("{\n");
|
||||
|
||||
Jump(addr);
|
||||
|
||||
while(1)
|
||||
{
|
||||
count = count+1;
|
||||
|
||||
addr = NextFunction(addr+1);
|
||||
|
||||
if(addr == BADADDR || addr > endAddr)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
funcEnd = FindFuncEnd(addr);
|
||||
|
||||
Message(" 0x%.08X, // -> 0x%.08X (Size : %d bytes)\n", addr, funcEnd, funcEnd - addr);
|
||||
|
||||
Jump(addr);
|
||||
}
|
||||
|
||||
Message("}\n");
|
||||
|
||||
</end idapro code>
|
||||
|
||||
<begin c code>
|
||||
|
||||
Where funcExclude is an array of uint32 addresses to exclude from the search...
|
||||
|
||||
for(int v=0;v<sizeof(funcAddr)/sizeof(uint32);v++)
|
||||
{
|
||||
bool bExclude = false;
|
||||
for(int r=0;r<sizeof(funcExclude)/sizeof(uint32);r++)
|
||||
{
|
||||
if(funcAddr[v] == funcExclude[r])
|
||||
{
|
||||
bExclude = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bExclude)
|
||||
{
|
||||
*(uint08*)(funcAddr[v]) = 0xCC;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</end c code>
|
|
@ -1,26 +1,26 @@
|
|||
Direct3D resources are going to be a little bit of a hack.
|
||||
There is a tough situation, because precompiled resources
|
||||
(XPR) can be loaded into memory manually by an Xbox Game,
|
||||
and then "Registered" with pResource->Register(addr);
|
||||
|
||||
This is a problem because we never have an opportunity to
|
||||
intercept the "this" pointer for this datatype. The base
|
||||
resource class looks like this:
|
||||
|
||||
DWORD Common;
|
||||
DWORD Data;
|
||||
DWORD Lock;
|
||||
|
||||
The first idea is to tuck away the PC Direct3D resource
|
||||
pointer inside of pResource->Data. The trouble with this
|
||||
is that some Xbox Games will directly access and modify
|
||||
this member.
|
||||
|
||||
Another technique is to hide the PC Direct3D resource pointer
|
||||
inside of the buffer allocated by Data. This could work, as
|
||||
long as Xbox Games do not access the resource Data after the
|
||||
initial Register function is called.
|
||||
|
||||
The currently used method is to tuck the pointer away inside
|
||||
of the Lock member, and hijack any functions that attempt to
|
||||
access the Lock member variable.
|
||||
Direct3D resources are going to be a little bit of a hack.
|
||||
There is a tough situation, because precompiled resources
|
||||
(XPR) can be loaded into memory manually by an Xbox Game,
|
||||
and then "Registered" with pResource->Register(addr);
|
||||
|
||||
This is a problem because we never have an opportunity to
|
||||
intercept the "this" pointer for this datatype. The base
|
||||
resource class looks like this:
|
||||
|
||||
DWORD Common;
|
||||
DWORD Data;
|
||||
DWORD Lock;
|
||||
|
||||
The first idea is to tuck away the PC Direct3D resource
|
||||
pointer inside of pResource->Data. The trouble with this
|
||||
is that some Xbox Games will directly access and modify
|
||||
this member.
|
||||
|
||||
Another technique is to hide the PC Direct3D resource pointer
|
||||
inside of the buffer allocated by Data. This could work, as
|
||||
long as Xbox Games do not access the resource Data after the
|
||||
initial Register function is called.
|
||||
|
||||
The currently used method is to tuck the pointer away inside
|
||||
of the Lock member, and hijack any functions that attempt to
|
||||
access the Lock member variable.
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
Controller Input is configured using a dialog inside
|
||||
EmuDInput.cpp/.h
|
||||
|
||||
Configuration is actually saved into both the registry
|
||||
and shared memory within Cxbx.dll. This means that all
|
||||
active emulated games (even if there are many of them
|
||||
at the same time) will have the ability to refresh the
|
||||
current configuration at any given time.
|
||||
|
||||
This works out really great because this means you can
|
||||
make changes in the input configuration at any time and
|
||||
immediately see the changes take affect.
|
||||
|
||||
It is important to note that all access to this shared
|
||||
memory, as with all shared memory, should be protected
|
||||
with a mutual exclusion mechanism. Win32 provides such
|
||||
a mechanism and it will be used.
|
||||
|
||||
Controller Input is configured using a dialog inside
|
||||
EmuDInput.cpp/.h
|
||||
|
||||
Configuration is actually saved into both the registry
|
||||
and shared memory within Cxbx.dll. This means that all
|
||||
active emulated games (even if there are many of them
|
||||
at the same time) will have the ability to refresh the
|
||||
current configuration at any given time.
|
||||
|
||||
This works out really great because this means you can
|
||||
make changes in the input configuration at any time and
|
||||
immediately see the changes take affect.
|
||||
|
||||
It is important to note that all access to this shared
|
||||
memory, as with all shared memory, should be protected
|
||||
with a mutual exclusion mechanism. Win32 provides such
|
||||
a mechanism and it will be used.
|
||||
|
||||
-caustik
|
|
@ -1,133 +1,133 @@
|
|||
>> nice code for dumping textures inside of push buffer stuff
|
||||
|
||||
/*
|
||||
IDirect3DBaseTexture8 *pTexture = 0;
|
||||
|
||||
g_pD3DDevice8->GetTexture(0, &pTexture);
|
||||
|
||||
if(pTexture != NULL)
|
||||
{
|
||||
static int dwDumpTexture = 0;
|
||||
|
||||
char szBuffer[256];
|
||||
|
||||
printf("Texture Time...\n");
|
||||
|
||||
switch(pTexture->GetType())
|
||||
{
|
||||
case D3DRTYPE_TEXTURE:
|
||||
{
|
||||
printf("_TEXTURE\n");
|
||||
sprintf(szBuffer, "C:\\Aaron\\Textures\\PushBufferTex - %.03d (0x%.08X).bmp", dwDumpTexture++, pTexture);
|
||||
|
||||
((IDirect3DTexture8*)pTexture)->UnlockRect(0);
|
||||
|
||||
D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case D3DRTYPE_CUBETEXTURE:
|
||||
{
|
||||
printf("_CUBETEXTURE\n");
|
||||
for(int face=0;face<6;face++)
|
||||
{
|
||||
sprintf(szBuffer, "C:\\Aaron\\Textures\\PushBufferTexCube%d - %.03d (0x%.08X).bmp", face, dwDumpTexture++, pTexture);
|
||||
|
||||
((IDirect3DCubeTexture8*)pTexture)->UnlockRect((D3DCUBEMAP_FACES)face, 0);
|
||||
|
||||
D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//*/
|
||||
|
||||
<<
|
||||
|
||||
>>
|
||||
|
||||
/* TODO: Use new handle wrapping code
|
||||
|
||||
// ******************************************************************
|
||||
// * For now, just check for 'special' cases
|
||||
// ******************************************************************
|
||||
if(strcmp(ObjectAttributes->ObjectName->Buffer, "\\Device\\Harddisk0\\partition1\\") == 0)
|
||||
{
|
||||
EmuHandle *iEmuHandle = new EmuHandle;
|
||||
|
||||
iEmuHandle->m_Type = EMUHANDLE_TYPE_PARTITION1;
|
||||
|
||||
*FileHandle = PtrToEmuHandle(iEmuHandle);
|
||||
}
|
||||
else if(strcmp(ObjectAttributes->ObjectName->Buffer, "\\Device\\Harddisk0\\partition1\\TDATA") == 0)
|
||||
{
|
||||
EmuHandle *iEmuHandle = new EmuHandle;
|
||||
|
||||
iEmuHandle->m_Type = EMUHANDLE_TYPE_TDATA;
|
||||
|
||||
*FileHandle = PtrToEmuHandle(iEmuHandle);
|
||||
|
||||
// TODO: Update IoStatusBlock if necessary
|
||||
}
|
||||
else
|
||||
{
|
||||
EmuPanic();
|
||||
}
|
||||
*/
|
||||
|
||||
<<
|
||||
|
||||
__asm int 3
|
||||
wchar_t wszObjectName[160];
|
||||
|
||||
xntdll::UNICODE_STRING NtUnicodeString;
|
||||
xntdll::OBJECT_ATTRIBUTES NtObjAttr;
|
||||
|
||||
setlocale(LC_ALL, "English");
|
||||
mbstowcs(wszObjectName, ObjectAttributes->ObjectName->Buffer, 160);
|
||||
|
||||
NT_RtlInitUnicodeString(&NtUnicodeString, wszObjectName);
|
||||
|
||||
// Initialize NtObjAttr
|
||||
NtObjAttr.Length = sizeof(xntdll::OBJECT_ATTRIBUTES);
|
||||
|
||||
InitializeObjectAttributes(&NtObjAttr, &NtUnicodeString, ObjectAttributes->Attributes, ObjectAttributes->RootDirectory, NULL);
|
||||
|
||||
NTSTATUS ret = NT_NtCreateFile
|
||||
(
|
||||
FileHandle, DesiredAccess, &NtObjAttr, (xntdll::IO_STATUS_BLOCK*)IoStatusBlock,
|
||||
(xntdll::LARGE_INTEGER*)AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, NULL, NULL
|
||||
);
|
||||
|
||||
if(FAILED(ret))
|
||||
MessageBox(g_hEmuWindow, "Bad!", "Cxbx", MB_OK);
|
||||
else
|
||||
MessageBox(g_hEmuWindow, "Good!", "Cxbx", MB_OK);
|
||||
|
||||
|
||||
<<
|
||||
|
||||
// ******************************************************************
|
||||
// * calculate TLS adjustment
|
||||
// ******************************************************************
|
||||
uint32 TlsAdjust = 0;
|
||||
|
||||
if(x_Xbe->m_TLS == 0)
|
||||
TlsAdjust = -1;
|
||||
else
|
||||
{
|
||||
// ******************************************************************
|
||||
// * necessary tls adjustment values
|
||||
// ******************************************************************
|
||||
uint32 TlsZF = x_Xbe->m_TLS->dwSizeofZeroFill;
|
||||
uint32 TlsEA = x_Xbe->m_TLS->dwDataEndAddr;
|
||||
uint32 TlsSA = x_Xbe->m_TLS->dwDataStartAddr;
|
||||
|
||||
// ******************************************************************
|
||||
// * calculate tls adjustment
|
||||
// ******************************************************************
|
||||
TlsAdjust = (TlsZF - TlsSA) + TlsEA + 0x0F;
|
||||
TlsAdjust &= 0xFFFFFFF0;
|
||||
TlsAdjust += 4;
|
||||
}
|
||||
>> nice code for dumping textures inside of push buffer stuff
|
||||
|
||||
/*
|
||||
IDirect3DBaseTexture8 *pTexture = 0;
|
||||
|
||||
g_pD3DDevice8->GetTexture(0, &pTexture);
|
||||
|
||||
if(pTexture != NULL)
|
||||
{
|
||||
static int dwDumpTexture = 0;
|
||||
|
||||
char szBuffer[256];
|
||||
|
||||
printf("Texture Time...\n");
|
||||
|
||||
switch(pTexture->GetType())
|
||||
{
|
||||
case D3DRTYPE_TEXTURE:
|
||||
{
|
||||
printf("_TEXTURE\n");
|
||||
sprintf(szBuffer, "C:\\Aaron\\Textures\\PushBufferTex - %.03d (0x%.08X).bmp", dwDumpTexture++, pTexture);
|
||||
|
||||
((IDirect3DTexture8*)pTexture)->UnlockRect(0);
|
||||
|
||||
D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case D3DRTYPE_CUBETEXTURE:
|
||||
{
|
||||
printf("_CUBETEXTURE\n");
|
||||
for(int face=0;face<6;face++)
|
||||
{
|
||||
sprintf(szBuffer, "C:\\Aaron\\Textures\\PushBufferTexCube%d - %.03d (0x%.08X).bmp", face, dwDumpTexture++, pTexture);
|
||||
|
||||
((IDirect3DCubeTexture8*)pTexture)->UnlockRect((D3DCUBEMAP_FACES)face, 0);
|
||||
|
||||
D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//*/
|
||||
|
||||
<<
|
||||
|
||||
>>
|
||||
|
||||
/* TODO: Use new handle wrapping code
|
||||
|
||||
// ******************************************************************
|
||||
// * For now, just check for 'special' cases
|
||||
// ******************************************************************
|
||||
if(strcmp(ObjectAttributes->ObjectName->Buffer, "\\Device\\Harddisk0\\partition1\\") == 0)
|
||||
{
|
||||
EmuHandle *iEmuHandle = new EmuHandle;
|
||||
|
||||
iEmuHandle->m_Type = EMUHANDLE_TYPE_PARTITION1;
|
||||
|
||||
*FileHandle = PtrToEmuHandle(iEmuHandle);
|
||||
}
|
||||
else if(strcmp(ObjectAttributes->ObjectName->Buffer, "\\Device\\Harddisk0\\partition1\\TDATA") == 0)
|
||||
{
|
||||
EmuHandle *iEmuHandle = new EmuHandle;
|
||||
|
||||
iEmuHandle->m_Type = EMUHANDLE_TYPE_TDATA;
|
||||
|
||||
*FileHandle = PtrToEmuHandle(iEmuHandle);
|
||||
|
||||
// TODO: Update IoStatusBlock if necessary
|
||||
}
|
||||
else
|
||||
{
|
||||
EmuPanic();
|
||||
}
|
||||
*/
|
||||
|
||||
<<
|
||||
|
||||
__asm int 3
|
||||
wchar_t wszObjectName[160];
|
||||
|
||||
xntdll::UNICODE_STRING NtUnicodeString;
|
||||
xntdll::OBJECT_ATTRIBUTES NtObjAttr;
|
||||
|
||||
setlocale(LC_ALL, "English");
|
||||
mbstowcs(wszObjectName, ObjectAttributes->ObjectName->Buffer, 160);
|
||||
|
||||
NT_RtlInitUnicodeString(&NtUnicodeString, wszObjectName);
|
||||
|
||||
// Initialize NtObjAttr
|
||||
NtObjAttr.Length = sizeof(xntdll::OBJECT_ATTRIBUTES);
|
||||
|
||||
InitializeObjectAttributes(&NtObjAttr, &NtUnicodeString, ObjectAttributes->Attributes, ObjectAttributes->RootDirectory, NULL);
|
||||
|
||||
NTSTATUS ret = NT_NtCreateFile
|
||||
(
|
||||
FileHandle, DesiredAccess, &NtObjAttr, (xntdll::IO_STATUS_BLOCK*)IoStatusBlock,
|
||||
(xntdll::LARGE_INTEGER*)AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, NULL, NULL
|
||||
);
|
||||
|
||||
if(FAILED(ret))
|
||||
MessageBox(g_hEmuWindow, "Bad!", "Cxbx", MB_OK);
|
||||
else
|
||||
MessageBox(g_hEmuWindow, "Good!", "Cxbx", MB_OK);
|
||||
|
||||
|
||||
<<
|
||||
|
||||
// ******************************************************************
|
||||
// * calculate TLS adjustment
|
||||
// ******************************************************************
|
||||
uint32 TlsAdjust = 0;
|
||||
|
||||
if(x_Xbe->m_TLS == 0)
|
||||
TlsAdjust = -1;
|
||||
else
|
||||
{
|
||||
// ******************************************************************
|
||||
// * necessary tls adjustment values
|
||||
// ******************************************************************
|
||||
uint32 TlsZF = x_Xbe->m_TLS->dwSizeofZeroFill;
|
||||
uint32 TlsEA = x_Xbe->m_TLS->dwDataEndAddr;
|
||||
uint32 TlsSA = x_Xbe->m_TLS->dwDataStartAddr;
|
||||
|
||||
// ******************************************************************
|
||||
// * calculate tls adjustment
|
||||
// ******************************************************************
|
||||
TlsAdjust = (TlsZF - TlsSA) + TlsEA + 0x0F;
|
||||
TlsAdjust &= 0xFFFFFFF0;
|
||||
TlsAdjust += 4;
|
||||
}
|
||||
|
|
174
Doc/Todo.txt
174
Doc/Todo.txt
|
@ -1,87 +1,87 @@
|
|||
Cxbx Todo (* denotes high priority, + denotes medium priority)
|
||||
|
||||
HLE :
|
||||
|
||||
* SetThreadPriority is basically ignored right now
|
||||
|
||||
* NSIS installer. Option to clear UDATA/TDATA/CxbxCache
|
||||
|
||||
* Modularize inline vertex buffers (Begin()/End())
|
||||
|
||||
* Direct3D_SetPushBufferSize for Antz Extreme Racing (4361). Do this
|
||||
when Xiggen is stabilized! For now, safe to ignore it. Also, this
|
||||
function is located @ 0x184CC0 in halo.
|
||||
|
||||
* Create library of working demos/games/emulators (various XDK versions)
|
||||
|
||||
* Add Pause hotkey
|
||||
|
||||
* Add FPS counter
|
||||
|
||||
ETC :
|
||||
|
||||
* Use SetAllParameters to reverse engineer 3911 DSound functions
|
||||
|
||||
* Stella has a memory leak in the game's list screen..
|
||||
|
||||
* DirectSoundUseFullHRTF -> 0x192D8C (Halo)..too small to detect?
|
||||
|
||||
* Palette needs to actually be used, not just allowed to execute.
|
||||
|
||||
* Check if 4361 Resource8_Release is the same as 4627 & 3925 (3911)
|
||||
|
||||
* Configurable dead zone, for touchy controllers
|
||||
|
||||
* Push Buffer Size is stored in a global. This may be important (hard to tell)
|
||||
|
||||
* Perhaps for global variable detection, have some sort of array of
|
||||
function + offset pairs to check. That way if an Xbe happens to not
|
||||
use a particular function (wont get linked in), there are other chances
|
||||
to locate the variable. In the even that none are found, the global ptr
|
||||
should be set to NULL, and any references to it should not assume it
|
||||
will not be NULL.
|
||||
|
||||
* Special temporarily X_D3DResource handles need to be kept track of and
|
||||
periodically garbage collected. Garbage collection frequency can be a
|
||||
core configuration option.
|
||||
|
||||
* Register() probably needn't re-unswizzle each time. cache a copy of
|
||||
the address it was registered to (or a global table) and simply update
|
||||
the data pointer to that IDirect3DTexture8 instance.
|
||||
|
||||
* Support cards that just plain dont have 32 bit color?
|
||||
|
||||
* The notorious Heap Allocation crash still needs to be solved on a low
|
||||
level. It is strongly preferable to debug this instead of having to
|
||||
intercept the entire Rtl heap set of functions.
|
||||
|
||||
* Stabilize TLS (it's close...)
|
||||
|
||||
+ Closing a console should not terminate the entire process.
|
||||
|
||||
+ Perfect the timing on KeTickCount. This can be updated along with the
|
||||
Xbox-Never-Sleeps, which would give much higher precision than the
|
||||
current seperate-thread method.
|
||||
|
||||
+ Some sort of delete-after-emulation type of functionality?
|
||||
|
||||
+ Use SetDataFormat instead of parsing device input by hand?
|
||||
|
||||
+ Batch config all buttons (should be very easy..just click one by one)
|
||||
|
||||
+ Configuration screens may not necessarily need to be modal windows.
|
||||
|
||||
+ Xbe file associations via user configuration. This could include an
|
||||
option to either automatically execute the Xbe, or simply open it up
|
||||
in Cxbx's main window. For this purpose, Cxbx.dll should also be
|
||||
registered in the system so that a converted Exe can run from anywhere.
|
||||
|
||||
Converted Exe files should use the Cxbx icon
|
||||
|
||||
When loading a file, menus and WM_CLOSE should be disabled and an update
|
||||
progress should be sent via callback from core.
|
||||
|
||||
Encapsulate RecentFiles into a nice little class
|
||||
|
||||
Allow a logo bitmap to be added if one does not exist. This may require that
|
||||
the size of headers be increased. (sizeof_headers).
|
||||
Cxbx Todo (* denotes high priority, + denotes medium priority)
|
||||
|
||||
HLE :
|
||||
|
||||
* SetThreadPriority is basically ignored right now
|
||||
|
||||
* NSIS installer. Option to clear UDATA/TDATA/CxbxCache
|
||||
|
||||
* Modularize inline vertex buffers (Begin()/End())
|
||||
|
||||
* Direct3D_SetPushBufferSize for Antz Extreme Racing (4361). Do this
|
||||
when Xiggen is stabilized! For now, safe to ignore it. Also, this
|
||||
function is located @ 0x184CC0 in halo.
|
||||
|
||||
* Create library of working demos/games/emulators (various XDK versions)
|
||||
|
||||
* Add Pause hotkey
|
||||
|
||||
* Add FPS counter
|
||||
|
||||
ETC :
|
||||
|
||||
* Use SetAllParameters to reverse engineer 3911 DSound functions
|
||||
|
||||
* Stella has a memory leak in the game's list screen..
|
||||
|
||||
* DirectSoundUseFullHRTF -> 0x192D8C (Halo)..too small to detect?
|
||||
|
||||
* Palette needs to actually be used, not just allowed to execute.
|
||||
|
||||
* Check if 4361 Resource8_Release is the same as 4627 & 3925 (3911)
|
||||
|
||||
* Configurable dead zone, for touchy controllers
|
||||
|
||||
* Push Buffer Size is stored in a global. This may be important (hard to tell)
|
||||
|
||||
* Perhaps for global variable detection, have some sort of array of
|
||||
function + offset pairs to check. That way if an Xbe happens to not
|
||||
use a particular function (wont get linked in), there are other chances
|
||||
to locate the variable. In the even that none are found, the global ptr
|
||||
should be set to NULL, and any references to it should not assume it
|
||||
will not be NULL.
|
||||
|
||||
* Special temporarily X_D3DResource handles need to be kept track of and
|
||||
periodically garbage collected. Garbage collection frequency can be a
|
||||
core configuration option.
|
||||
|
||||
* Register() probably needn't re-unswizzle each time. cache a copy of
|
||||
the address it was registered to (or a global table) and simply update
|
||||
the data pointer to that IDirect3DTexture8 instance.
|
||||
|
||||
* Support cards that just plain dont have 32 bit color?
|
||||
|
||||
* The notorious Heap Allocation crash still needs to be solved on a low
|
||||
level. It is strongly preferable to debug this instead of having to
|
||||
intercept the entire Rtl heap set of functions.
|
||||
|
||||
* Stabilize TLS (it's close...)
|
||||
|
||||
+ Closing a console should not terminate the entire process.
|
||||
|
||||
+ Perfect the timing on KeTickCount. This can be updated along with the
|
||||
Xbox-Never-Sleeps, which would give much higher precision than the
|
||||
current seperate-thread method.
|
||||
|
||||
+ Some sort of delete-after-emulation type of functionality?
|
||||
|
||||
+ Use SetDataFormat instead of parsing device input by hand?
|
||||
|
||||
+ Batch config all buttons (should be very easy..just click one by one)
|
||||
|
||||
+ Configuration screens may not necessarily need to be modal windows.
|
||||
|
||||
+ Xbe file associations via user configuration. This could include an
|
||||
option to either automatically execute the Xbe, or simply open it up
|
||||
in Cxbx's main window. For this purpose, Cxbx.dll should also be
|
||||
registered in the system so that a converted Exe can run from anywhere.
|
||||
|
||||
Converted Exe files should use the Cxbx icon
|
||||
|
||||
When loading a file, menus and WM_CLOSE should be disabled and an update
|
||||
progress should be sent via callback from core.
|
||||
|
||||
Encapsulate RecentFiles into a nice little class
|
||||
|
||||
Allow a logo bitmap to be added if one does not exist. This may require that
|
||||
the size of headers be increased. (sizeof_headers).
|
||||
|
|
|
@ -1,143 +1,143 @@
|
|||
#undef WIN32
|
||||
/* ANSI and traditional C compatability macros
|
||||
Copyright 1991, 1992 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
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. */
|
||||
|
||||
/* ANSI and traditional C compatibility macros
|
||||
|
||||
ANSI C is assumed if __STDC__ is #defined.
|
||||
|
||||
Macro ANSI C definition Traditional C definition
|
||||
----- ---- - ---------- ----------- - ----------
|
||||
PTR `void *' `char *'
|
||||
LONG_DOUBLE `long double' `double'
|
||||
VOLATILE `volatile' `'
|
||||
SIGNED `signed' `'
|
||||
PTRCONST `void *const' `char *'
|
||||
ANSI_PROTOTYPES 1 not defined
|
||||
|
||||
CONST is also defined, but is obsolete. Just use const.
|
||||
|
||||
DEFUN (name, arglist, args)
|
||||
|
||||
Defines function NAME.
|
||||
|
||||
ARGLIST lists the arguments, separated by commas and enclosed in
|
||||
parentheses. ARGLIST becomes the argument list in traditional C.
|
||||
|
||||
ARGS list the arguments with their types. It becomes a prototype in
|
||||
ANSI C, and the type declarations in traditional C. Arguments should
|
||||
be separated with `AND'. For functions with a variable number of
|
||||
arguments, the last thing listed should be `DOTS'.
|
||||
|
||||
DEFUN_VOID (name)
|
||||
|
||||
Defines a function NAME, which takes no arguments.
|
||||
|
||||
obsolete -- EXFUN (name, (prototype)) -- obsolete.
|
||||
|
||||
Replaced by PARAMS. Do not use; will disappear someday soon.
|
||||
Was used in external function declarations.
|
||||
In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in
|
||||
parentheses). In traditional C it is `NAME()'.
|
||||
For a function that takes no arguments, PROTOTYPE should be `(void)'.
|
||||
|
||||
PARAMS ((args))
|
||||
|
||||
We could use the EXFUN macro to handle prototype declarations, but
|
||||
the name is misleading and the result is ugly. So we just define a
|
||||
simple macro to handle the parameter lists, as in:
|
||||
|
||||
static int foo PARAMS ((int, char));
|
||||
|
||||
This produces: `static int foo();' or `static int foo (int, char);'
|
||||
|
||||
EXFUN would have done it like this:
|
||||
|
||||
static int EXFUN (foo, (int, char));
|
||||
|
||||
but the function is not external...and it's hard to visually parse
|
||||
the function name out of the mess. EXFUN should be considered
|
||||
obsolete; new code should be written to use PARAMS.
|
||||
|
||||
For example:
|
||||
extern int printf PARAMS ((CONST char *format DOTS));
|
||||
int DEFUN(fprintf, (stream, format),
|
||||
FILE *stream AND CONST char *format DOTS) { ... }
|
||||
void DEFUN_VOID(abort) { ... }
|
||||
*/
|
||||
|
||||
#ifndef _ANSIDECL_H
|
||||
|
||||
#define _ANSIDECL_H 1
|
||||
|
||||
#include <defs.h>
|
||||
|
||||
/* Every source file includes this file,
|
||||
so they will all get the switch for lint. */
|
||||
/* LINTLIBRARY */
|
||||
|
||||
|
||||
#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32)
|
||||
/* All known AIX compilers implement these things (but don't always
|
||||
define __STDC__). The RISC/OS MIPS compiler defines these things
|
||||
in SVR4 mode, but does not define __STDC__. */
|
||||
|
||||
#define PTR void *
|
||||
#define PTRCONST void *CONST
|
||||
#define LONG_DOUBLE long double
|
||||
|
||||
#define AND ,
|
||||
#define NOARGS void
|
||||
#define CONST const
|
||||
#define VOLATILE volatile
|
||||
#define SIGNED signed
|
||||
#define DOTS , ...
|
||||
|
||||
#define EXFUN(name, proto) name proto
|
||||
#define DEFUN(name, arglist, args) name(args)
|
||||
#define DEFUN_VOID(name) name(void)
|
||||
|
||||
#define PROTO(type, name, arglist) type name arglist
|
||||
#define PARAMS(paramlist) paramlist
|
||||
#define ANSI_PROTOTYPES 1
|
||||
|
||||
#else /* Not ANSI C. */
|
||||
|
||||
#define PTR char *
|
||||
#define PTRCONST PTR
|
||||
#define LONG_DOUBLE double
|
||||
|
||||
#define AND ;
|
||||
#define NOARGS
|
||||
#define CONST
|
||||
#ifndef const /* some systems define it in header files for non-ansi mode */
|
||||
#define const
|
||||
#endif
|
||||
#define VOLATILE
|
||||
#define SIGNED
|
||||
#define DOTS
|
||||
|
||||
#define EXFUN(name, proto) name()
|
||||
#define DEFUN(name, arglist, args) name arglist args;
|
||||
#define DEFUN_VOID(name) name()
|
||||
#define PROTO(type, name, arglist) type name ()
|
||||
#define PARAMS(paramlist) ()
|
||||
|
||||
#endif /* ANSI C. */
|
||||
|
||||
#endif /* ansidecl.h */
|
||||
#undef WIN32
|
||||
/* ANSI and traditional C compatability macros
|
||||
Copyright 1991, 1992 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
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. */
|
||||
|
||||
/* ANSI and traditional C compatibility macros
|
||||
|
||||
ANSI C is assumed if __STDC__ is #defined.
|
||||
|
||||
Macro ANSI C definition Traditional C definition
|
||||
----- ---- - ---------- ----------- - ----------
|
||||
PTR `void *' `char *'
|
||||
LONG_DOUBLE `long double' `double'
|
||||
VOLATILE `volatile' `'
|
||||
SIGNED `signed' `'
|
||||
PTRCONST `void *const' `char *'
|
||||
ANSI_PROTOTYPES 1 not defined
|
||||
|
||||
CONST is also defined, but is obsolete. Just use const.
|
||||
|
||||
DEFUN (name, arglist, args)
|
||||
|
||||
Defines function NAME.
|
||||
|
||||
ARGLIST lists the arguments, separated by commas and enclosed in
|
||||
parentheses. ARGLIST becomes the argument list in traditional C.
|
||||
|
||||
ARGS list the arguments with their types. It becomes a prototype in
|
||||
ANSI C, and the type declarations in traditional C. Arguments should
|
||||
be separated with `AND'. For functions with a variable number of
|
||||
arguments, the last thing listed should be `DOTS'.
|
||||
|
||||
DEFUN_VOID (name)
|
||||
|
||||
Defines a function NAME, which takes no arguments.
|
||||
|
||||
obsolete -- EXFUN (name, (prototype)) -- obsolete.
|
||||
|
||||
Replaced by PARAMS. Do not use; will disappear someday soon.
|
||||
Was used in external function declarations.
|
||||
In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in
|
||||
parentheses). In traditional C it is `NAME()'.
|
||||
For a function that takes no arguments, PROTOTYPE should be `(void)'.
|
||||
|
||||
PARAMS ((args))
|
||||
|
||||
We could use the EXFUN macro to handle prototype declarations, but
|
||||
the name is misleading and the result is ugly. So we just define a
|
||||
simple macro to handle the parameter lists, as in:
|
||||
|
||||
static int foo PARAMS ((int, char));
|
||||
|
||||
This produces: `static int foo();' or `static int foo (int, char);'
|
||||
|
||||
EXFUN would have done it like this:
|
||||
|
||||
static int EXFUN (foo, (int, char));
|
||||
|
||||
but the function is not external...and it's hard to visually parse
|
||||
the function name out of the mess. EXFUN should be considered
|
||||
obsolete; new code should be written to use PARAMS.
|
||||
|
||||
For example:
|
||||
extern int printf PARAMS ((CONST char *format DOTS));
|
||||
int DEFUN(fprintf, (stream, format),
|
||||
FILE *stream AND CONST char *format DOTS) { ... }
|
||||
void DEFUN_VOID(abort) { ... }
|
||||
*/
|
||||
|
||||
#ifndef _ANSIDECL_H
|
||||
|
||||
#define _ANSIDECL_H 1
|
||||
|
||||
#include <defs.h>
|
||||
|
||||
/* Every source file includes this file,
|
||||
so they will all get the switch for lint. */
|
||||
/* LINTLIBRARY */
|
||||
|
||||
|
||||
#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32)
|
||||
/* All known AIX compilers implement these things (but don't always
|
||||
define __STDC__). The RISC/OS MIPS compiler defines these things
|
||||
in SVR4 mode, but does not define __STDC__. */
|
||||
|
||||
#define PTR void *
|
||||
#define PTRCONST void *CONST
|
||||
#define LONG_DOUBLE long double
|
||||
|
||||
#define AND ,
|
||||
#define NOARGS void
|
||||
#define CONST const
|
||||
#define VOLATILE volatile
|
||||
#define SIGNED signed
|
||||
#define DOTS , ...
|
||||
|
||||
#define EXFUN(name, proto) name proto
|
||||
#define DEFUN(name, arglist, args) name(args)
|
||||
#define DEFUN_VOID(name) name(void)
|
||||
|
||||
#define PROTO(type, name, arglist) type name arglist
|
||||
#define PARAMS(paramlist) paramlist
|
||||
#define ANSI_PROTOTYPES 1
|
||||
|
||||
#else /* Not ANSI C. */
|
||||
|
||||
#define PTR char *
|
||||
#define PTRCONST PTR
|
||||
#define LONG_DOUBLE double
|
||||
|
||||
#define AND ;
|
||||
#define NOARGS
|
||||
#define CONST
|
||||
#ifndef const /* some systems define it in header files for non-ansi mode */
|
||||
#define const
|
||||
#endif
|
||||
#define VOLATILE
|
||||
#define SIGNED
|
||||
#define DOTS
|
||||
|
||||
#define EXFUN(name, proto) name()
|
||||
#define DEFUN(name, arglist, args) name arglist args;
|
||||
#define DEFUN_VOID(name) name()
|
||||
#define PROTO(type, name, arglist) type name ()
|
||||
#define PARAMS(paramlist) ()
|
||||
|
||||
#endif /* ANSI C. */
|
||||
|
||||
#endif /* ansidecl.h */
|
||||
|
|
|
@ -1,74 +1,74 @@
|
|||
|
||||
|
||||
|
||||
|
||||
#ifndef __STDIO_H__
|
||||
#define __STDIO_H__
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#include <openxdk.h>
|
||||
|
||||
/*
|
||||
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
int __cdecl sprintf(char *, const char *, ...);
|
||||
|
||||
//#include <tamtypes.h>
|
||||
#include <stddef.h>
|
||||
#include <features.h>
|
||||
|
||||
|
||||
#define _O_RDONLY (0x00000001)
|
||||
#define _O_WRONLY (0x00000002)
|
||||
#define _O_RDWR (0x00000003)
|
||||
#define _O_NBLOCK (0x00000010)
|
||||
#define _O_APPEND (0x00000100)
|
||||
#define _O_CREAT (0x00000200)
|
||||
#define _O_TRUNC (0x00000400)
|
||||
#define _O_EXCL (0x00000800)
|
||||
#define _O_TEMPORARY (0x00001000)
|
||||
#define _O_TEXT (0x00004000)
|
||||
#define _O_BINARY (0x00008000)
|
||||
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_NBLOCK _O_NBLOCK
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
extern u32 LastErrorCode;
|
||||
|
||||
int _open( char *filename, int oflag, int permission );
|
||||
int _read( int handle, void *buffer, unsigned int count );
|
||||
int _write( int handle, void* buffer, unsigned int count );
|
||||
int _close( int handle );
|
||||
int _lseek( int handle, u32 offset, int base );
|
||||
|
||||
int nprintf(const char *format, ...);
|
||||
int printf(const char *format, ...);
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // __STDIO_H__
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef __STDIO_H__
|
||||
#define __STDIO_H__
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#include <openxdk.h>
|
||||
|
||||
/*
|
||||
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
int __cdecl sprintf(char *, const char *, ...);
|
||||
|
||||
//#include <tamtypes.h>
|
||||
#include <stddef.h>
|
||||
#include <features.h>
|
||||
|
||||
|
||||
#define _O_RDONLY (0x00000001)
|
||||
#define _O_WRONLY (0x00000002)
|
||||
#define _O_RDWR (0x00000003)
|
||||
#define _O_NBLOCK (0x00000010)
|
||||
#define _O_APPEND (0x00000100)
|
||||
#define _O_CREAT (0x00000200)
|
||||
#define _O_TRUNC (0x00000400)
|
||||
#define _O_EXCL (0x00000800)
|
||||
#define _O_TEMPORARY (0x00001000)
|
||||
#define _O_TEXT (0x00004000)
|
||||
#define _O_BINARY (0x00008000)
|
||||
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_NBLOCK _O_NBLOCK
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
extern u32 LastErrorCode;
|
||||
|
||||
int _open( char *filename, int oflag, int permission );
|
||||
int _read( int handle, void *buffer, unsigned int count );
|
||||
int _write( int handle, void* buffer, unsigned int count );
|
||||
int _close( int handle );
|
||||
int _lseek( int handle, u32 offset, int base );
|
||||
|
||||
int nprintf(const char *format, ...);
|
||||
int printf(const char *format, ...);
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // __STDIO_H__
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
/* This file should define __BYTE_ORDER as appropriate for the machine
|
||||
in question. See string/endian.h for how to define it.
|
||||
|
||||
If only the stub bits/endian.h applies to a particular configuration,
|
||||
bytesex.h is generated by running a program on the host machine.
|
||||
So if cross-compiling to a machine with a different byte order,
|
||||
the bits/endian.h file for that machine must exist. */
|
||||
|
||||
#ifndef _ENDIAN_H
|
||||
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
|
||||
#endif
|
||||
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
//#error Machine byte order unknown.
|
||||
/* This file should define __BYTE_ORDER as appropriate for the machine
|
||||
in question. See string/endian.h for how to define it.
|
||||
|
||||
If only the stub bits/endian.h applies to a particular configuration,
|
||||
bytesex.h is generated by running a program on the host machine.
|
||||
So if cross-compiling to a machine with a different byte order,
|
||||
the bits/endian.h file for that machine must exist. */
|
||||
|
||||
#ifndef _ENDIAN_H
|
||||
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
|
||||
#endif
|
||||
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
//#error Machine byte order unknown.
|
||||
|
|
|
@ -1,131 +1,131 @@
|
|||
/* Copyright (C) 1991,1992,94-1999,2000,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <sys/types.h> instead.
|
||||
*/
|
||||
|
||||
#ifndef _BITS_TYPES_H
|
||||
#define _BITS_TYPES_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
|
||||
/* Convenience types. */
|
||||
typedef unsigned char __u_char;
|
||||
typedef unsigned short __u_short;
|
||||
typedef unsigned int __u_int;
|
||||
typedef unsigned long __u_long;
|
||||
#ifdef __GNUC__
|
||||
typedef unsigned long long int __u_quad_t;
|
||||
typedef long long int __quad_t;
|
||||
#else
|
||||
typedef struct
|
||||
{
|
||||
long __val[2];
|
||||
} __quad_t;
|
||||
typedef struct
|
||||
{
|
||||
__u_long __val[2];
|
||||
} __u_quad_t;
|
||||
#endif
|
||||
typedef signed char __int8_t;
|
||||
typedef unsigned char __uint8_t;
|
||||
typedef signed short int __int16_t;
|
||||
typedef unsigned short int __uint16_t;
|
||||
typedef signed int __int32_t;
|
||||
typedef unsigned int __uint32_t;
|
||||
#ifdef __GNUC__
|
||||
typedef signed long long int __int64_t;
|
||||
typedef unsigned long long int __uint64_t;
|
||||
#endif
|
||||
typedef __quad_t *__qaddr_t;
|
||||
|
||||
typedef int __dev_t; /* Type of device numbers. */
|
||||
typedef unsigned int __uid_t; /* Type of user identifications. */
|
||||
typedef unsigned int __gid_t; /* Type of group identifications. */
|
||||
typedef unsigned int __ino_t; /* Type of file serial numbers. */
|
||||
typedef __quad_t __ino64_t; /* Type of file serial numbers (LFS). */
|
||||
typedef unsigned int __mode_t; /* Type of file attribute bitmasks. */
|
||||
typedef unsigned short int __nlink_t; /* Type of file link counts. */
|
||||
typedef long int __off_t; /* Type of file sizes and offsets. */
|
||||
typedef __quad_t __loff_t; /* Type of file sizes and offsets. */
|
||||
typedef __loff_t __off64_t; /* Type of file sizes and offsets (LFS). */
|
||||
typedef int __pid_t; /* Type of process identifications. */
|
||||
typedef int __ssize_t; /* Type of a byte count, or error. */
|
||||
typedef __u_quad_t __fsid_t; /* Type of file system IDs. */
|
||||
typedef long int __clock_t; /* Type of CPU usage counts. */
|
||||
typedef long int __rlim_t; /* Type for resource measurement. */
|
||||
typedef __quad_t __rlim64_t; /* Type for resource measurement (LFS). */
|
||||
typedef unsigned int __id_t; /* General type for IDs. */
|
||||
|
||||
/* Everythin' else. */
|
||||
typedef long int __daddr_t; /* The type of a disk address. */
|
||||
typedef char *__caddr_t;
|
||||
typedef long int __time_t;
|
||||
typedef unsigned int __useconds_t;
|
||||
typedef long int __suseconds_t;
|
||||
typedef long int __swblk_t; /* Type of a swap block maybe? */
|
||||
typedef long int __key_t; /* Type of an IPC key */
|
||||
|
||||
|
||||
/* Clock ID used in clock and timer functions. */
|
||||
typedef int __clockid_t;
|
||||
|
||||
/* Timer ID returned by `timer_create'. */
|
||||
typedef int __timer_t;
|
||||
|
||||
|
||||
/* Number of descriptors that can fit in an `fd_set'. */
|
||||
#define __FD_SETSIZE 256
|
||||
|
||||
|
||||
/* XXX Used in `struct shmid_ds'. */
|
||||
typedef unsigned short int __ipc_pid_t;
|
||||
|
||||
|
||||
/* Type to represent block size. */
|
||||
typedef unsigned int __blksize_t;
|
||||
|
||||
/* Types from the Large File Support interface. */
|
||||
|
||||
/* Type to count number os disk blocks. */
|
||||
typedef long int __blkcnt_t;
|
||||
typedef __quad_t __blkcnt64_t;
|
||||
|
||||
/* Type to count file system blocks. */
|
||||
typedef unsigned int __fsblkcnt_t;
|
||||
typedef __u_quad_t __fsblkcnt64_t;
|
||||
|
||||
/* Type to count file system inodes. */
|
||||
typedef unsigned long int __fsfilcnt_t;
|
||||
typedef __u_quad_t __fsfilcnt64_t;
|
||||
|
||||
/* Used in XTI. */
|
||||
typedef int __t_scalar_t;
|
||||
typedef unsigned int __t_uscalar_t;
|
||||
|
||||
/* Duplicates info from stdint.h but this is used in unistd.h. */
|
||||
typedef long int __intptr_t;
|
||||
|
||||
/* Duplicate info from sys/socket.h. */
|
||||
typedef unsigned int __socklen_t;
|
||||
|
||||
#endif /* bits/types.h */
|
||||
/* Copyright (C) 1991,1992,94-1999,2000,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <sys/types.h> instead.
|
||||
*/
|
||||
|
||||
#ifndef _BITS_TYPES_H
|
||||
#define _BITS_TYPES_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
|
||||
/* Convenience types. */
|
||||
typedef unsigned char __u_char;
|
||||
typedef unsigned short __u_short;
|
||||
typedef unsigned int __u_int;
|
||||
typedef unsigned long __u_long;
|
||||
#ifdef __GNUC__
|
||||
typedef unsigned long long int __u_quad_t;
|
||||
typedef long long int __quad_t;
|
||||
#else
|
||||
typedef struct
|
||||
{
|
||||
long __val[2];
|
||||
} __quad_t;
|
||||
typedef struct
|
||||
{
|
||||
__u_long __val[2];
|
||||
} __u_quad_t;
|
||||
#endif
|
||||
typedef signed char __int8_t;
|
||||
typedef unsigned char __uint8_t;
|
||||
typedef signed short int __int16_t;
|
||||
typedef unsigned short int __uint16_t;
|
||||
typedef signed int __int32_t;
|
||||
typedef unsigned int __uint32_t;
|
||||
#ifdef __GNUC__
|
||||
typedef signed long long int __int64_t;
|
||||
typedef unsigned long long int __uint64_t;
|
||||
#endif
|
||||
typedef __quad_t *__qaddr_t;
|
||||
|
||||
typedef int __dev_t; /* Type of device numbers. */
|
||||
typedef unsigned int __uid_t; /* Type of user identifications. */
|
||||
typedef unsigned int __gid_t; /* Type of group identifications. */
|
||||
typedef unsigned int __ino_t; /* Type of file serial numbers. */
|
||||
typedef __quad_t __ino64_t; /* Type of file serial numbers (LFS). */
|
||||
typedef unsigned int __mode_t; /* Type of file attribute bitmasks. */
|
||||
typedef unsigned short int __nlink_t; /* Type of file link counts. */
|
||||
typedef long int __off_t; /* Type of file sizes and offsets. */
|
||||
typedef __quad_t __loff_t; /* Type of file sizes and offsets. */
|
||||
typedef __loff_t __off64_t; /* Type of file sizes and offsets (LFS). */
|
||||
typedef int __pid_t; /* Type of process identifications. */
|
||||
typedef int __ssize_t; /* Type of a byte count, or error. */
|
||||
typedef __u_quad_t __fsid_t; /* Type of file system IDs. */
|
||||
typedef long int __clock_t; /* Type of CPU usage counts. */
|
||||
typedef long int __rlim_t; /* Type for resource measurement. */
|
||||
typedef __quad_t __rlim64_t; /* Type for resource measurement (LFS). */
|
||||
typedef unsigned int __id_t; /* General type for IDs. */
|
||||
|
||||
/* Everythin' else. */
|
||||
typedef long int __daddr_t; /* The type of a disk address. */
|
||||
typedef char *__caddr_t;
|
||||
typedef long int __time_t;
|
||||
typedef unsigned int __useconds_t;
|
||||
typedef long int __suseconds_t;
|
||||
typedef long int __swblk_t; /* Type of a swap block maybe? */
|
||||
typedef long int __key_t; /* Type of an IPC key */
|
||||
|
||||
|
||||
/* Clock ID used in clock and timer functions. */
|
||||
typedef int __clockid_t;
|
||||
|
||||
/* Timer ID returned by `timer_create'. */
|
||||
typedef int __timer_t;
|
||||
|
||||
|
||||
/* Number of descriptors that can fit in an `fd_set'. */
|
||||
#define __FD_SETSIZE 256
|
||||
|
||||
|
||||
/* XXX Used in `struct shmid_ds'. */
|
||||
typedef unsigned short int __ipc_pid_t;
|
||||
|
||||
|
||||
/* Type to represent block size. */
|
||||
typedef unsigned int __blksize_t;
|
||||
|
||||
/* Types from the Large File Support interface. */
|
||||
|
||||
/* Type to count number os disk blocks. */
|
||||
typedef long int __blkcnt_t;
|
||||
typedef __quad_t __blkcnt64_t;
|
||||
|
||||
/* Type to count file system blocks. */
|
||||
typedef unsigned int __fsblkcnt_t;
|
||||
typedef __u_quad_t __fsblkcnt64_t;
|
||||
|
||||
/* Type to count file system inodes. */
|
||||
typedef unsigned long int __fsfilcnt_t;
|
||||
typedef __u_quad_t __fsfilcnt64_t;
|
||||
|
||||
/* Used in XTI. */
|
||||
typedef int __t_scalar_t;
|
||||
typedef unsigned int __t_uscalar_t;
|
||||
|
||||
/* Duplicates info from stdint.h but this is used in unistd.h. */
|
||||
typedef long int __intptr_t;
|
||||
|
||||
/* Duplicate info from sys/socket.h. */
|
||||
typedef unsigned int __socklen_t;
|
||||
|
||||
#endif /* bits/types.h */
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
// **************************************************************************
|
||||
//
|
||||
// CONIO.H : Standard Port IO routines
|
||||
//
|
||||
// **************************************************************************
|
||||
#ifndef __CONIO_H__
|
||||
#define __CONIO_H__
|
||||
|
||||
|
||||
|
||||
|
||||
void _outb( unsigned short port, unsigned char data );
|
||||
void _outw( unsigned short port, unsigned short data );
|
||||
void _outd( unsigned short port, unsigned int data );
|
||||
unsigned char _inb( unsigned short port );
|
||||
unsigned short _inw( unsigned short port );
|
||||
unsigned int _ind( unsigned short port );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// **************************************************************************
|
||||
//
|
||||
// CONIO.H : Standard Port IO routines
|
||||
//
|
||||
// **************************************************************************
|
||||
#ifndef __CONIO_H__
|
||||
#define __CONIO_H__
|
||||
|
||||
|
||||
|
||||
|
||||
void _outb( unsigned short port, unsigned char data );
|
||||
void _outw( unsigned short port, unsigned short data );
|
||||
void _outd( unsigned short port, unsigned int data );
|
||||
unsigned char _inb( unsigned short port );
|
||||
unsigned short _inw( unsigned short port );
|
||||
unsigned int _ind( unsigned short port );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //__CONIO_H__
|
|
@ -1,278 +1,278 @@
|
|||
/* Copyright (C) 1991,92,93,95,96,97,98,99,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/*
|
||||
* ISO C99 Standard 7.4: Character handling <ctype.h>
|
||||
*/
|
||||
|
||||
#ifndef _CTYPE_H
|
||||
#define _CTYPE_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <bits/types.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#ifndef _ISbit
|
||||
/* These are all the characteristics of characters.
|
||||
If there get to be more than 16 distinct characteristics,
|
||||
many things must be changed that use `unsigned short int's.
|
||||
|
||||
The characteristics are stored always in network byte order (big
|
||||
endian). We define the bit value interpretations here dependent on the
|
||||
machine's byte order. */
|
||||
|
||||
# include <endian.h>
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define _ISbit(bit) (1 << (bit))
|
||||
# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
|
||||
# define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
|
||||
# endif
|
||||
|
||||
enum
|
||||
{
|
||||
_ISupper = _ISbit (0), /* UPPERCASE. */
|
||||
_ISlower = _ISbit (1), /* lowercase. */
|
||||
_ISalpha = _ISbit (2), /* Alphabetic. */
|
||||
_ISdigit = _ISbit (3), /* Numeric. */
|
||||
_ISxdigit = _ISbit (4), /* Hexadecimal numeric. */
|
||||
_ISspace = _ISbit (5), /* Whitespace. */
|
||||
_ISprint = _ISbit (6), /* Printing. */
|
||||
_ISgraph = _ISbit (7), /* Graphical. */
|
||||
_ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
|
||||
_IScntrl = _ISbit (9), /* Control character. */
|
||||
_ISpunct = _ISbit (10), /* Punctuation. */
|
||||
_ISalnum = _ISbit (11) /* Alphanumeric. */
|
||||
};
|
||||
#endif /* ! _ISbit */
|
||||
|
||||
/* These are defined in ctype-info.c.
|
||||
The declarations here must match those in localeinfo.h.
|
||||
|
||||
These point into arrays of 384, so they can be indexed by any `unsigned
|
||||
char' value [0,255]; by EOF (-1); or by any `signed char' value
|
||||
[-128,-1). ISO C requires that the ctype functions work for `unsigned
|
||||
char' values and for EOF; we also support negative `signed char' values
|
||||
for broken old programs. The case conversion arrays are of `int's
|
||||
rather than `unsigned char's because tolower (EOF) must be EOF, which
|
||||
doesn't fit into an `unsigned char'. But today more important is that
|
||||
the arrays are also used for multi-byte character sets. */
|
||||
extern __const unsigned short int *__ctype_b; /* Characteristics. */
|
||||
extern __const __int32_t *__ctype_tolower; /* Case conversions. */
|
||||
extern __const __int32_t *__ctype_toupper; /* Case conversions. */
|
||||
|
||||
#define __isctype(c, type) \
|
||||
(__ctype_b[(int) (c)] & (unsigned short int) type)
|
||||
|
||||
#define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */
|
||||
#define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */
|
||||
|
||||
#define __exctype(name) extern int name (int) __THROW
|
||||
|
||||
/* The following names are all functions:
|
||||
int isCHARACTERISTIC(int c);
|
||||
which return nonzero iff C has CHARACTERISTIC.
|
||||
For the meaning of the characteristic names, see the `enum' above. */
|
||||
__exctype (isalnum);
|
||||
__exctype (isalpha);
|
||||
__exctype (iscntrl);
|
||||
__exctype (isdigit);
|
||||
__exctype (islower);
|
||||
__exctype (isgraph);
|
||||
__exctype (isprint);
|
||||
__exctype (ispunct);
|
||||
__exctype (isspace);
|
||||
__exctype (isupper);
|
||||
__exctype (isxdigit);
|
||||
|
||||
#ifdef __USE_ISOC99
|
||||
__exctype (isblank);
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the lowercase version of C. */
|
||||
extern int tolower (int __c) __THROW;
|
||||
|
||||
/* Return the uppercase version of C. */
|
||||
extern int toupper (int __c) __THROW;
|
||||
|
||||
|
||||
#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
|
||||
/* Return nonzero iff C is in the ASCII set
|
||||
(i.e., is no more than 7 bits wide). */
|
||||
extern int isascii (int __c) __THROW;
|
||||
|
||||
/* Return the part of C that is in the ASCII set
|
||||
(i.e., the low-order 7 bits of C). */
|
||||
extern int toascii (int __c) __THROW;
|
||||
|
||||
/* These are the same as `toupper' and `tolower' except that they do not
|
||||
check the argument for being in the range of a `char'. */
|
||||
__exctype (_toupper);
|
||||
__exctype (_tolower);
|
||||
#endif /* Use SVID or use misc. */
|
||||
|
||||
/* This code is needed for the optimized mapping functions. */
|
||||
#define __tobody(c, f, a, args) \
|
||||
(__extension__ \
|
||||
({ int __res; \
|
||||
if (sizeof (c) > 1) \
|
||||
{ \
|
||||
if (__builtin_constant_p (c)) \
|
||||
{ \
|
||||
int __c = (c); \
|
||||
__res = __c < -128 || __c > 255 ? __c : a[__c]; \
|
||||
} \
|
||||
else \
|
||||
__res = f args; \
|
||||
} \
|
||||
else \
|
||||
__res = a[(int) (c)]; \
|
||||
__res; }))
|
||||
|
||||
#ifndef __NO_CTYPE
|
||||
# define isalnum(c) __isctype((c), _ISalnum)
|
||||
# define isalpha(c) __isctype((c), _ISalpha)
|
||||
# define iscntrl(c) __isctype((c), _IScntrl)
|
||||
# define isdigit(c) __isctype((c), _ISdigit)
|
||||
# define islower(c) __isctype((c), _ISlower)
|
||||
# define isgraph(c) __isctype((c), _ISgraph)
|
||||
# define isprint(c) __isctype((c), _ISprint)
|
||||
# define ispunct(c) __isctype((c), _ISpunct)
|
||||
# define isspace(c) __isctype((c), _ISspace)
|
||||
# define isupper(c) __isctype((c), _ISupper)
|
||||
# define isxdigit(c) __isctype((c), _ISxdigit)
|
||||
|
||||
# ifdef __USE_ISOC99
|
||||
# define isblank(c) __isctype((c), _ISblank)
|
||||
# endif
|
||||
|
||||
# ifdef __USE_EXTERN_INLINES
|
||||
extern __inline int
|
||||
tolower (int __c) __THROW
|
||||
{
|
||||
return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
|
||||
}
|
||||
|
||||
extern __inline int
|
||||
toupper (int __c) __THROW
|
||||
{
|
||||
return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
|
||||
}
|
||||
# endif
|
||||
|
||||
# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
# define tolower(c) __tobody (c, tolower, __ctype_tolower, (c))
|
||||
# define toupper(c) __tobody (c, toupper, __ctype_toupper, (c))
|
||||
# endif /* Optimizing gcc */
|
||||
|
||||
# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
# define isascii(c) __isascii (c)
|
||||
# define toascii(c) __toascii (c)
|
||||
|
||||
# define _tolower(c) ((int) __ctype_tolower[(int) (c)])
|
||||
# define _toupper(c) ((int) __ctype_toupper[(int) (c)])
|
||||
# endif
|
||||
|
||||
#endif /* Not __NO_CTYPE. */
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* The concept of one static locale per category is not very well
|
||||
thought out. Many applications will need to process its data using
|
||||
information from several different locales. Another application is
|
||||
the implementation of the internationalization handling in the
|
||||
upcoming ISO C++ standard library. To support this another set of
|
||||
the functions using locale data exist which have an additional
|
||||
argument.
|
||||
|
||||
Attention: all these functions are *not* standardized in any form.
|
||||
This is a proof-of-concept implementation. */
|
||||
|
||||
/* Structure for reentrant locale using functions. This is an
|
||||
(almost) opaque type for the user level programs. */
|
||||
# include <xlocale.h>
|
||||
|
||||
/* These definitions are similar to the ones above but all functions
|
||||
take as an argument a handle for the locale which shall be used. */
|
||||
# define __isctype_l(c, type, locale) \
|
||||
((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
|
||||
|
||||
# define __exctype_l(name) extern int name (int, __locale_t) __THROW
|
||||
|
||||
/* The following names are all functions:
|
||||
int isCHARACTERISTIC(int c, locale_t *locale);
|
||||
which return nonzero iff C has CHARACTERISTIC.
|
||||
For the meaning of the characteristic names, see the `enum' above. */
|
||||
__exctype_l (__isalnum_l);
|
||||
__exctype_l (__isalpha_l);
|
||||
__exctype_l (__iscntrl_l);
|
||||
__exctype_l (__isdigit_l);
|
||||
__exctype_l (__islower_l);
|
||||
__exctype_l (__isgraph_l);
|
||||
__exctype_l (__isprint_l);
|
||||
__exctype_l (__ispunct_l);
|
||||
__exctype_l (__isspace_l);
|
||||
__exctype_l (__isupper_l);
|
||||
__exctype_l (__isxdigit_l);
|
||||
|
||||
__exctype_l (__isblank_l);
|
||||
|
||||
|
||||
/* Return the lowercase version of C in locale L. */
|
||||
extern int __tolower_l (int __c, __locale_t __l) __THROW;
|
||||
|
||||
/* Return the uppercase version of C. */
|
||||
extern int __toupper_l (int __c, __locale_t __l) __THROW;
|
||||
|
||||
# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
# define __tolower_l(c, locale) \
|
||||
__tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale))
|
||||
# define __toupper_l(c, locale) \
|
||||
__tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale))
|
||||
# endif /* Optimizing gcc */
|
||||
|
||||
|
||||
# ifndef __NO_CTYPE
|
||||
# define __isalnum_l(c,l) __isctype_l((c), _ISalnum, (l))
|
||||
# define __isalpha_l(c,l) __isctype_l((c), _ISalpha, (l))
|
||||
# define __iscntrl_l(c,l) __isctype_l((c), _IScntrl, (l))
|
||||
# define __isdigit_l(c,l) __isctype_l((c), _ISdigit, (l))
|
||||
# define __islower_l(c,l) __isctype_l((c), _ISlower, (l))
|
||||
# define __isgraph_l(c,l) __isctype_l((c), _ISgraph, (l))
|
||||
# define __isprint_l(c,l) __isctype_l((c), _ISprint, (l))
|
||||
# define __ispunct_l(c,l) __isctype_l((c), _ISpunct, (l))
|
||||
# define __isspace_l(c,l) __isctype_l((c), _ISspace, (l))
|
||||
# define __isupper_l(c,l) __isctype_l((c), _ISupper, (l))
|
||||
# define __isxdigit_l(c,l) __isctype_l((c), _ISxdigit, (l))
|
||||
|
||||
# define __isblank_l(c,l) __isctype_l((c), _ISblank, (l))
|
||||
|
||||
# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
# define __isascii_l(c,l) __isascii(c)
|
||||
# define __toascii_l(c,l) __toascii(c)
|
||||
# endif
|
||||
|
||||
# endif /* Not __NO_CTYPE. */
|
||||
|
||||
#endif /* Use GNU. */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* ctype.h */
|
||||
/* Copyright (C) 1991,92,93,95,96,97,98,99,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/*
|
||||
* ISO C99 Standard 7.4: Character handling <ctype.h>
|
||||
*/
|
||||
|
||||
#ifndef _CTYPE_H
|
||||
#define _CTYPE_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <bits/types.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#ifndef _ISbit
|
||||
/* These are all the characteristics of characters.
|
||||
If there get to be more than 16 distinct characteristics,
|
||||
many things must be changed that use `unsigned short int's.
|
||||
|
||||
The characteristics are stored always in network byte order (big
|
||||
endian). We define the bit value interpretations here dependent on the
|
||||
machine's byte order. */
|
||||
|
||||
# include <endian.h>
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define _ISbit(bit) (1 << (bit))
|
||||
# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
|
||||
# define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
|
||||
# endif
|
||||
|
||||
enum
|
||||
{
|
||||
_ISupper = _ISbit (0), /* UPPERCASE. */
|
||||
_ISlower = _ISbit (1), /* lowercase. */
|
||||
_ISalpha = _ISbit (2), /* Alphabetic. */
|
||||
_ISdigit = _ISbit (3), /* Numeric. */
|
||||
_ISxdigit = _ISbit (4), /* Hexadecimal numeric. */
|
||||
_ISspace = _ISbit (5), /* Whitespace. */
|
||||
_ISprint = _ISbit (6), /* Printing. */
|
||||
_ISgraph = _ISbit (7), /* Graphical. */
|
||||
_ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
|
||||
_IScntrl = _ISbit (9), /* Control character. */
|
||||
_ISpunct = _ISbit (10), /* Punctuation. */
|
||||
_ISalnum = _ISbit (11) /* Alphanumeric. */
|
||||
};
|
||||
#endif /* ! _ISbit */
|
||||
|
||||
/* These are defined in ctype-info.c.
|
||||
The declarations here must match those in localeinfo.h.
|
||||
|
||||
These point into arrays of 384, so they can be indexed by any `unsigned
|
||||
char' value [0,255]; by EOF (-1); or by any `signed char' value
|
||||
[-128,-1). ISO C requires that the ctype functions work for `unsigned
|
||||
char' values and for EOF; we also support negative `signed char' values
|
||||
for broken old programs. The case conversion arrays are of `int's
|
||||
rather than `unsigned char's because tolower (EOF) must be EOF, which
|
||||
doesn't fit into an `unsigned char'. But today more important is that
|
||||
the arrays are also used for multi-byte character sets. */
|
||||
extern __const unsigned short int *__ctype_b; /* Characteristics. */
|
||||
extern __const __int32_t *__ctype_tolower; /* Case conversions. */
|
||||
extern __const __int32_t *__ctype_toupper; /* Case conversions. */
|
||||
|
||||
#define __isctype(c, type) \
|
||||
(__ctype_b[(int) (c)] & (unsigned short int) type)
|
||||
|
||||
#define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */
|
||||
#define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */
|
||||
|
||||
#define __exctype(name) extern int name (int) __THROW
|
||||
|
||||
/* The following names are all functions:
|
||||
int isCHARACTERISTIC(int c);
|
||||
which return nonzero iff C has CHARACTERISTIC.
|
||||
For the meaning of the characteristic names, see the `enum' above. */
|
||||
__exctype (isalnum);
|
||||
__exctype (isalpha);
|
||||
__exctype (iscntrl);
|
||||
__exctype (isdigit);
|
||||
__exctype (islower);
|
||||
__exctype (isgraph);
|
||||
__exctype (isprint);
|
||||
__exctype (ispunct);
|
||||
__exctype (isspace);
|
||||
__exctype (isupper);
|
||||
__exctype (isxdigit);
|
||||
|
||||
#ifdef __USE_ISOC99
|
||||
__exctype (isblank);
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the lowercase version of C. */
|
||||
extern int tolower (int __c) __THROW;
|
||||
|
||||
/* Return the uppercase version of C. */
|
||||
extern int toupper (int __c) __THROW;
|
||||
|
||||
|
||||
#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
|
||||
/* Return nonzero iff C is in the ASCII set
|
||||
(i.e., is no more than 7 bits wide). */
|
||||
extern int isascii (int __c) __THROW;
|
||||
|
||||
/* Return the part of C that is in the ASCII set
|
||||
(i.e., the low-order 7 bits of C). */
|
||||
extern int toascii (int __c) __THROW;
|
||||
|
||||
/* These are the same as `toupper' and `tolower' except that they do not
|
||||
check the argument for being in the range of a `char'. */
|
||||
__exctype (_toupper);
|
||||
__exctype (_tolower);
|
||||
#endif /* Use SVID or use misc. */
|
||||
|
||||
/* This code is needed for the optimized mapping functions. */
|
||||
#define __tobody(c, f, a, args) \
|
||||
(__extension__ \
|
||||
({ int __res; \
|
||||
if (sizeof (c) > 1) \
|
||||
{ \
|
||||
if (__builtin_constant_p (c)) \
|
||||
{ \
|
||||
int __c = (c); \
|
||||
__res = __c < -128 || __c > 255 ? __c : a[__c]; \
|
||||
} \
|
||||
else \
|
||||
__res = f args; \
|
||||
} \
|
||||
else \
|
||||
__res = a[(int) (c)]; \
|
||||
__res; }))
|
||||
|
||||
#ifndef __NO_CTYPE
|
||||
# define isalnum(c) __isctype((c), _ISalnum)
|
||||
# define isalpha(c) __isctype((c), _ISalpha)
|
||||
# define iscntrl(c) __isctype((c), _IScntrl)
|
||||
# define isdigit(c) __isctype((c), _ISdigit)
|
||||
# define islower(c) __isctype((c), _ISlower)
|
||||
# define isgraph(c) __isctype((c), _ISgraph)
|
||||
# define isprint(c) __isctype((c), _ISprint)
|
||||
# define ispunct(c) __isctype((c), _ISpunct)
|
||||
# define isspace(c) __isctype((c), _ISspace)
|
||||
# define isupper(c) __isctype((c), _ISupper)
|
||||
# define isxdigit(c) __isctype((c), _ISxdigit)
|
||||
|
||||
# ifdef __USE_ISOC99
|
||||
# define isblank(c) __isctype((c), _ISblank)
|
||||
# endif
|
||||
|
||||
# ifdef __USE_EXTERN_INLINES
|
||||
extern __inline int
|
||||
tolower (int __c) __THROW
|
||||
{
|
||||
return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
|
||||
}
|
||||
|
||||
extern __inline int
|
||||
toupper (int __c) __THROW
|
||||
{
|
||||
return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
|
||||
}
|
||||
# endif
|
||||
|
||||
# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
# define tolower(c) __tobody (c, tolower, __ctype_tolower, (c))
|
||||
# define toupper(c) __tobody (c, toupper, __ctype_toupper, (c))
|
||||
# endif /* Optimizing gcc */
|
||||
|
||||
# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
# define isascii(c) __isascii (c)
|
||||
# define toascii(c) __toascii (c)
|
||||
|
||||
# define _tolower(c) ((int) __ctype_tolower[(int) (c)])
|
||||
# define _toupper(c) ((int) __ctype_toupper[(int) (c)])
|
||||
# endif
|
||||
|
||||
#endif /* Not __NO_CTYPE. */
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* The concept of one static locale per category is not very well
|
||||
thought out. Many applications will need to process its data using
|
||||
information from several different locales. Another application is
|
||||
the implementation of the internationalization handling in the
|
||||
upcoming ISO C++ standard library. To support this another set of
|
||||
the functions using locale data exist which have an additional
|
||||
argument.
|
||||
|
||||
Attention: all these functions are *not* standardized in any form.
|
||||
This is a proof-of-concept implementation. */
|
||||
|
||||
/* Structure for reentrant locale using functions. This is an
|
||||
(almost) opaque type for the user level programs. */
|
||||
# include <xlocale.h>
|
||||
|
||||
/* These definitions are similar to the ones above but all functions
|
||||
take as an argument a handle for the locale which shall be used. */
|
||||
# define __isctype_l(c, type, locale) \
|
||||
((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
|
||||
|
||||
# define __exctype_l(name) extern int name (int, __locale_t) __THROW
|
||||
|
||||
/* The following names are all functions:
|
||||
int isCHARACTERISTIC(int c, locale_t *locale);
|
||||
which return nonzero iff C has CHARACTERISTIC.
|
||||
For the meaning of the characteristic names, see the `enum' above. */
|
||||
__exctype_l (__isalnum_l);
|
||||
__exctype_l (__isalpha_l);
|
||||
__exctype_l (__iscntrl_l);
|
||||
__exctype_l (__isdigit_l);
|
||||
__exctype_l (__islower_l);
|
||||
__exctype_l (__isgraph_l);
|
||||
__exctype_l (__isprint_l);
|
||||
__exctype_l (__ispunct_l);
|
||||
__exctype_l (__isspace_l);
|
||||
__exctype_l (__isupper_l);
|
||||
__exctype_l (__isxdigit_l);
|
||||
|
||||
__exctype_l (__isblank_l);
|
||||
|
||||
|
||||
/* Return the lowercase version of C in locale L. */
|
||||
extern int __tolower_l (int __c, __locale_t __l) __THROW;
|
||||
|
||||
/* Return the uppercase version of C. */
|
||||
extern int __toupper_l (int __c, __locale_t __l) __THROW;
|
||||
|
||||
# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
# define __tolower_l(c, locale) \
|
||||
__tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale))
|
||||
# define __toupper_l(c, locale) \
|
||||
__tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale))
|
||||
# endif /* Optimizing gcc */
|
||||
|
||||
|
||||
# ifndef __NO_CTYPE
|
||||
# define __isalnum_l(c,l) __isctype_l((c), _ISalnum, (l))
|
||||
# define __isalpha_l(c,l) __isctype_l((c), _ISalpha, (l))
|
||||
# define __iscntrl_l(c,l) __isctype_l((c), _IScntrl, (l))
|
||||
# define __isdigit_l(c,l) __isctype_l((c), _ISdigit, (l))
|
||||
# define __islower_l(c,l) __isctype_l((c), _ISlower, (l))
|
||||
# define __isgraph_l(c,l) __isctype_l((c), _ISgraph, (l))
|
||||
# define __isprint_l(c,l) __isctype_l((c), _ISprint, (l))
|
||||
# define __ispunct_l(c,l) __isctype_l((c), _ISpunct, (l))
|
||||
# define __isspace_l(c,l) __isctype_l((c), _ISspace, (l))
|
||||
# define __isupper_l(c,l) __isctype_l((c), _ISupper, (l))
|
||||
# define __isxdigit_l(c,l) __isctype_l((c), _ISxdigit, (l))
|
||||
|
||||
# define __isblank_l(c,l) __isctype_l((c), _ISblank, (l))
|
||||
|
||||
# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
# define __isascii_l(c,l) __isascii(c)
|
||||
# define __toascii_l(c,l) __toascii(c)
|
||||
# endif
|
||||
|
||||
# endif /* Not __NO_CTYPE. */
|
||||
|
||||
#endif /* Use GNU. */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* ctype.h */
|
||||
|
|
|
@ -1,40 +1,40 @@
|
|||
#ifndef __DEFS__
|
||||
#define __DEFS__
|
||||
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
typedef signed __int64 s64;
|
||||
typedef unsigned __int64 u64;
|
||||
|
||||
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0x00
|
||||
#endif
|
||||
|
||||
//
|
||||
// LIBC basics
|
||||
//
|
||||
|
||||
// GET rid of C4146 compiler warnings: unary minus operator applied to unsigned type, result still unsigned
|
||||
#define NEGU32(a) ((u32) (-((s32)(a))) )
|
||||
|
||||
//typedef unsigned int size_t;
|
||||
#define op_t unsigned long int
|
||||
#define OPSIZ (sizeof(op_t))
|
||||
|
||||
/*
|
||||
#define CONST const*/
|
||||
#define __CONSTVALUE
|
||||
#define __alloca _alloca // MSDEV has a built in _alloca
|
||||
|
||||
|
||||
int isascii(int c);
|
||||
|
||||
|
||||
#endif //__DEFS__
|
||||
#ifndef __DEFS__
|
||||
#define __DEFS__
|
||||
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
typedef signed __int64 s64;
|
||||
typedef unsigned __int64 u64;
|
||||
|
||||
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0x00
|
||||
#endif
|
||||
|
||||
//
|
||||
// LIBC basics
|
||||
//
|
||||
|
||||
// GET rid of C4146 compiler warnings: unary minus operator applied to unsigned type, result still unsigned
|
||||
#define NEGU32(a) ((u32) (-((s32)(a))) )
|
||||
|
||||
//typedef unsigned int size_t;
|
||||
#define op_t unsigned long int
|
||||
#define OPSIZ (sizeof(op_t))
|
||||
|
||||
/*
|
||||
#define CONST const*/
|
||||
#define __CONSTVALUE
|
||||
#define __alloca _alloca // MSDEV has a built in _alloca
|
||||
|
||||
|
||||
int isascii(int c);
|
||||
|
||||
|
||||
#endif //__DEFS__
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
#include <string/endian.h>
|
||||
|
||||
#if defined _LIBC && !defined _ISOMAC
|
||||
# if __FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||
# define BIG_ENDI 1
|
||||
# undef LITTLE_ENDI
|
||||
# define HIGH_HALF 0
|
||||
# define LOW_HALF 1
|
||||
# else
|
||||
# if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN
|
||||
# undef BIG_ENDI
|
||||
# define LITTLE_ENDI 1
|
||||
# define HIGH_HALF 1
|
||||
# define LOW_HALF 0
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#include <string/endian.h>
|
||||
|
||||
#if defined _LIBC && !defined _ISOMAC
|
||||
# if __FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||
# define BIG_ENDI 1
|
||||
# undef LITTLE_ENDI
|
||||
# define HIGH_HALF 0
|
||||
# define LOW_HALF 1
|
||||
# else
|
||||
# if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN
|
||||
# undef BIG_ENDI
|
||||
# define LITTLE_ENDI 1
|
||||
# define HIGH_HALF 1
|
||||
# define LOW_HALF 0
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
|
|
@ -1,43 +1,43 @@
|
|||
/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* ANSI Standard: 4.1.3 Errors <errno.h>
|
||||
*/
|
||||
|
||||
#ifndef _ERRNO_H
|
||||
|
||||
#define _ERRNO_H 1
|
||||
|
||||
/* Get the error number constants. */
|
||||
#include <errnos.h>
|
||||
|
||||
/* Declare the `errno' variable. */
|
||||
extern int __errno;
|
||||
|
||||
#define errno __errno
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* The full and simple forms of the name with which the program was
|
||||
invoked. These variables are set up automatically at startup based on
|
||||
the value of ARGV[0] (this works only if you use GNU ld). */
|
||||
extern char *program_invocation_name, *program_invocation_short_name;
|
||||
#endif
|
||||
|
||||
#endif /* errno.h */
|
||||
#define EINVAL -1
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* ANSI Standard: 4.1.3 Errors <errno.h>
|
||||
*/
|
||||
|
||||
#ifndef _ERRNO_H
|
||||
|
||||
#define _ERRNO_H 1
|
||||
|
||||
/* Get the error number constants. */
|
||||
#include <errnos.h>
|
||||
|
||||
/* Declare the `errno' variable. */
|
||||
extern int __errno;
|
||||
|
||||
#define errno __errno
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* The full and simple forms of the name with which the program was
|
||||
invoked. These variables are set up automatically at startup based on
|
||||
the value of ARGV[0] (this works only if you use GNU ld). */
|
||||
extern char *program_invocation_name, *program_invocation_short_name;
|
||||
#endif
|
||||
|
||||
#endif /* errno.h */
|
||||
#define EINVAL -1
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
#ifdef _ERRNO_H
|
||||
#endif /* <errno.h> included. */
|
||||
|
||||
#if !defined(__Emath_defined) && (defined(_ERRNO_H) || defined(__need_Emath))
|
||||
#define EDOM 1
|
||||
#define ERANGE 2
|
||||
#else /* Emath not defined and <errno.h> included or need Emath. */
|
||||
#define ENOSYS 3
|
||||
#endif /* <errno.h> included. */
|
||||
|
||||
#undef __need_Emath
|
||||
#ifndef __Emath_defined
|
||||
#define __Emath_defined 1
|
||||
#endif
|
||||
#ifdef _ERRNO_H
|
||||
#endif /* <errno.h> included. */
|
||||
|
||||
#if !defined(__Emath_defined) && (defined(_ERRNO_H) || defined(__need_Emath))
|
||||
#define EDOM 1
|
||||
#define ERANGE 2
|
||||
#else /* Emath not defined and <errno.h> included or need Emath. */
|
||||
#define ENOSYS 3
|
||||
#endif /* <errno.h> included. */
|
||||
|
||||
#undef __need_Emath
|
||||
#ifndef __Emath_defined
|
||||
#define __Emath_defined 1
|
||||
#endif
|
||||
|
|
|
@ -1,315 +1,315 @@
|
|||
/* Copyright (C) 1991-1993, 1995-2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _FEATURES_H
|
||||
#define _FEATURES_H 1
|
||||
|
||||
/* These are defined by the user (or the compiler)
|
||||
to specify the desired environment:
|
||||
|
||||
__STRICT_ANSI__ ISO Standard C.
|
||||
_ISOC99_SOURCE Extensions to ISO C89 from ISO C99.
|
||||
_POSIX_SOURCE IEEE Std 1003.1.
|
||||
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
|
||||
if >=199309L, add IEEE Std 1003.1b-1993;
|
||||
if >=199506L, add IEEE Std 1003.1c-1995
|
||||
_XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if
|
||||
Single Unix conformance is wanted, to 600 for the
|
||||
upcoming sixth revision.
|
||||
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
|
||||
_LARGEFILE_SOURCE Some more functions for correct standard I/O.
|
||||
_LARGEFILE64_SOURCE Additional functionality from LFS for large files.
|
||||
_FILE_OFFSET_BITS=N Select default filesystem interface.
|
||||
_BSD_SOURCE ISO C, POSIX, and 4.3BSD things.
|
||||
_SVID_SOURCE ISO C, POSIX, and SVID things.
|
||||
_GNU_SOURCE All of the above, plus GNU extensions.
|
||||
_REENTRANT Select additionally reentrant object.
|
||||
_THREAD_SAFE Same as _REENTRANT, often used by other systems.
|
||||
|
||||
The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
|
||||
If none of these are defined, the default is to have _SVID_SOURCE,
|
||||
_BSD_SOURCE, and _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to
|
||||
199506L. If more than one of these are defined, they accumulate.
|
||||
For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE
|
||||
together give you ISO C, 1003.1, and 1003.2, but nothing else.
|
||||
|
||||
These are defined by this file and are used by the
|
||||
header files to decide what to declare or define:
|
||||
|
||||
__USE_ISOC99 Define ISO C99 things.
|
||||
__USE_POSIX Define IEEE Std 1003.1 things.
|
||||
__USE_POSIX2 Define IEEE Std 1003.2 things.
|
||||
__USE_POSIX199309 Define IEEE Std 1003.1, and .1b things.
|
||||
__USE_POSIX199506 Define IEEE Std 1003.1, .1b, .1c and .1i things.
|
||||
__USE_XOPEN Define XPG things.
|
||||
__USE_XOPEN_EXTENDED Define X/Open Unix things.
|
||||
__USE_UNIX98 Define Single Unix V2 things.
|
||||
__USE_XOPEN2K Define XPG6 things.
|
||||
__USE_LARGEFILE Define correct standard I/O things.
|
||||
__USE_LARGEFILE64 Define LFS things with separate names.
|
||||
__USE_FILE_OFFSET64 Define 64bit interface as default.
|
||||
__USE_BSD Define 4.3BSD things.
|
||||
__USE_SVID Define SVID things.
|
||||
__USE_MISC Define things common to BSD and System V Unix.
|
||||
__USE_GNU Define GNU extensions.
|
||||
__USE_REENTRANT Define reentrant/thread-safe *_r functions.
|
||||
__FAVOR_BSD Favor 4.3BSD things in cases of conflict.
|
||||
|
||||
The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
|
||||
defined by this file unconditionally. `__GNU_LIBRARY__' is provided
|
||||
only for compatibility. All new code should use the other symbols
|
||||
to test for features.
|
||||
|
||||
All macros listed above as possibly being defined by this file are
|
||||
explicitly undefined if they are not explicitly defined.
|
||||
Feature-test macros that are not defined by the user or compiler
|
||||
but are implied by the other feature-test macros defined (or by the
|
||||
lack of any definitions) are defined by the file. */
|
||||
|
||||
|
||||
/* Undefine everything, so we get a clean slate. */
|
||||
#undef __USE_ISOC99
|
||||
#undef __USE_POSIX
|
||||
#undef __USE_POSIX2
|
||||
#undef __USE_POSIX199309
|
||||
#undef __USE_POSIX199506
|
||||
#undef __USE_XOPEN
|
||||
#undef __USE_XOPEN_EXTENDED
|
||||
#undef __USE_UNIX98
|
||||
#undef __USE_XOPEN2K
|
||||
#undef __USE_LARGEFILE
|
||||
#undef __USE_LARGEFILE64
|
||||
#undef __USE_FILE_OFFSET64
|
||||
#undef __USE_BSD
|
||||
#undef __USE_SVID
|
||||
#undef __USE_MISC
|
||||
#undef __USE_GNU
|
||||
#undef __USE_REENTRANT
|
||||
#undef __FAVOR_BSD
|
||||
#undef __KERNEL_STRICT_NAMES
|
||||
|
||||
/* Suppress kernel-name space pollution unless user expressedly asks
|
||||
for it. */
|
||||
#ifndef _LOOSE_KERNEL_NAMES
|
||||
# define __KERNEL_STRICT_NAMES
|
||||
#endif
|
||||
|
||||
/* Always use ISO C things. */
|
||||
#define __USE_ANSI 1
|
||||
|
||||
|
||||
/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */
|
||||
#if defined _BSD_SOURCE && \
|
||||
!(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \
|
||||
defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED || \
|
||||
defined _GNU_SOURCE || defined _SVID_SOURCE)
|
||||
# define __FAVOR_BSD 1
|
||||
#endif
|
||||
|
||||
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */
|
||||
#ifdef _GNU_SOURCE
|
||||
# undef _ISOC99_SOURCE
|
||||
# define _ISOC99_SOURCE 1
|
||||
# undef _POSIX_SOURCE
|
||||
# define _POSIX_SOURCE 1
|
||||
# undef _POSIX_C_SOURCE
|
||||
# define _POSIX_C_SOURCE 199506L
|
||||
# undef _XOPEN_SOURCE
|
||||
# define _XOPEN_SOURCE 600
|
||||
# undef _XOPEN_SOURCE_EXTENDED
|
||||
# define _XOPEN_SOURCE_EXTENDED 1
|
||||
# undef _LARGEFILE64_SOURCE
|
||||
# define _LARGEFILE64_SOURCE 1
|
||||
# undef _BSD_SOURCE
|
||||
# define _BSD_SOURCE 1
|
||||
# undef _SVID_SOURCE
|
||||
# define _SVID_SOURCE 1
|
||||
#endif
|
||||
|
||||
/* If nothing (other than _GNU_SOURCE) is defined,
|
||||
define _BSD_SOURCE and _SVID_SOURCE. */
|
||||
#if (!defined __STRICT_ANSI__ && !defined _ISOC99_SOURCE && \
|
||||
!defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \
|
||||
!defined _XOPEN_SOURCE && !defined _XOPEN_SOURCE_EXTENDED && \
|
||||
!defined _BSD_SOURCE && !defined _SVID_SOURCE)
|
||||
# define _BSD_SOURCE 1
|
||||
# define _SVID_SOURCE 1
|
||||
#endif
|
||||
|
||||
/* This is to enable the ISO C99 extension. Also recognize the old macro
|
||||
which was used prior to the standard acceptance. This macro will
|
||||
eventually go away and the features enabled by default once the ISO C99
|
||||
standard is widely adopted. */
|
||||
#if (defined _ISOC99_SOURCE || defined _ISOC9X_SOURCE \
|
||||
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
|
||||
# define __USE_ISOC99 1
|
||||
#endif
|
||||
|
||||
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
|
||||
(and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */
|
||||
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
|
||||
!defined _POSIX_C_SOURCE)
|
||||
# define _POSIX_SOURCE 1
|
||||
# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
|
||||
# define _POSIX_C_SOURCE 2
|
||||
# else
|
||||
# define _POSIX_C_SOURCE 199506L
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined _POSIX_SOURCE || _POSIX_C_SOURCE >= 1 || defined _XOPEN_SOURCE
|
||||
# define __USE_POSIX 1
|
||||
#endif
|
||||
|
||||
#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE
|
||||
# define __USE_POSIX2 1
|
||||
#endif
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L
|
||||
# define __USE_POSIX199309 1
|
||||
#endif
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199506L
|
||||
# define __USE_POSIX199506 1
|
||||
#endif
|
||||
|
||||
#ifdef _XOPEN_SOURCE
|
||||
# define __USE_XOPEN 1
|
||||
# if (_XOPEN_SOURCE - 0) >= 500
|
||||
# define __USE_XOPEN_EXTENDED 1
|
||||
# define __USE_UNIX98 1
|
||||
# undef _LARGEFILE_SOURCE
|
||||
# define _LARGEFILE_SOURCE 1
|
||||
# if (_XOPEN_SOURCE - 0) >= 600
|
||||
# define __USE_XOPEN2K 1
|
||||
# undef __USE_ISOC99
|
||||
# define __USE_ISOC99 1
|
||||
# endif
|
||||
# else
|
||||
# ifdef _XOPEN_SOURCE_EXTENDED
|
||||
# define __USE_XOPEN_EXTENDED 1
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _LARGEFILE_SOURCE
|
||||
# define __USE_LARGEFILE 1
|
||||
#endif
|
||||
|
||||
#ifdef _LARGEFILE64_SOURCE
|
||||
# define __USE_LARGEFILE64 1
|
||||
#endif
|
||||
|
||||
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
|
||||
# define __USE_FILE_OFFSET64 1
|
||||
#endif
|
||||
|
||||
#if defined _BSD_SOURCE || defined _SVID_SOURCE
|
||||
# define __USE_MISC 1
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SOURCE
|
||||
# define __USE_BSD 1
|
||||
#endif
|
||||
|
||||
#ifdef _SVID_SOURCE
|
||||
# define __USE_SVID 1
|
||||
#endif
|
||||
|
||||
#ifdef _GNU_SOURCE
|
||||
# define __USE_GNU 1
|
||||
#endif
|
||||
|
||||
#if defined _REENTRANT || defined _THREAD_SAFE
|
||||
# define __USE_REENTRANT 1
|
||||
#endif
|
||||
|
||||
/* We do support the IEC 559 math functionality, real and complex. */
|
||||
#define __STDC_IEC_559__ 1
|
||||
#define __STDC_IEC_559_COMPLEX__ 1
|
||||
|
||||
/* wchar_t uses ISO 10646-1 (2nd ed., published 2000-09-15) / Unicode 3.1. */
|
||||
#define __STDC_ISO_10646__ 200009L
|
||||
|
||||
/* This macro indicates that the installed library is the GNU C Library.
|
||||
For historic reasons the value now is 6 and this will stay from now
|
||||
on. The use of this variable is deprecated. Use __GLIBC__ and
|
||||
__GLIBC_MINOR__ now (see below) when you want to test for a specific
|
||||
GNU C library version and use the values in <gnu/lib-names.h> to get
|
||||
the sonames of the shared libraries. */
|
||||
#undef __GNU_LIBRARY__
|
||||
#define __GNU_LIBRARY__ 6
|
||||
|
||||
/* Major and minor version number of the GNU C library package. Use
|
||||
these macros to test for features in specific releases. */
|
||||
#define __GLIBC__ 2
|
||||
#define __GLIBC_MINOR__ 2
|
||||
|
||||
/* Convenience macros to test the versions of glibc and gcc.
|
||||
Use them like this:
|
||||
#if __GNUC_PREREQ (2,8)
|
||||
... code requiring gcc 2.8 or later ...
|
||||
#endif
|
||||
Note - they won't work for gcc1 or glibc1, since the _MINOR macros
|
||||
were not defined then. */
|
||||
#if defined __GNUC__ && defined __GNUC_MINOR__
|
||||
# define __GNUC_PREREQ(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
#else
|
||||
# define __GNUC_PREREQ(maj, min) 0
|
||||
#endif
|
||||
|
||||
#define __GLIBC_PREREQ(maj, min) \
|
||||
((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
|
||||
|
||||
/* This is here only because every header file already includes this one. */
|
||||
#ifndef __ASSEMBLER__
|
||||
# ifndef _SYS_CDEFS_H
|
||||
# include <sys/cdefs.h>
|
||||
# endif
|
||||
|
||||
/* If we don't have __REDIRECT, prototypes will be missing if
|
||||
__USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */
|
||||
# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT
|
||||
# define __USE_LARGEFILE 1
|
||||
# define __USE_LARGEFILE64 1
|
||||
# endif
|
||||
|
||||
#endif /* !ASSEMBLER */
|
||||
|
||||
/* Decide whether we can define 'extern inline' functions in headers. */
|
||||
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
|
||||
&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__
|
||||
# define __USE_EXTERN_INLINES 1
|
||||
#endif
|
||||
|
||||
/* This is here only because every header file already includes this one. */
|
||||
#ifndef _LIBC
|
||||
/* Get the definitions of all the appropriate `__stub_FUNCTION' symbols.
|
||||
<gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub
|
||||
which will always return failure (and set errno to ENOSYS).
|
||||
|
||||
We avoid including <gnu/stubs.h> when compiling the C library itself to
|
||||
avoid a dependency loop. stubs.h depends on every object file. If
|
||||
this #include were done for the library source code, then every object
|
||||
file would depend on stubs.h. */
|
||||
|
||||
//# include <gnu/stubs.h>
|
||||
#endif
|
||||
|
||||
#endif /* features.h */
|
||||
/* Copyright (C) 1991-1993, 1995-2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _FEATURES_H
|
||||
#define _FEATURES_H 1
|
||||
|
||||
/* These are defined by the user (or the compiler)
|
||||
to specify the desired environment:
|
||||
|
||||
__STRICT_ANSI__ ISO Standard C.
|
||||
_ISOC99_SOURCE Extensions to ISO C89 from ISO C99.
|
||||
_POSIX_SOURCE IEEE Std 1003.1.
|
||||
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
|
||||
if >=199309L, add IEEE Std 1003.1b-1993;
|
||||
if >=199506L, add IEEE Std 1003.1c-1995
|
||||
_XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if
|
||||
Single Unix conformance is wanted, to 600 for the
|
||||
upcoming sixth revision.
|
||||
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
|
||||
_LARGEFILE_SOURCE Some more functions for correct standard I/O.
|
||||
_LARGEFILE64_SOURCE Additional functionality from LFS for large files.
|
||||
_FILE_OFFSET_BITS=N Select default filesystem interface.
|
||||
_BSD_SOURCE ISO C, POSIX, and 4.3BSD things.
|
||||
_SVID_SOURCE ISO C, POSIX, and SVID things.
|
||||
_GNU_SOURCE All of the above, plus GNU extensions.
|
||||
_REENTRANT Select additionally reentrant object.
|
||||
_THREAD_SAFE Same as _REENTRANT, often used by other systems.
|
||||
|
||||
The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
|
||||
If none of these are defined, the default is to have _SVID_SOURCE,
|
||||
_BSD_SOURCE, and _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to
|
||||
199506L. If more than one of these are defined, they accumulate.
|
||||
For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE
|
||||
together give you ISO C, 1003.1, and 1003.2, but nothing else.
|
||||
|
||||
These are defined by this file and are used by the
|
||||
header files to decide what to declare or define:
|
||||
|
||||
__USE_ISOC99 Define ISO C99 things.
|
||||
__USE_POSIX Define IEEE Std 1003.1 things.
|
||||
__USE_POSIX2 Define IEEE Std 1003.2 things.
|
||||
__USE_POSIX199309 Define IEEE Std 1003.1, and .1b things.
|
||||
__USE_POSIX199506 Define IEEE Std 1003.1, .1b, .1c and .1i things.
|
||||
__USE_XOPEN Define XPG things.
|
||||
__USE_XOPEN_EXTENDED Define X/Open Unix things.
|
||||
__USE_UNIX98 Define Single Unix V2 things.
|
||||
__USE_XOPEN2K Define XPG6 things.
|
||||
__USE_LARGEFILE Define correct standard I/O things.
|
||||
__USE_LARGEFILE64 Define LFS things with separate names.
|
||||
__USE_FILE_OFFSET64 Define 64bit interface as default.
|
||||
__USE_BSD Define 4.3BSD things.
|
||||
__USE_SVID Define SVID things.
|
||||
__USE_MISC Define things common to BSD and System V Unix.
|
||||
__USE_GNU Define GNU extensions.
|
||||
__USE_REENTRANT Define reentrant/thread-safe *_r functions.
|
||||
__FAVOR_BSD Favor 4.3BSD things in cases of conflict.
|
||||
|
||||
The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
|
||||
defined by this file unconditionally. `__GNU_LIBRARY__' is provided
|
||||
only for compatibility. All new code should use the other symbols
|
||||
to test for features.
|
||||
|
||||
All macros listed above as possibly being defined by this file are
|
||||
explicitly undefined if they are not explicitly defined.
|
||||
Feature-test macros that are not defined by the user or compiler
|
||||
but are implied by the other feature-test macros defined (or by the
|
||||
lack of any definitions) are defined by the file. */
|
||||
|
||||
|
||||
/* Undefine everything, so we get a clean slate. */
|
||||
#undef __USE_ISOC99
|
||||
#undef __USE_POSIX
|
||||
#undef __USE_POSIX2
|
||||
#undef __USE_POSIX199309
|
||||
#undef __USE_POSIX199506
|
||||
#undef __USE_XOPEN
|
||||
#undef __USE_XOPEN_EXTENDED
|
||||
#undef __USE_UNIX98
|
||||
#undef __USE_XOPEN2K
|
||||
#undef __USE_LARGEFILE
|
||||
#undef __USE_LARGEFILE64
|
||||
#undef __USE_FILE_OFFSET64
|
||||
#undef __USE_BSD
|
||||
#undef __USE_SVID
|
||||
#undef __USE_MISC
|
||||
#undef __USE_GNU
|
||||
#undef __USE_REENTRANT
|
||||
#undef __FAVOR_BSD
|
||||
#undef __KERNEL_STRICT_NAMES
|
||||
|
||||
/* Suppress kernel-name space pollution unless user expressedly asks
|
||||
for it. */
|
||||
#ifndef _LOOSE_KERNEL_NAMES
|
||||
# define __KERNEL_STRICT_NAMES
|
||||
#endif
|
||||
|
||||
/* Always use ISO C things. */
|
||||
#define __USE_ANSI 1
|
||||
|
||||
|
||||
/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */
|
||||
#if defined _BSD_SOURCE && \
|
||||
!(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \
|
||||
defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED || \
|
||||
defined _GNU_SOURCE || defined _SVID_SOURCE)
|
||||
# define __FAVOR_BSD 1
|
||||
#endif
|
||||
|
||||
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */
|
||||
#ifdef _GNU_SOURCE
|
||||
# undef _ISOC99_SOURCE
|
||||
# define _ISOC99_SOURCE 1
|
||||
# undef _POSIX_SOURCE
|
||||
# define _POSIX_SOURCE 1
|
||||
# undef _POSIX_C_SOURCE
|
||||
# define _POSIX_C_SOURCE 199506L
|
||||
# undef _XOPEN_SOURCE
|
||||
# define _XOPEN_SOURCE 600
|
||||
# undef _XOPEN_SOURCE_EXTENDED
|
||||
# define _XOPEN_SOURCE_EXTENDED 1
|
||||
# undef _LARGEFILE64_SOURCE
|
||||
# define _LARGEFILE64_SOURCE 1
|
||||
# undef _BSD_SOURCE
|
||||
# define _BSD_SOURCE 1
|
||||
# undef _SVID_SOURCE
|
||||
# define _SVID_SOURCE 1
|
||||
#endif
|
||||
|
||||
/* If nothing (other than _GNU_SOURCE) is defined,
|
||||
define _BSD_SOURCE and _SVID_SOURCE. */
|
||||
#if (!defined __STRICT_ANSI__ && !defined _ISOC99_SOURCE && \
|
||||
!defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \
|
||||
!defined _XOPEN_SOURCE && !defined _XOPEN_SOURCE_EXTENDED && \
|
||||
!defined _BSD_SOURCE && !defined _SVID_SOURCE)
|
||||
# define _BSD_SOURCE 1
|
||||
# define _SVID_SOURCE 1
|
||||
#endif
|
||||
|
||||
/* This is to enable the ISO C99 extension. Also recognize the old macro
|
||||
which was used prior to the standard acceptance. This macro will
|
||||
eventually go away and the features enabled by default once the ISO C99
|
||||
standard is widely adopted. */
|
||||
#if (defined _ISOC99_SOURCE || defined _ISOC9X_SOURCE \
|
||||
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
|
||||
# define __USE_ISOC99 1
|
||||
#endif
|
||||
|
||||
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
|
||||
(and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */
|
||||
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
|
||||
!defined _POSIX_C_SOURCE)
|
||||
# define _POSIX_SOURCE 1
|
||||
# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
|
||||
# define _POSIX_C_SOURCE 2
|
||||
# else
|
||||
# define _POSIX_C_SOURCE 199506L
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined _POSIX_SOURCE || _POSIX_C_SOURCE >= 1 || defined _XOPEN_SOURCE
|
||||
# define __USE_POSIX 1
|
||||
#endif
|
||||
|
||||
#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE
|
||||
# define __USE_POSIX2 1
|
||||
#endif
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L
|
||||
# define __USE_POSIX199309 1
|
||||
#endif
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199506L
|
||||
# define __USE_POSIX199506 1
|
||||
#endif
|
||||
|
||||
#ifdef _XOPEN_SOURCE
|
||||
# define __USE_XOPEN 1
|
||||
# if (_XOPEN_SOURCE - 0) >= 500
|
||||
# define __USE_XOPEN_EXTENDED 1
|
||||
# define __USE_UNIX98 1
|
||||
# undef _LARGEFILE_SOURCE
|
||||
# define _LARGEFILE_SOURCE 1
|
||||
# if (_XOPEN_SOURCE - 0) >= 600
|
||||
# define __USE_XOPEN2K 1
|
||||
# undef __USE_ISOC99
|
||||
# define __USE_ISOC99 1
|
||||
# endif
|
||||
# else
|
||||
# ifdef _XOPEN_SOURCE_EXTENDED
|
||||
# define __USE_XOPEN_EXTENDED 1
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _LARGEFILE_SOURCE
|
||||
# define __USE_LARGEFILE 1
|
||||
#endif
|
||||
|
||||
#ifdef _LARGEFILE64_SOURCE
|
||||
# define __USE_LARGEFILE64 1
|
||||
#endif
|
||||
|
||||
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
|
||||
# define __USE_FILE_OFFSET64 1
|
||||
#endif
|
||||
|
||||
#if defined _BSD_SOURCE || defined _SVID_SOURCE
|
||||
# define __USE_MISC 1
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SOURCE
|
||||
# define __USE_BSD 1
|
||||
#endif
|
||||
|
||||
#ifdef _SVID_SOURCE
|
||||
# define __USE_SVID 1
|
||||
#endif
|
||||
|
||||
#ifdef _GNU_SOURCE
|
||||
# define __USE_GNU 1
|
||||
#endif
|
||||
|
||||
#if defined _REENTRANT || defined _THREAD_SAFE
|
||||
# define __USE_REENTRANT 1
|
||||
#endif
|
||||
|
||||
/* We do support the IEC 559 math functionality, real and complex. */
|
||||
#define __STDC_IEC_559__ 1
|
||||
#define __STDC_IEC_559_COMPLEX__ 1
|
||||
|
||||
/* wchar_t uses ISO 10646-1 (2nd ed., published 2000-09-15) / Unicode 3.1. */
|
||||
#define __STDC_ISO_10646__ 200009L
|
||||
|
||||
/* This macro indicates that the installed library is the GNU C Library.
|
||||
For historic reasons the value now is 6 and this will stay from now
|
||||
on. The use of this variable is deprecated. Use __GLIBC__ and
|
||||
__GLIBC_MINOR__ now (see below) when you want to test for a specific
|
||||
GNU C library version and use the values in <gnu/lib-names.h> to get
|
||||
the sonames of the shared libraries. */
|
||||
#undef __GNU_LIBRARY__
|
||||
#define __GNU_LIBRARY__ 6
|
||||
|
||||
/* Major and minor version number of the GNU C library package. Use
|
||||
these macros to test for features in specific releases. */
|
||||
#define __GLIBC__ 2
|
||||
#define __GLIBC_MINOR__ 2
|
||||
|
||||
/* Convenience macros to test the versions of glibc and gcc.
|
||||
Use them like this:
|
||||
#if __GNUC_PREREQ (2,8)
|
||||
... code requiring gcc 2.8 or later ...
|
||||
#endif
|
||||
Note - they won't work for gcc1 or glibc1, since the _MINOR macros
|
||||
were not defined then. */
|
||||
#if defined __GNUC__ && defined __GNUC_MINOR__
|
||||
# define __GNUC_PREREQ(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
#else
|
||||
# define __GNUC_PREREQ(maj, min) 0
|
||||
#endif
|
||||
|
||||
#define __GLIBC_PREREQ(maj, min) \
|
||||
((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
|
||||
|
||||
/* This is here only because every header file already includes this one. */
|
||||
#ifndef __ASSEMBLER__
|
||||
# ifndef _SYS_CDEFS_H
|
||||
# include <sys/cdefs.h>
|
||||
# endif
|
||||
|
||||
/* If we don't have __REDIRECT, prototypes will be missing if
|
||||
__USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */
|
||||
# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT
|
||||
# define __USE_LARGEFILE 1
|
||||
# define __USE_LARGEFILE64 1
|
||||
# endif
|
||||
|
||||
#endif /* !ASSEMBLER */
|
||||
|
||||
/* Decide whether we can define 'extern inline' functions in headers. */
|
||||
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
|
||||
&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__
|
||||
# define __USE_EXTERN_INLINES 1
|
||||
#endif
|
||||
|
||||
/* This is here only because every header file already includes this one. */
|
||||
#ifndef _LIBC
|
||||
/* Get the definitions of all the appropriate `__stub_FUNCTION' symbols.
|
||||
<gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub
|
||||
which will always return failure (and set errno to ENOSYS).
|
||||
|
||||
We avoid including <gnu/stubs.h> when compiling the C library itself to
|
||||
avoid a dependency loop. stubs.h depends on every object file. If
|
||||
this #include were done for the library source code, then every object
|
||||
file would depend on stubs.h. */
|
||||
|
||||
//# include <gnu/stubs.h>
|
||||
#endif
|
||||
|
||||
#endif /* features.h */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#define __USE_MISC 1
|
||||
#define __USE_GNU 1
|
||||
#define __P(arg) arg
|
||||
#define __ptr_t void *
|
||||
#define __USE_MISC 1
|
||||
#define __USE_GNU 1
|
||||
#define __P(arg) arg
|
||||
#define __ptr_t void *
|
||||
|
|
|
@ -1,306 +1,306 @@
|
|||
#ifndef _FLOAT_
|
||||
#define _FLOAT_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP
|
||||
#endif
|
||||
|
||||
extern u8 _Nan[8];
|
||||
extern u8 _Inf[8];
|
||||
|
||||
//#define NAN ((unsigned __int64)0xfff8000000000000)
|
||||
|
||||
#define NAN *((double*)(&_Nan[0])) // instead of using __int64, store a NAN somwhere in memory (misc_vars.c)
|
||||
#define INF *((double*)(&_Inf[0])) // Constant INF
|
||||
|
||||
#define DBL_DIG 15 // # of decimal digits of precision
|
||||
#define DBL_EPSILON 2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0
|
||||
#define DBL_MANT_DIG 53 // # of bits in mantissa
|
||||
#define DBL_MAX 1.7976931348623158e+308 // max value
|
||||
#define DBL_MAX_10_EXP 308 // max decimal exponent
|
||||
#define DBL_MAX_EXP 1024 // max binary exponent
|
||||
#define DBL_MIN 2.2250738585072014e-308 // min positive value
|
||||
#define DBL_MIN_10_EXP (-307) // min decimal exponent
|
||||
#define DBL_MIN_EXP (-1021) // min binary exponent
|
||||
#define _DBL_RADIX 2 // exponent radix
|
||||
#define _DBL_ROUNDS 1 // addition rounding: near
|
||||
|
||||
#define FLT_DIG 6 // # of decimal digits of precision
|
||||
#define FLT_EPSILON 1.192092896e-07F // smallest such that 1.0+FLT_EPSILON != 1.0
|
||||
#define FLT_GUARD 0
|
||||
#define FLT_MANT_DIG 24 // # of bits in mantissa
|
||||
#define FLT_MAX 3.402823466e+38F // max value
|
||||
#define FLT_MAX_10_EXP 38 // max decimal exponent
|
||||
#define FLT_MAX_EXP 128 // max binary exponent
|
||||
#define FLT_MIN 1.175494351e-38F // min positive value
|
||||
#define FLT_MIN_10_EXP (-37) // min decimal exponent
|
||||
#define FLT_MIN_EXP (-125) // min binary exponent
|
||||
#define FLT_NORMALIZE 0
|
||||
#define FLT_RADIX 2 // exponent radix
|
||||
#define FLT_ROUNDS 1 // addition rounding: near
|
||||
|
||||
#ifndef _M_M68K
|
||||
#define LDBL_DIG DBL_DIG // # of decimal digits of precision
|
||||
#define LDBL_EPSILON DBL_EPSILON // smallest such that 1.0+LDBL_EPSILON != 1.0
|
||||
#define LDBL_MANT_DIG DBL_MANT_DIG // # of bits in mantissa
|
||||
#define LDBL_MAX DBL_MAX // max value
|
||||
#define LDBL_MAX_10_EXP DBL_MAX_10_EXP // max decimal exponent
|
||||
#define LDBL_MAX_EXP DBL_MAX_EXP // max binary exponent
|
||||
#define LDBL_MIN DBL_MIN // min positive value
|
||||
#define LDBL_MIN_10_EXP DBL_MIN_10_EXP // min decimal exponent
|
||||
#define LDBL_MIN_EXP DBL_MIN_EXP // min binary exponent
|
||||
#define _LDBL_RADIX DBL_RADIX // exponent radix
|
||||
#define _LDBL_ROUNDS DBL_ROUNDS // addition rounding: near
|
||||
#else
|
||||
#define LDBL_DIG 18 // # of decimal digits of precision
|
||||
#define LDBL_EPSILON 1.08420217248550443412e-019L // smallest such that 1.0+LDBL_EPSILON != 1.0
|
||||
#define LDBL_MANT_DIG 64 // # of bits in mantissa
|
||||
#define LDBL_MAX 1.189731495357231765e+4932L // max value
|
||||
#define LDBL_MAX_10_EXP 4932 // max decimal exponent
|
||||
#define LDBL_MAX_EXP 16384 // max binary exponent
|
||||
#define LDBL_MIN 3.3621031431120935063e-4932L // min positive value
|
||||
#define LDBL_MIN_10_EXP (-4931) // min decimal exponent
|
||||
#define LDBL_MIN_EXP (-16381) // min binary exponent
|
||||
#define _LDBL_RADIX 2 // exponent radix
|
||||
#define _LDBL_ROUNDS 1 // addition rounding: near
|
||||
#endif
|
||||
|
||||
// Function prototypes
|
||||
|
||||
_CRTIMP unsigned int __cdecl _clearfp(void);
|
||||
_CRTIMP unsigned int __cdecl _controlfp(unsigned int,unsigned int);
|
||||
_CRTIMP unsigned int __cdecl _statusfp(void);
|
||||
_CRTIMP void __cdecl _fpreset(void);
|
||||
|
||||
#ifndef _MAC
|
||||
#define _clear87 _clearfp
|
||||
#define _status87 _statusfp
|
||||
#endif // _MAC
|
||||
|
||||
//
|
||||
// Abstract User Control Word Mask and bit definitions
|
||||
//
|
||||
|
||||
#ifndef _MAC
|
||||
#define _MCW_EM 0x0008001f // interrupt Exception Masks
|
||||
#else
|
||||
#define _MCW_EM 0x0000001f // interrupt Exception Masks
|
||||
#endif
|
||||
#define _EM_INEXACT 0x00000001 // inexact (precision)
|
||||
#define _EM_UNDERFLOW 0x00000002 // underflow
|
||||
#define _EM_OVERFLOW 0x00000004 // overflow
|
||||
#define _EM_ZERODIVIDE 0x00000008 // zero divide
|
||||
#define _EM_INVALID 0x00000010 // invalid
|
||||
|
||||
#define _MCW_RC 0x00000300 // Rounding Control
|
||||
#define _RC_NEAR 0x00000000 // near
|
||||
#define _RC_DOWN 0x00000100 // down
|
||||
#define _RC_UP 0x00000200 // up
|
||||
#define _RC_CHOP 0x00000300 // chop
|
||||
|
||||
//
|
||||
// Abstract User Status Word bit definitions
|
||||
|
||||
|
||||
#define _SW_INEXACT 0x00000001 // inexact (precision)
|
||||
#define _SW_UNDERFLOW 0x00000002 // underflow
|
||||
#define _SW_OVERFLOW 0x00000004 // overflow
|
||||
#define _SW_ZERODIVIDE 0x00000008 // zero divide
|
||||
#define _SW_INVALID 0x00000010 // invalid
|
||||
|
||||
|
||||
//
|
||||
// i386 specific definitions
|
||||
|
||||
#define _MCW_PC 0x00030000 // Precision Control
|
||||
#ifdef _M_MPPC
|
||||
//
|
||||
* PowerMac specific definitions(no precision control)
|
||||
|
||||
#define _PC_64 0x00000000 // 64 bits
|
||||
#define _PC_53 0x00000000 // 53 bits
|
||||
#define _PC_24 0x00000000 // 24 bits
|
||||
#else
|
||||
#define _PC_64 0x00000000 // 64 bits
|
||||
#define _PC_53 0x00010000 // 53 bits
|
||||
#define _PC_24 0x00020000 // 24 bits
|
||||
#endif
|
||||
|
||||
#define _MCW_IC 0x00040000 // Infinity Control
|
||||
#define _IC_AFFINE 0x00040000 // affine
|
||||
#define _IC_PROJECTIVE 0x00000000 // projective
|
||||
|
||||
#define _EM_DENORMAL 0x00080000 // denormal exception mask (_control87 only)
|
||||
|
||||
#define _SW_DENORMAL 0x00080000 // denormal status bit
|
||||
|
||||
|
||||
_CRTIMP unsigned int __cdecl _control87(unsigned int,unsigned int);
|
||||
|
||||
|
||||
//
|
||||
// RISC specific definitions
|
||||
|
||||
|
||||
#define _MCW_DN 0x03000000 // Denormal Control
|
||||
#define _DN_SAVE 0x00000000 // save denormal results and operands
|
||||
#define _DN_FLUSH 0x01000000 // flush denormal results and operands to zero
|
||||
#define _DN_FLUSH_OPERANDS_SAVE_RESULTS 0x02000000 // flush operands to zero and save results
|
||||
#define _DN_SAVE_OPERANDS_FLUSH_RESULTS 0x03000000 // save operands and flush results to zero
|
||||
|
||||
|
||||
// initial Control Word value
|
||||
|
||||
#if defined(_M_IX86)
|
||||
|
||||
#define _CW_DEFAULT ( _RC_NEAR + _PC_53 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
|
||||
|
||||
#elif defined(_MAC)
|
||||
|
||||
#define _CW_DEFAULT ( _RC_NEAR + _PC_64 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT )
|
||||
|
||||
#elif defined(_M_MRX000) || defined (_M_ALPHA) || defined(_M_PPC)
|
||||
|
||||
#define _CW_DEFAULT ( _RC_NEAR + _DN_FLUSH + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT )
|
||||
|
||||
#endif
|
||||
|
||||
// Global variable holding floating point error code
|
||||
|
||||
#if defined(_MT) || defined(_DLL)
|
||||
_CRTIMP extern int * __cdecl __fpecode(void);
|
||||
#define _fpecode (*__fpecode())
|
||||
#else // ndef _MT && ndef _DLL
|
||||
extern int _fpecode;
|
||||
#endif // _MT || _DLL
|
||||
|
||||
// invalid subconditions (_SW_INVALID also set)
|
||||
|
||||
#define _SW_UNEMULATED 0x0040 // unemulated instruction
|
||||
#define _SW_SQRTNEG 0x0080 // square root of a neg number
|
||||
#define _SW_STACKOVERFLOW 0x0200 // FP stack overflow
|
||||
#define _SW_STACKUNDERFLOW 0x0400 // FP stack underflow
|
||||
|
||||
// Floating point error signals and return codes
|
||||
|
||||
#define _FPE_INVALID 0x81
|
||||
#define _FPE_DENORMAL 0x82
|
||||
#define _FPE_ZERODIVIDE 0x83
|
||||
#define _FPE_OVERFLOW 0x84
|
||||
#define _FPE_UNDERFLOW 0x85
|
||||
#define _FPE_INEXACT 0x86
|
||||
|
||||
#define _FPE_UNEMULATED 0x87
|
||||
#define _FPE_SQRTNEG 0x88
|
||||
#define _FPE_STACKOVERFLOW 0x8a
|
||||
#define _FPE_STACKUNDERFLOW 0x8b
|
||||
|
||||
#define _FPE_EXPLICITGEN 0x8c // raise( SIGFPE );
|
||||
|
||||
|
||||
// IEEE recommended functions
|
||||
|
||||
_CRTIMP double __cdecl _copysign (double, double);
|
||||
_CRTIMP double __cdecl _chgsign (double);
|
||||
_CRTIMP double __cdecl _scalb(double, long);
|
||||
_CRTIMP double __cdecl _logb(double);
|
||||
_CRTIMP double __cdecl _nextafter(double, double);
|
||||
_CRTIMP int __cdecl _finite(double);
|
||||
_CRTIMP int __cdecl _isnan(double);
|
||||
_CRTIMP int __cdecl _fpclass(double);
|
||||
|
||||
#define _FPCLASS_SNAN 0x0001 // signaling NaN
|
||||
#define _FPCLASS_QNAN 0x0002 // quiet NaN
|
||||
#define _FPCLASS_NINF 0x0004 // negative infinity
|
||||
#define _FPCLASS_NN 0x0008 // negative normal
|
||||
#define _FPCLASS_ND 0x0010 // negative denormal
|
||||
#define _FPCLASS_NZ 0x0020 // -0
|
||||
#define _FPCLASS_PZ 0x0040 // +0
|
||||
#define _FPCLASS_PD 0x0080 // positive denormal
|
||||
#define _FPCLASS_PN 0x0100 // positive normal
|
||||
#define _FPCLASS_PINF 0x0200 // positive infinity
|
||||
|
||||
|
||||
#if !__STDC__
|
||||
|
||||
// Non-ANSI names for compatibility
|
||||
|
||||
#ifndef _MAC
|
||||
#define clear87 _clear87
|
||||
#define status87 _status87
|
||||
#define control87 _control87
|
||||
#endif // _MAC
|
||||
|
||||
_CRTIMP void __cdecl fpreset(void);
|
||||
|
||||
#define DBL_RADIX _DBL_RADIX
|
||||
#define DBL_ROUNDS _DBL_ROUNDS
|
||||
|
||||
#define LDBL_RADIX _LDBL_RADIX
|
||||
#define LDBL_ROUNDS _LDBL_ROUNDS
|
||||
|
||||
#define MCW_EM _MCW_EM
|
||||
#define EM_INVALID _EM_INVALID
|
||||
#define EM_DENORMAL _EM_DENORMAL
|
||||
#define EM_ZERODIVIDE _EM_ZERODIVIDE
|
||||
#define EM_OVERFLOW _EM_OVERFLOW
|
||||
#define EM_UNDERFLOW _EM_UNDERFLOW
|
||||
#define EM_INEXACT _EM_INEXACT
|
||||
|
||||
#define MCW_IC _MCW_IC
|
||||
#define IC_AFFINE _IC_AFFINE
|
||||
#define IC_PROJECTIVE _IC_PROJECTIVE
|
||||
|
||||
#define MCW_RC _MCW_RC
|
||||
#define RC_CHOP _RC_CHOP
|
||||
#define RC_UP _RC_UP
|
||||
#define RC_DOWN _RC_DOWN
|
||||
#define RC_NEAR _RC_NEAR
|
||||
|
||||
#define MCW_PC _MCW_PC
|
||||
#define PC_24 _PC_24
|
||||
#define PC_53 _PC_53
|
||||
#define PC_64 _PC_64
|
||||
|
||||
#define CW_DEFAULT _CW_DEFAULT
|
||||
|
||||
#define SW_INVALID _SW_INVALID
|
||||
#define SW_DENORMAL _SW_DENORMAL
|
||||
#define SW_ZERODIVIDE _SW_ZERODIVIDE
|
||||
#define SW_OVERFLOW _SW_OVERFLOW
|
||||
#define SW_UNDERFLOW _SW_UNDERFLOW
|
||||
#define SW_INEXACT _SW_INEXACT
|
||||
|
||||
#define SW_UNEMULATED _SW_UNEMULATED
|
||||
#define SW_SQRTNEG _SW_SQRTNEG
|
||||
#define SW_STACKOVERFLOW _SW_STACKOVERFLOW
|
||||
#define SW_STACKUNDERFLOW _SW_STACKUNDERFLOW
|
||||
|
||||
#define FPE_INVALID _FPE_INVALID
|
||||
#define FPE_DENORMAL _FPE_DENORMAL
|
||||
#define FPE_ZERODIVIDE _FPE_ZERODIVIDE
|
||||
#define FPE_OVERFLOW _FPE_OVERFLOW
|
||||
#define FPE_UNDERFLOW _FPE_UNDERFLOW
|
||||
#define FPE_INEXACT _FPE_INEXACT
|
||||
|
||||
#define FPE_UNEMULATED _FPE_UNEMULATED
|
||||
#define FPE_SQRTNEG _FPE_SQRTNEG
|
||||
#define FPE_STACKOVERFLOW _FPE_STACKOVERFLOW
|
||||
#define FPE_STACKUNDERFLOW _FPE_STACKUNDERFLOW
|
||||
|
||||
#define FPE_EXPLICITGEN _FPE_EXPLICITGEN
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#ifndef _FLOAT_
|
||||
#define _FLOAT_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP
|
||||
#endif
|
||||
|
||||
extern u8 _Nan[8];
|
||||
extern u8 _Inf[8];
|
||||
|
||||
//#define NAN ((unsigned __int64)0xfff8000000000000)
|
||||
|
||||
#define NAN *((double*)(&_Nan[0])) // instead of using __int64, store a NAN somwhere in memory (misc_vars.c)
|
||||
#define INF *((double*)(&_Inf[0])) // Constant INF
|
||||
|
||||
#define DBL_DIG 15 // # of decimal digits of precision
|
||||
#define DBL_EPSILON 2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0
|
||||
#define DBL_MANT_DIG 53 // # of bits in mantissa
|
||||
#define DBL_MAX 1.7976931348623158e+308 // max value
|
||||
#define DBL_MAX_10_EXP 308 // max decimal exponent
|
||||
#define DBL_MAX_EXP 1024 // max binary exponent
|
||||
#define DBL_MIN 2.2250738585072014e-308 // min positive value
|
||||
#define DBL_MIN_10_EXP (-307) // min decimal exponent
|
||||
#define DBL_MIN_EXP (-1021) // min binary exponent
|
||||
#define _DBL_RADIX 2 // exponent radix
|
||||
#define _DBL_ROUNDS 1 // addition rounding: near
|
||||
|
||||
#define FLT_DIG 6 // # of decimal digits of precision
|
||||
#define FLT_EPSILON 1.192092896e-07F // smallest such that 1.0+FLT_EPSILON != 1.0
|
||||
#define FLT_GUARD 0
|
||||
#define FLT_MANT_DIG 24 // # of bits in mantissa
|
||||
#define FLT_MAX 3.402823466e+38F // max value
|
||||
#define FLT_MAX_10_EXP 38 // max decimal exponent
|
||||
#define FLT_MAX_EXP 128 // max binary exponent
|
||||
#define FLT_MIN 1.175494351e-38F // min positive value
|
||||
#define FLT_MIN_10_EXP (-37) // min decimal exponent
|
||||
#define FLT_MIN_EXP (-125) // min binary exponent
|
||||
#define FLT_NORMALIZE 0
|
||||
#define FLT_RADIX 2 // exponent radix
|
||||
#define FLT_ROUNDS 1 // addition rounding: near
|
||||
|
||||
#ifndef _M_M68K
|
||||
#define LDBL_DIG DBL_DIG // # of decimal digits of precision
|
||||
#define LDBL_EPSILON DBL_EPSILON // smallest such that 1.0+LDBL_EPSILON != 1.0
|
||||
#define LDBL_MANT_DIG DBL_MANT_DIG // # of bits in mantissa
|
||||
#define LDBL_MAX DBL_MAX // max value
|
||||
#define LDBL_MAX_10_EXP DBL_MAX_10_EXP // max decimal exponent
|
||||
#define LDBL_MAX_EXP DBL_MAX_EXP // max binary exponent
|
||||
#define LDBL_MIN DBL_MIN // min positive value
|
||||
#define LDBL_MIN_10_EXP DBL_MIN_10_EXP // min decimal exponent
|
||||
#define LDBL_MIN_EXP DBL_MIN_EXP // min binary exponent
|
||||
#define _LDBL_RADIX DBL_RADIX // exponent radix
|
||||
#define _LDBL_ROUNDS DBL_ROUNDS // addition rounding: near
|
||||
#else
|
||||
#define LDBL_DIG 18 // # of decimal digits of precision
|
||||
#define LDBL_EPSILON 1.08420217248550443412e-019L // smallest such that 1.0+LDBL_EPSILON != 1.0
|
||||
#define LDBL_MANT_DIG 64 // # of bits in mantissa
|
||||
#define LDBL_MAX 1.189731495357231765e+4932L // max value
|
||||
#define LDBL_MAX_10_EXP 4932 // max decimal exponent
|
||||
#define LDBL_MAX_EXP 16384 // max binary exponent
|
||||
#define LDBL_MIN 3.3621031431120935063e-4932L // min positive value
|
||||
#define LDBL_MIN_10_EXP (-4931) // min decimal exponent
|
||||
#define LDBL_MIN_EXP (-16381) // min binary exponent
|
||||
#define _LDBL_RADIX 2 // exponent radix
|
||||
#define _LDBL_ROUNDS 1 // addition rounding: near
|
||||
#endif
|
||||
|
||||
// Function prototypes
|
||||
|
||||
_CRTIMP unsigned int __cdecl _clearfp(void);
|
||||
_CRTIMP unsigned int __cdecl _controlfp(unsigned int,unsigned int);
|
||||
_CRTIMP unsigned int __cdecl _statusfp(void);
|
||||
_CRTIMP void __cdecl _fpreset(void);
|
||||
|
||||
#ifndef _MAC
|
||||
#define _clear87 _clearfp
|
||||
#define _status87 _statusfp
|
||||
#endif // _MAC
|
||||
|
||||
//
|
||||
// Abstract User Control Word Mask and bit definitions
|
||||
//
|
||||
|
||||
#ifndef _MAC
|
||||
#define _MCW_EM 0x0008001f // interrupt Exception Masks
|
||||
#else
|
||||
#define _MCW_EM 0x0000001f // interrupt Exception Masks
|
||||
#endif
|
||||
#define _EM_INEXACT 0x00000001 // inexact (precision)
|
||||
#define _EM_UNDERFLOW 0x00000002 // underflow
|
||||
#define _EM_OVERFLOW 0x00000004 // overflow
|
||||
#define _EM_ZERODIVIDE 0x00000008 // zero divide
|
||||
#define _EM_INVALID 0x00000010 // invalid
|
||||
|
||||
#define _MCW_RC 0x00000300 // Rounding Control
|
||||
#define _RC_NEAR 0x00000000 // near
|
||||
#define _RC_DOWN 0x00000100 // down
|
||||
#define _RC_UP 0x00000200 // up
|
||||
#define _RC_CHOP 0x00000300 // chop
|
||||
|
||||
//
|
||||
// Abstract User Status Word bit definitions
|
||||
|
||||
|
||||
#define _SW_INEXACT 0x00000001 // inexact (precision)
|
||||
#define _SW_UNDERFLOW 0x00000002 // underflow
|
||||
#define _SW_OVERFLOW 0x00000004 // overflow
|
||||
#define _SW_ZERODIVIDE 0x00000008 // zero divide
|
||||
#define _SW_INVALID 0x00000010 // invalid
|
||||
|
||||
|
||||
//
|
||||
// i386 specific definitions
|
||||
|
||||
#define _MCW_PC 0x00030000 // Precision Control
|
||||
#ifdef _M_MPPC
|
||||
//
|
||||
* PowerMac specific definitions(no precision control)
|
||||
|
||||
#define _PC_64 0x00000000 // 64 bits
|
||||
#define _PC_53 0x00000000 // 53 bits
|
||||
#define _PC_24 0x00000000 // 24 bits
|
||||
#else
|
||||
#define _PC_64 0x00000000 // 64 bits
|
||||
#define _PC_53 0x00010000 // 53 bits
|
||||
#define _PC_24 0x00020000 // 24 bits
|
||||
#endif
|
||||
|
||||
#define _MCW_IC 0x00040000 // Infinity Control
|
||||
#define _IC_AFFINE 0x00040000 // affine
|
||||
#define _IC_PROJECTIVE 0x00000000 // projective
|
||||
|
||||
#define _EM_DENORMAL 0x00080000 // denormal exception mask (_control87 only)
|
||||
|
||||
#define _SW_DENORMAL 0x00080000 // denormal status bit
|
||||
|
||||
|
||||
_CRTIMP unsigned int __cdecl _control87(unsigned int,unsigned int);
|
||||
|
||||
|
||||
//
|
||||
// RISC specific definitions
|
||||
|
||||
|
||||
#define _MCW_DN 0x03000000 // Denormal Control
|
||||
#define _DN_SAVE 0x00000000 // save denormal results and operands
|
||||
#define _DN_FLUSH 0x01000000 // flush denormal results and operands to zero
|
||||
#define _DN_FLUSH_OPERANDS_SAVE_RESULTS 0x02000000 // flush operands to zero and save results
|
||||
#define _DN_SAVE_OPERANDS_FLUSH_RESULTS 0x03000000 // save operands and flush results to zero
|
||||
|
||||
|
||||
// initial Control Word value
|
||||
|
||||
#if defined(_M_IX86)
|
||||
|
||||
#define _CW_DEFAULT ( _RC_NEAR + _PC_53 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
|
||||
|
||||
#elif defined(_MAC)
|
||||
|
||||
#define _CW_DEFAULT ( _RC_NEAR + _PC_64 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT )
|
||||
|
||||
#elif defined(_M_MRX000) || defined (_M_ALPHA) || defined(_M_PPC)
|
||||
|
||||
#define _CW_DEFAULT ( _RC_NEAR + _DN_FLUSH + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT )
|
||||
|
||||
#endif
|
||||
|
||||
// Global variable holding floating point error code
|
||||
|
||||
#if defined(_MT) || defined(_DLL)
|
||||
_CRTIMP extern int * __cdecl __fpecode(void);
|
||||
#define _fpecode (*__fpecode())
|
||||
#else // ndef _MT && ndef _DLL
|
||||
extern int _fpecode;
|
||||
#endif // _MT || _DLL
|
||||
|
||||
// invalid subconditions (_SW_INVALID also set)
|
||||
|
||||
#define _SW_UNEMULATED 0x0040 // unemulated instruction
|
||||
#define _SW_SQRTNEG 0x0080 // square root of a neg number
|
||||
#define _SW_STACKOVERFLOW 0x0200 // FP stack overflow
|
||||
#define _SW_STACKUNDERFLOW 0x0400 // FP stack underflow
|
||||
|
||||
// Floating point error signals and return codes
|
||||
|
||||
#define _FPE_INVALID 0x81
|
||||
#define _FPE_DENORMAL 0x82
|
||||
#define _FPE_ZERODIVIDE 0x83
|
||||
#define _FPE_OVERFLOW 0x84
|
||||
#define _FPE_UNDERFLOW 0x85
|
||||
#define _FPE_INEXACT 0x86
|
||||
|
||||
#define _FPE_UNEMULATED 0x87
|
||||
#define _FPE_SQRTNEG 0x88
|
||||
#define _FPE_STACKOVERFLOW 0x8a
|
||||
#define _FPE_STACKUNDERFLOW 0x8b
|
||||
|
||||
#define _FPE_EXPLICITGEN 0x8c // raise( SIGFPE );
|
||||
|
||||
|
||||
// IEEE recommended functions
|
||||
|
||||
_CRTIMP double __cdecl _copysign (double, double);
|
||||
_CRTIMP double __cdecl _chgsign (double);
|
||||
_CRTIMP double __cdecl _scalb(double, long);
|
||||
_CRTIMP double __cdecl _logb(double);
|
||||
_CRTIMP double __cdecl _nextafter(double, double);
|
||||
_CRTIMP int __cdecl _finite(double);
|
||||
_CRTIMP int __cdecl _isnan(double);
|
||||
_CRTIMP int __cdecl _fpclass(double);
|
||||
|
||||
#define _FPCLASS_SNAN 0x0001 // signaling NaN
|
||||
#define _FPCLASS_QNAN 0x0002 // quiet NaN
|
||||
#define _FPCLASS_NINF 0x0004 // negative infinity
|
||||
#define _FPCLASS_NN 0x0008 // negative normal
|
||||
#define _FPCLASS_ND 0x0010 // negative denormal
|
||||
#define _FPCLASS_NZ 0x0020 // -0
|
||||
#define _FPCLASS_PZ 0x0040 // +0
|
||||
#define _FPCLASS_PD 0x0080 // positive denormal
|
||||
#define _FPCLASS_PN 0x0100 // positive normal
|
||||
#define _FPCLASS_PINF 0x0200 // positive infinity
|
||||
|
||||
|
||||
#if !__STDC__
|
||||
|
||||
// Non-ANSI names for compatibility
|
||||
|
||||
#ifndef _MAC
|
||||
#define clear87 _clear87
|
||||
#define status87 _status87
|
||||
#define control87 _control87
|
||||
#endif // _MAC
|
||||
|
||||
_CRTIMP void __cdecl fpreset(void);
|
||||
|
||||
#define DBL_RADIX _DBL_RADIX
|
||||
#define DBL_ROUNDS _DBL_ROUNDS
|
||||
|
||||
#define LDBL_RADIX _LDBL_RADIX
|
||||
#define LDBL_ROUNDS _LDBL_ROUNDS
|
||||
|
||||
#define MCW_EM _MCW_EM
|
||||
#define EM_INVALID _EM_INVALID
|
||||
#define EM_DENORMAL _EM_DENORMAL
|
||||
#define EM_ZERODIVIDE _EM_ZERODIVIDE
|
||||
#define EM_OVERFLOW _EM_OVERFLOW
|
||||
#define EM_UNDERFLOW _EM_UNDERFLOW
|
||||
#define EM_INEXACT _EM_INEXACT
|
||||
|
||||
#define MCW_IC _MCW_IC
|
||||
#define IC_AFFINE _IC_AFFINE
|
||||
#define IC_PROJECTIVE _IC_PROJECTIVE
|
||||
|
||||
#define MCW_RC _MCW_RC
|
||||
#define RC_CHOP _RC_CHOP
|
||||
#define RC_UP _RC_UP
|
||||
#define RC_DOWN _RC_DOWN
|
||||
#define RC_NEAR _RC_NEAR
|
||||
|
||||
#define MCW_PC _MCW_PC
|
||||
#define PC_24 _PC_24
|
||||
#define PC_53 _PC_53
|
||||
#define PC_64 _PC_64
|
||||
|
||||
#define CW_DEFAULT _CW_DEFAULT
|
||||
|
||||
#define SW_INVALID _SW_INVALID
|
||||
#define SW_DENORMAL _SW_DENORMAL
|
||||
#define SW_ZERODIVIDE _SW_ZERODIVIDE
|
||||
#define SW_OVERFLOW _SW_OVERFLOW
|
||||
#define SW_UNDERFLOW _SW_UNDERFLOW
|
||||
#define SW_INEXACT _SW_INEXACT
|
||||
|
||||
#define SW_UNEMULATED _SW_UNEMULATED
|
||||
#define SW_SQRTNEG _SW_SQRTNEG
|
||||
#define SW_STACKOVERFLOW _SW_STACKOVERFLOW
|
||||
#define SW_STACKUNDERFLOW _SW_STACKUNDERFLOW
|
||||
|
||||
#define FPE_INVALID _FPE_INVALID
|
||||
#define FPE_DENORMAL _FPE_DENORMAL
|
||||
#define FPE_ZERODIVIDE _FPE_ZERODIVIDE
|
||||
#define FPE_OVERFLOW _FPE_OVERFLOW
|
||||
#define FPE_UNDERFLOW _FPE_UNDERFLOW
|
||||
#define FPE_INEXACT _FPE_INEXACT
|
||||
|
||||
#define FPE_UNEMULATED _FPE_UNEMULATED
|
||||
#define FPE_SQRTNEG _FPE_SQRTNEG
|
||||
#define FPE_STACKOVERFLOW _FPE_STACKOVERFLOW
|
||||
#define FPE_STACKUNDERFLOW _FPE_STACKUNDERFLOW
|
||||
|
||||
#define FPE_EXPLICITGEN _FPE_EXPLICITGEN
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,80 +1,80 @@
|
|||
/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef __GNU_STABS_H
|
||||
|
||||
#define __GNU_STABS_H 1
|
||||
|
||||
//#ifdef HAVE_GNU_LD
|
||||
|
||||
//
|
||||
//
|
||||
// GNU-STABS for rand.c stuff
|
||||
//
|
||||
/* Alias a function:
|
||||
function_alias(creat, _creat, int, (file, mode),
|
||||
DEFUN(creat, (file, mode),
|
||||
CONST char *file AND int mode))
|
||||
Yes, this is very repetitive. Nothing you can do about it, so shut up. */
|
||||
#define function_alias(name, _name, type, args, defun) \
|
||||
symbol_alias (_name, name);
|
||||
|
||||
#define function_alias_void(name, _name, args, defun) \
|
||||
symbol_alias (_name, name);
|
||||
|
||||
|
||||
#ifdef NO_UNDERSCORES
|
||||
#define __SYMBOL_PREFIX
|
||||
#else
|
||||
#define __SYMBOL_PREFIX "_"
|
||||
#endif
|
||||
|
||||
// Make references to ALIAS refer to SYMBOL.
|
||||
/*
|
||||
#define symbol_alias(symbol, alias) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #alias "\",11,0,0,0\n"\
|
||||
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0")
|
||||
|
||||
// Issue a warning message from the linker whenever SYMBOL is referenced.
|
||||
#define warn_references(symbol, msg) \
|
||||
asm(".stabs \"" msg "\",30,0,0,0\n" \
|
||||
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0")
|
||||
|
||||
#define stub_warning(name) \
|
||||
warn_references(name, \
|
||||
"warning: " #name " is not implemented and will always fail")
|
||||
|
||||
#define text_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
|
||||
#define data_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
|
||||
#define bss_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",27,0,0," __SYMBOL_PREFIX #symbol)
|
||||
|
||||
#else // No GNU stabs.
|
||||
|
||||
#define function_alias(name, _name, type, args, defun) \
|
||||
type defun { return _name args; }
|
||||
|
||||
#define function_alias_void(name, _name, args, defun) \
|
||||
void defun { _name args; }
|
||||
|
||||
*/
|
||||
//#endif // GNU stabs.
|
||||
|
||||
#endif // gnu-stabs.h
|
||||
/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef __GNU_STABS_H
|
||||
|
||||
#define __GNU_STABS_H 1
|
||||
|
||||
//#ifdef HAVE_GNU_LD
|
||||
|
||||
//
|
||||
//
|
||||
// GNU-STABS for rand.c stuff
|
||||
//
|
||||
/* Alias a function:
|
||||
function_alias(creat, _creat, int, (file, mode),
|
||||
DEFUN(creat, (file, mode),
|
||||
CONST char *file AND int mode))
|
||||
Yes, this is very repetitive. Nothing you can do about it, so shut up. */
|
||||
#define function_alias(name, _name, type, args, defun) \
|
||||
symbol_alias (_name, name);
|
||||
|
||||
#define function_alias_void(name, _name, args, defun) \
|
||||
symbol_alias (_name, name);
|
||||
|
||||
|
||||
#ifdef NO_UNDERSCORES
|
||||
#define __SYMBOL_PREFIX
|
||||
#else
|
||||
#define __SYMBOL_PREFIX "_"
|
||||
#endif
|
||||
|
||||
// Make references to ALIAS refer to SYMBOL.
|
||||
/*
|
||||
#define symbol_alias(symbol, alias) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #alias "\",11,0,0,0\n"\
|
||||
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0")
|
||||
|
||||
// Issue a warning message from the linker whenever SYMBOL is referenced.
|
||||
#define warn_references(symbol, msg) \
|
||||
asm(".stabs \"" msg "\",30,0,0,0\n" \
|
||||
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0")
|
||||
|
||||
#define stub_warning(name) \
|
||||
warn_references(name, \
|
||||
"warning: " #name " is not implemented and will always fail")
|
||||
|
||||
#define text_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
|
||||
#define data_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
|
||||
#define bss_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",27,0,0," __SYMBOL_PREFIX #symbol)
|
||||
|
||||
#else // No GNU stabs.
|
||||
|
||||
#define function_alias(name, _name, type, args, defun) \
|
||||
type defun { return _name args; }
|
||||
|
||||
#define function_alias_void(name, _name, args, defun) \
|
||||
void defun { _name args; }
|
||||
|
||||
*/
|
||||
//#endif // GNU stabs.
|
||||
|
||||
#endif // gnu-stabs.h
|
||||
|
|
|
@ -1,47 +1,47 @@
|
|||
/* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity).
|
||||
Used by <stdlib.h> and <math.h> functions for overflow.
|
||||
|
||||
Copyright (C) 1992 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef _HUGE_VAL_H
|
||||
#define _HUGE_VAL_H 1
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <endian.h>
|
||||
|
||||
/* IEEE positive infinity. */
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define __huge_val_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
|
||||
#endif
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define __huge_val_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define HUGE_VAL \
|
||||
(__extension__ ((union { unsigned char __c[8]; \
|
||||
double __d; }) \
|
||||
{ __huge_val_bytes }).__d)
|
||||
#else /* Not GCC. */
|
||||
static __const unsigned char __huge_val[8] = __huge_val_bytes;
|
||||
#define HUGE_VAL (*(__const double *) __huge_val)
|
||||
#endif /* GCC. */
|
||||
|
||||
#endif /* huge_val.h */
|
||||
/* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity).
|
||||
Used by <stdlib.h> and <math.h> functions for overflow.
|
||||
|
||||
Copyright (C) 1992 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef _HUGE_VAL_H
|
||||
#define _HUGE_VAL_H 1
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <endian.h>
|
||||
|
||||
/* IEEE positive infinity. */
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define __huge_val_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
|
||||
#endif
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define __huge_val_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define HUGE_VAL \
|
||||
(__extension__ ((union { unsigned char __c[8]; \
|
||||
double __d; }) \
|
||||
{ __huge_val_bytes }).__d)
|
||||
#else /* Not GCC. */
|
||||
static __const unsigned char __huge_val[8] = __huge_val_bytes;
|
||||
#define HUGE_VAL (*(__const double *) __huge_val)
|
||||
#endif /* GCC. */
|
||||
|
||||
#endif /* huge_val.h */
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
|
||||
#ifndef _LIMITS
|
||||
#define _LIMITS
|
||||
|
||||
|
||||
|
||||
#define LONG_MIN (-2147483647-1)
|
||||
#define LONG_MAX (2147483647)
|
||||
#define ULONG_MAX (0xffffffff)
|
||||
|
||||
|
||||
#endif // _LIMITS
|
||||
|
||||
#ifndef _LIMITS
|
||||
#define _LIMITS
|
||||
|
||||
|
||||
|
||||
#define LONG_MIN (-2147483647-1)
|
||||
#define LONG_MAX (2147483647)
|
||||
#define ULONG_MAX (0xffffffff)
|
||||
|
||||
|
||||
#endif // _LIMITS
|
||||
|
|
|
@ -1,282 +1,282 @@
|
|||
/* Declarations for `malloc' and friends.
|
||||
Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
Written May 1989 by Mike Haertel.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA.
|
||||
|
||||
The author may be reached (Email) at the address mike@ai.mit.edu,
|
||||
or (US mail) as Mike Haertel c/o Free Software Foundation. */
|
||||
|
||||
#ifndef _MALLOC_H
|
||||
|
||||
#define _MALLOC_H 1
|
||||
|
||||
#ifdef _MALLOC_INTERNAL
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined(_LIBC) || defined(STDC_HEADERS) || defined(USG)
|
||||
#include <string.h>
|
||||
#else
|
||||
#ifndef memset
|
||||
#define memset(s, zero, n) bzero ((s), (n))
|
||||
#endif
|
||||
#ifndef memcpy
|
||||
#define memcpy(d, s, n) bcopy ((s), (d), (n))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__GNU_LIBRARY__) || (defined (__STDC__) && __STDC__)
|
||||
#include <limits.h>
|
||||
#else
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#endif /* _MALLOC_INTERNAL. */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
|
||||
#undef __P
|
||||
#define __P(args) args
|
||||
#undef __ptr_t
|
||||
#define __ptr_t void *
|
||||
#else /* Not C++ or ANSI C. */
|
||||
#undef __P
|
||||
#define __P(args) ()
|
||||
#undef const
|
||||
#define const
|
||||
#undef __ptr_t
|
||||
#define __ptr_t char *
|
||||
#endif /* C++ or ANSI C. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#include <stddef.h>
|
||||
#define __malloc_size_t size_t
|
||||
#else
|
||||
#define __malloc_size_t unsigned int
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
|
||||
/* Allocate SIZE bytes of memory. */
|
||||
extern __ptr_t malloc __P ((size_t __size));
|
||||
/* Re-allocate the previously allocated block
|
||||
in __ptr_t, making the new block SIZE bytes long. */
|
||||
extern __ptr_t realloc __P ((__ptr_t __ptr, size_t __size));
|
||||
/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
|
||||
extern __ptr_t calloc __P ((size_t __nmemb, size_t __size));
|
||||
/* Free a block allocated by `malloc', `realloc' or `calloc'. */
|
||||
extern void free __P ((__ptr_t __ptr));
|
||||
|
||||
/* Allocate SIZE bytes allocated to ALIGNMENT bytes. */
|
||||
extern __ptr_t memalign __P ((size_t __alignment, size_t __size));
|
||||
|
||||
/* Allocate SIZE bytes on a page boundary. */
|
||||
extern __ptr_t valloc __P ((size_t __size));
|
||||
|
||||
|
||||
#ifdef _MALLOC_INTERNAL
|
||||
|
||||
/* The allocator divides the heap into blocks of fixed size; large
|
||||
requests receive one or more whole blocks, and small requests
|
||||
receive a fragment of a block. Fragment sizes are powers of two,
|
||||
and all fragments of a block are the same size. When all the
|
||||
fragments in a block have been freed, the block itself is freed. */
|
||||
#define INT_BIT (CHAR_BIT * sizeof(int))
|
||||
#define BLOCKLOG (INT_BIT > 16 ? 12 : 9)
|
||||
#define BLOCKSIZE (1 << BLOCKLOG)
|
||||
#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) / BLOCKSIZE)
|
||||
|
||||
/* Determine the amount of memory spanned by the initial heap table
|
||||
(not an absolute limit). */
|
||||
#define HEAP (INT_BIT > 16 ? 4194304 : 65536)
|
||||
|
||||
/* Number of contiguous free blocks allowed to build up at the end of
|
||||
memory before they will be returned to the system. */
|
||||
#define FINAL_FREE_BLOCKS 8
|
||||
|
||||
/* Data structure giving per-block information. */
|
||||
typedef union
|
||||
{
|
||||
/* Heap information for a busy block. */
|
||||
struct
|
||||
{
|
||||
/* Zero for a large block, or positive giving the
|
||||
logarithm to the base two of the fragment size. */
|
||||
int type;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
__malloc_size_t nfree; /* Free frags in a fragmented block. */
|
||||
__malloc_size_t first; /* First free fragment of the block. */
|
||||
} frag;
|
||||
/* Size (in blocks) of a large cluster. */
|
||||
__malloc_size_t size;
|
||||
} info;
|
||||
} busy;
|
||||
/* Heap information for a free block
|
||||
(that may be the first of a free cluster). */
|
||||
struct
|
||||
{
|
||||
__malloc_size_t size; /* Size (in blocks) of a free cluster. */
|
||||
__malloc_size_t next; /* Index of next free cluster. */
|
||||
__malloc_size_t prev; /* Index of previous free cluster. */
|
||||
} free;
|
||||
} malloc_info;
|
||||
|
||||
/* Pointer to first block of the heap. */
|
||||
extern char *_heapbase;
|
||||
|
||||
/* Table indexed by block number giving per-block information. */
|
||||
extern malloc_info *_heapinfo;
|
||||
|
||||
/* Address to block number and vice versa. */
|
||||
#define BLOCK(A) (((char *) (A) - _heapbase) / BLOCKSIZE + 1)
|
||||
#define ADDRESS(B) ((__ptr_t) (((B) - 1) * BLOCKSIZE + _heapbase))
|
||||
|
||||
/* Current search index for the heap table. */
|
||||
extern __malloc_size_t _heapindex;
|
||||
|
||||
/* Limit of valid info table indices. */
|
||||
extern __malloc_size_t _heaplimit;
|
||||
|
||||
/* Doubly linked lists of free fragments. */
|
||||
struct list
|
||||
{
|
||||
struct list *next;
|
||||
struct list *prev;
|
||||
};
|
||||
|
||||
/* Free list headers for each fragment size. */
|
||||
extern struct list _fraghead[];
|
||||
|
||||
/* List of blocks allocated with `memalign' (or `valloc'). */
|
||||
struct alignlist
|
||||
{
|
||||
struct alignlist *next;
|
||||
__ptr_t aligned; /* The address that memaligned returned. */
|
||||
__ptr_t exact; /* The address that malloc returned. */
|
||||
};
|
||||
extern struct alignlist *_aligned_blocks;
|
||||
|
||||
/* Instrumentation. */
|
||||
extern __malloc_size_t _chunks_used;
|
||||
extern __malloc_size_t _bytes_used;
|
||||
extern __malloc_size_t _chunks_free;
|
||||
extern __malloc_size_t _bytes_free;
|
||||
|
||||
/* Internal version of `free' used in `morecore' (malloc.c). */
|
||||
extern void _free_internal __P ((__ptr_t __ptr));
|
||||
|
||||
#endif /* _MALLOC_INTERNAL. */
|
||||
|
||||
/* Underlying allocation function; successive calls should
|
||||
return contiguous pieces of memory. */
|
||||
extern __ptr_t (*__morecore) __P ((ptrdiff_t __size));
|
||||
|
||||
/* Default value of `__morecore'. */
|
||||
extern __ptr_t __default_morecore __P ((ptrdiff_t __size));
|
||||
|
||||
/* If not NULL, this function is called after each time
|
||||
`__morecore' is called to increase the data size. */
|
||||
extern void (*__after_morecore_hook) __P ((void));
|
||||
|
||||
/* Nonzero if `malloc' has been called and done its initialization. */
|
||||
extern int __malloc_initialized;
|
||||
|
||||
/* Hooks for debugging versions. */
|
||||
extern void (*__free_hook) __P ((__ptr_t __ptr));
|
||||
extern __ptr_t (*__malloc_hook) __P ((size_t __size));
|
||||
extern __ptr_t (*__realloc_hook) __P ((__ptr_t __ptr, size_t __size));
|
||||
|
||||
/* Return values for `mprobe': these are the kinds of inconsistencies that
|
||||
`mcheck' enables detection of. */
|
||||
enum mcheck_status
|
||||
{
|
||||
MCHECK_DISABLED = -1, /* Consistency checking is not turned on. */
|
||||
MCHECK_OK, /* Block is fine. */
|
||||
MCHECK_FREE, /* Block freed twice. */
|
||||
MCHECK_HEAD, /* Memory before the block was clobbered. */
|
||||
MCHECK_TAIL /* Memory after the block was clobbered. */
|
||||
};
|
||||
|
||||
/* Activate a standard collection of debugging hooks. This must be called
|
||||
before `malloc' is ever called. ABORTFUNC is called with an error code
|
||||
(see enum above) when an inconsistency is detected. If ABORTFUNC is
|
||||
null, the standard function prints on stderr and then calls `abort'. */
|
||||
extern int mcheck __P ((void (*__abortfunc) __P ((enum mcheck_status))));
|
||||
|
||||
/* Check for aberrations in a particular malloc'd block. You must have
|
||||
called `mcheck' already. These are the same checks that `mcheck' does
|
||||
when you free or reallocate a block. */
|
||||
extern enum mcheck_status mprobe __P ((__ptr_t __ptr));
|
||||
|
||||
/* Activate a standard collection of tracing hooks. */
|
||||
extern void mtrace __P ((void));
|
||||
extern void muntrace __P ((void));
|
||||
|
||||
/* Statistics available to the user. */
|
||||
struct mstats
|
||||
{
|
||||
__malloc_size_t bytes_total; /* Total size of the heap. */
|
||||
__malloc_size_t chunks_used; /* Chunks allocated by the user. */
|
||||
__malloc_size_t bytes_used; /* Byte total of user-allocated chunks. */
|
||||
__malloc_size_t chunks_free; /* Chunks in the free list. */
|
||||
__malloc_size_t bytes_free; /* Byte total of chunks in the free list. */
|
||||
};
|
||||
|
||||
/* Pick up the current statistics. */
|
||||
extern struct mstats mstats __P ((void));
|
||||
|
||||
/* Call WARNFUN with a warning message when memory usage is high. */
|
||||
extern void memory_warnings __P ((__ptr_t __start,
|
||||
void (*__warnfun) __P ((const char *))));
|
||||
|
||||
|
||||
/* Relocating allocator. */
|
||||
|
||||
/* Allocate SIZE bytes, and store the address in *HANDLEPTR. */
|
||||
extern __ptr_t r_alloc __P ((__ptr_t *__handleptr, size_t __size));
|
||||
|
||||
/* Free the storage allocated in HANDLEPTR. */
|
||||
extern void r_alloc_free __P ((__ptr_t *__handleptr));
|
||||
|
||||
/* Adjust the block at HANDLEPTR to be SIZE bytes long. */
|
||||
extern __ptr_t r_re_alloc __P ((__ptr_t *__handleptr, size_t __size));
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* malloc.h */
|
||||
/* Declarations for `malloc' and friends.
|
||||
Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
Written May 1989 by Mike Haertel.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA.
|
||||
|
||||
The author may be reached (Email) at the address mike@ai.mit.edu,
|
||||
or (US mail) as Mike Haertel c/o Free Software Foundation. */
|
||||
|
||||
#ifndef _MALLOC_H
|
||||
|
||||
#define _MALLOC_H 1
|
||||
|
||||
#ifdef _MALLOC_INTERNAL
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined(_LIBC) || defined(STDC_HEADERS) || defined(USG)
|
||||
#include <string.h>
|
||||
#else
|
||||
#ifndef memset
|
||||
#define memset(s, zero, n) bzero ((s), (n))
|
||||
#endif
|
||||
#ifndef memcpy
|
||||
#define memcpy(d, s, n) bcopy ((s), (d), (n))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__GNU_LIBRARY__) || (defined (__STDC__) && __STDC__)
|
||||
#include <limits.h>
|
||||
#else
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#endif /* _MALLOC_INTERNAL. */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
|
||||
#undef __P
|
||||
#define __P(args) args
|
||||
#undef __ptr_t
|
||||
#define __ptr_t void *
|
||||
#else /* Not C++ or ANSI C. */
|
||||
#undef __P
|
||||
#define __P(args) ()
|
||||
#undef const
|
||||
#define const
|
||||
#undef __ptr_t
|
||||
#define __ptr_t char *
|
||||
#endif /* C++ or ANSI C. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#include <stddef.h>
|
||||
#define __malloc_size_t size_t
|
||||
#else
|
||||
#define __malloc_size_t unsigned int
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
|
||||
/* Allocate SIZE bytes of memory. */
|
||||
extern __ptr_t malloc __P ((size_t __size));
|
||||
/* Re-allocate the previously allocated block
|
||||
in __ptr_t, making the new block SIZE bytes long. */
|
||||
extern __ptr_t realloc __P ((__ptr_t __ptr, size_t __size));
|
||||
/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
|
||||
extern __ptr_t calloc __P ((size_t __nmemb, size_t __size));
|
||||
/* Free a block allocated by `malloc', `realloc' or `calloc'. */
|
||||
extern void free __P ((__ptr_t __ptr));
|
||||
|
||||
/* Allocate SIZE bytes allocated to ALIGNMENT bytes. */
|
||||
extern __ptr_t memalign __P ((size_t __alignment, size_t __size));
|
||||
|
||||
/* Allocate SIZE bytes on a page boundary. */
|
||||
extern __ptr_t valloc __P ((size_t __size));
|
||||
|
||||
|
||||
#ifdef _MALLOC_INTERNAL
|
||||
|
||||
/* The allocator divides the heap into blocks of fixed size; large
|
||||
requests receive one or more whole blocks, and small requests
|
||||
receive a fragment of a block. Fragment sizes are powers of two,
|
||||
and all fragments of a block are the same size. When all the
|
||||
fragments in a block have been freed, the block itself is freed. */
|
||||
#define INT_BIT (CHAR_BIT * sizeof(int))
|
||||
#define BLOCKLOG (INT_BIT > 16 ? 12 : 9)
|
||||
#define BLOCKSIZE (1 << BLOCKLOG)
|
||||
#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) / BLOCKSIZE)
|
||||
|
||||
/* Determine the amount of memory spanned by the initial heap table
|
||||
(not an absolute limit). */
|
||||
#define HEAP (INT_BIT > 16 ? 4194304 : 65536)
|
||||
|
||||
/* Number of contiguous free blocks allowed to build up at the end of
|
||||
memory before they will be returned to the system. */
|
||||
#define FINAL_FREE_BLOCKS 8
|
||||
|
||||
/* Data structure giving per-block information. */
|
||||
typedef union
|
||||
{
|
||||
/* Heap information for a busy block. */
|
||||
struct
|
||||
{
|
||||
/* Zero for a large block, or positive giving the
|
||||
logarithm to the base two of the fragment size. */
|
||||
int type;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
__malloc_size_t nfree; /* Free frags in a fragmented block. */
|
||||
__malloc_size_t first; /* First free fragment of the block. */
|
||||
} frag;
|
||||
/* Size (in blocks) of a large cluster. */
|
||||
__malloc_size_t size;
|
||||
} info;
|
||||
} busy;
|
||||
/* Heap information for a free block
|
||||
(that may be the first of a free cluster). */
|
||||
struct
|
||||
{
|
||||
__malloc_size_t size; /* Size (in blocks) of a free cluster. */
|
||||
__malloc_size_t next; /* Index of next free cluster. */
|
||||
__malloc_size_t prev; /* Index of previous free cluster. */
|
||||
} free;
|
||||
} malloc_info;
|
||||
|
||||
/* Pointer to first block of the heap. */
|
||||
extern char *_heapbase;
|
||||
|
||||
/* Table indexed by block number giving per-block information. */
|
||||
extern malloc_info *_heapinfo;
|
||||
|
||||
/* Address to block number and vice versa. */
|
||||
#define BLOCK(A) (((char *) (A) - _heapbase) / BLOCKSIZE + 1)
|
||||
#define ADDRESS(B) ((__ptr_t) (((B) - 1) * BLOCKSIZE + _heapbase))
|
||||
|
||||
/* Current search index for the heap table. */
|
||||
extern __malloc_size_t _heapindex;
|
||||
|
||||
/* Limit of valid info table indices. */
|
||||
extern __malloc_size_t _heaplimit;
|
||||
|
||||
/* Doubly linked lists of free fragments. */
|
||||
struct list
|
||||
{
|
||||
struct list *next;
|
||||
struct list *prev;
|
||||
};
|
||||
|
||||
/* Free list headers for each fragment size. */
|
||||
extern struct list _fraghead[];
|
||||
|
||||
/* List of blocks allocated with `memalign' (or `valloc'). */
|
||||
struct alignlist
|
||||
{
|
||||
struct alignlist *next;
|
||||
__ptr_t aligned; /* The address that memaligned returned. */
|
||||
__ptr_t exact; /* The address that malloc returned. */
|
||||
};
|
||||
extern struct alignlist *_aligned_blocks;
|
||||
|
||||
/* Instrumentation. */
|
||||
extern __malloc_size_t _chunks_used;
|
||||
extern __malloc_size_t _bytes_used;
|
||||
extern __malloc_size_t _chunks_free;
|
||||
extern __malloc_size_t _bytes_free;
|
||||
|
||||
/* Internal version of `free' used in `morecore' (malloc.c). */
|
||||
extern void _free_internal __P ((__ptr_t __ptr));
|
||||
|
||||
#endif /* _MALLOC_INTERNAL. */
|
||||
|
||||
/* Underlying allocation function; successive calls should
|
||||
return contiguous pieces of memory. */
|
||||
extern __ptr_t (*__morecore) __P ((ptrdiff_t __size));
|
||||
|
||||
/* Default value of `__morecore'. */
|
||||
extern __ptr_t __default_morecore __P ((ptrdiff_t __size));
|
||||
|
||||
/* If not NULL, this function is called after each time
|
||||
`__morecore' is called to increase the data size. */
|
||||
extern void (*__after_morecore_hook) __P ((void));
|
||||
|
||||
/* Nonzero if `malloc' has been called and done its initialization. */
|
||||
extern int __malloc_initialized;
|
||||
|
||||
/* Hooks for debugging versions. */
|
||||
extern void (*__free_hook) __P ((__ptr_t __ptr));
|
||||
extern __ptr_t (*__malloc_hook) __P ((size_t __size));
|
||||
extern __ptr_t (*__realloc_hook) __P ((__ptr_t __ptr, size_t __size));
|
||||
|
||||
/* Return values for `mprobe': these are the kinds of inconsistencies that
|
||||
`mcheck' enables detection of. */
|
||||
enum mcheck_status
|
||||
{
|
||||
MCHECK_DISABLED = -1, /* Consistency checking is not turned on. */
|
||||
MCHECK_OK, /* Block is fine. */
|
||||
MCHECK_FREE, /* Block freed twice. */
|
||||
MCHECK_HEAD, /* Memory before the block was clobbered. */
|
||||
MCHECK_TAIL /* Memory after the block was clobbered. */
|
||||
};
|
||||
|
||||
/* Activate a standard collection of debugging hooks. This must be called
|
||||
before `malloc' is ever called. ABORTFUNC is called with an error code
|
||||
(see enum above) when an inconsistency is detected. If ABORTFUNC is
|
||||
null, the standard function prints on stderr and then calls `abort'. */
|
||||
extern int mcheck __P ((void (*__abortfunc) __P ((enum mcheck_status))));
|
||||
|
||||
/* Check for aberrations in a particular malloc'd block. You must have
|
||||
called `mcheck' already. These are the same checks that `mcheck' does
|
||||
when you free or reallocate a block. */
|
||||
extern enum mcheck_status mprobe __P ((__ptr_t __ptr));
|
||||
|
||||
/* Activate a standard collection of tracing hooks. */
|
||||
extern void mtrace __P ((void));
|
||||
extern void muntrace __P ((void));
|
||||
|
||||
/* Statistics available to the user. */
|
||||
struct mstats
|
||||
{
|
||||
__malloc_size_t bytes_total; /* Total size of the heap. */
|
||||
__malloc_size_t chunks_used; /* Chunks allocated by the user. */
|
||||
__malloc_size_t bytes_used; /* Byte total of user-allocated chunks. */
|
||||
__malloc_size_t chunks_free; /* Chunks in the free list. */
|
||||
__malloc_size_t bytes_free; /* Byte total of chunks in the free list. */
|
||||
};
|
||||
|
||||
/* Pick up the current statistics. */
|
||||
extern struct mstats mstats __P ((void));
|
||||
|
||||
/* Call WARNFUN with a warning message when memory usage is high. */
|
||||
extern void memory_warnings __P ((__ptr_t __start,
|
||||
void (*__warnfun) __P ((const char *))));
|
||||
|
||||
|
||||
/* Relocating allocator. */
|
||||
|
||||
/* Allocate SIZE bytes, and store the address in *HANDLEPTR. */
|
||||
extern __ptr_t r_alloc __P ((__ptr_t *__handleptr, size_t __size));
|
||||
|
||||
/* Free the storage allocated in HANDLEPTR. */
|
||||
extern void r_alloc_free __P ((__ptr_t *__handleptr));
|
||||
|
||||
/* Adjust the block at HANDLEPTR to be SIZE bytes long. */
|
||||
extern __ptr_t r_re_alloc __P ((__ptr_t *__handleptr, size_t __size));
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* malloc.h */
|
||||
|
|
|
@ -1,285 +1,285 @@
|
|||
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* ANSI Standard: 4.5 MATHEMATICS <math.h>
|
||||
*/
|
||||
|
||||
#ifndef _MATH_H
|
||||
#define _MATH_H 1
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
|
||||
#include <defs.h>
|
||||
#include <features.h>
|
||||
|
||||
#define __need_Emath
|
||||
#include <errno.h>
|
||||
|
||||
/* Get machine-dependent HUGE_VAL value (returned on overflow). */
|
||||
#include <huge_val.h>
|
||||
|
||||
/* Get machine-dependent NAN value (returned for some domain errors). */
|
||||
#ifdef __USE_GNU
|
||||
#include <nan.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* Trigonometric functions. */
|
||||
|
||||
/* Arc cosine of X. */
|
||||
extern __CONSTVALUE double acos __P ((double __x));
|
||||
/* Arc sine of X. */
|
||||
extern __CONSTVALUE double asin __P ((double __x));
|
||||
/* Arc tangent of X. */
|
||||
extern __CONSTVALUE double atan __P ((double __x));
|
||||
/* Arc tangent of Y/X. */
|
||||
extern __CONSTVALUE double atan2 __P ((double __y, double __x));
|
||||
|
||||
/* Cosine of X. */
|
||||
extern __CONSTVALUE double cos __P ((double __x));
|
||||
/* Sine of X. */
|
||||
extern __CONSTVALUE double sin __P ((double __x));
|
||||
extern __CONSTVALUE double _sin __P ((double __x));
|
||||
/* Tangent of X. */
|
||||
extern __CONSTVALUE double tan __P ((double __x));
|
||||
|
||||
|
||||
/* Hyperbolic functions. */
|
||||
|
||||
/* Hyperbolic cosine of X. */
|
||||
extern __CONSTVALUE double cosh __P ((double __x));
|
||||
/* Hyperbolic sine of X. */
|
||||
extern __CONSTVALUE double sinh __P ((double __x));
|
||||
/* Hyperbolic tangent of X. */
|
||||
extern __CONSTVALUE double tanh __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* Hyperbolic arc cosine of X. */
|
||||
extern __CONSTVALUE double acosh __P ((double __x));
|
||||
/* Hyperbolic arc sine of X. */
|
||||
extern __CONSTVALUE double asinh __P ((double __x));
|
||||
/* Hyperbolic arc tangent of X. */
|
||||
extern __CONSTVALUE double atanh __P ((double __x));
|
||||
#endif
|
||||
|
||||
/* Exponential and logarithmic functions. */
|
||||
|
||||
/* Exponentional function of X. */
|
||||
extern __CONSTVALUE double exp __P ((double __x));
|
||||
|
||||
/* Break VALUE into a normalized fraction and an integral power of 2. */
|
||||
extern double frexp __P ((double __value, int *__exp));
|
||||
|
||||
/* X times (two to the EXP power). */
|
||||
extern __CONSTVALUE double ldexp __P ((double __x, int __exp));
|
||||
|
||||
/* Natural logarithm of X. */
|
||||
extern __CONSTVALUE double log __P ((double __x));
|
||||
|
||||
/* Base-ten logarithm of X. */
|
||||
extern __CONSTVALUE double log10 __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* Return exp(X) - 1. */
|
||||
extern __CONSTVALUE double __expm1 __P ((double __x));
|
||||
extern __CONSTVALUE double expm1 __P ((double __x));
|
||||
|
||||
/* Return log(1 + X). */
|
||||
extern __CONSTVALUE double log1p __P ((double __x));
|
||||
#endif
|
||||
|
||||
/* Break VALUE into integral and fractional parts. */
|
||||
extern double modf __P ((double __value, double *__iptr));
|
||||
|
||||
|
||||
/* Power functions. */
|
||||
|
||||
/* Return X to the Y power. */
|
||||
extern __CONSTVALUE double pow __P ((double __x, double __y));
|
||||
|
||||
/* Return the square root of X. */
|
||||
extern __CONSTVALUE double sqrt __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* Return the cube root of X. */
|
||||
extern __CONSTVALUE double cbrt __P ((double __x));
|
||||
#endif
|
||||
|
||||
|
||||
/* Nearest integer, absolute value, and remainder functions. */
|
||||
|
||||
/* Smallest integral value not less than X. */
|
||||
extern __CONSTVALUE double ceil __P ((double __x));
|
||||
|
||||
/* Absolute value of X. */
|
||||
extern __CONSTVALUE double fabs __P ((double __x));
|
||||
|
||||
/* Largest integer not greater than X. */
|
||||
extern __CONSTVALUE double floor __P ((double __x));
|
||||
|
||||
/* Floating-point modulo remainder of X/Y. */
|
||||
extern __CONSTVALUE double fmod __P ((double __x, double __y));
|
||||
|
||||
|
||||
/* Return 0 if VALUE is finite or NaN, +1 if it
|
||||
is +Infinity, -1 if it is -Infinity. */
|
||||
extern __CONSTVALUE int __isinf __P ((double __value));
|
||||
|
||||
/* Return nonzero if VALUE is not a number. */
|
||||
extern __CONSTVALUE int __isnan __P ((double __value));
|
||||
|
||||
/* Return nonzero if VALUE is finite and not NaN. */
|
||||
extern __CONSTVALUE int __finite __P ((double __value));
|
||||
#ifdef __OPTIMIZE__
|
||||
#define __finite(value) (!__isinf(value))
|
||||
#endif
|
||||
|
||||
/* Deal with an infinite or NaN result.
|
||||
If ERROR is ERANGE, result is +Inf;
|
||||
if ERROR is - ERANGE, result is -Inf;
|
||||
otherwise result is NaN.
|
||||
This will set `errno' to either ERANGE or EDOM,
|
||||
and may return an infinity or NaN, or may do something else. */
|
||||
extern double __infnan __P ((int __error));
|
||||
|
||||
/* Return X with its signed changed to Y's. */
|
||||
extern __CONSTVALUE double __copysign __P ((double __x, double __y));
|
||||
|
||||
/* Return X times (2 to the Nth power). */
|
||||
extern __CONSTVALUE double __scalb __P ((double __x, int __n));
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
#define __scalb(x, n) ldexp ((x), (n))
|
||||
#endif
|
||||
|
||||
/* Return the remainder of X/Y. */
|
||||
extern __CONSTVALUE double __drem __P ((double __x, double __y));
|
||||
|
||||
/* Return the base 2 signed integral exponent of X. */
|
||||
extern __CONSTVALUE double __logb __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* Return the integer nearest X in the direction of the
|
||||
prevailing rounding mode. */
|
||||
extern __CONSTVALUE double __rint __P ((double __x));
|
||||
extern __CONSTVALUE double rint __P ((double __x));
|
||||
|
||||
/* Return `sqrt(X*X + Y*Y)'. */
|
||||
extern __CONSTVALUE double hypot __P ((double __x, double __y));
|
||||
|
||||
struct __cabs_complex
|
||||
{
|
||||
double __x, __y;
|
||||
};
|
||||
|
||||
/* Return `sqrt(X*X + Y*Y)'. */
|
||||
extern __CONSTVALUE double cabs __P ((struct __cabs_complex));
|
||||
|
||||
extern __CONSTVALUE int isinf __P ((double __value));
|
||||
extern __CONSTVALUE int isnan __P ((double __value));
|
||||
extern __CONSTVALUE int finite __P ((double __value));
|
||||
extern __CONSTVALUE double infnan __P ((int __error));
|
||||
extern __CONSTVALUE double copysign __P ((double __x, double __y));
|
||||
extern __CONSTVALUE double scalb __P ((double __x, int __n));
|
||||
extern __CONSTVALUE double drem __P ((double __x, double __y));
|
||||
extern __CONSTVALUE double logb __P ((double __x));
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
#define isinf(value) __isinf(value)
|
||||
#define isnan(value) __isnan(value)
|
||||
#define infnan(error) __infnan(error)
|
||||
#define finite(value) __finite(value)
|
||||
#define copysign(x, y) __copysign((x), (y))
|
||||
#define scalb(x, n) __scalb((x), (n))
|
||||
#define drem(x, y) __drem((x), (y))
|
||||
#define logb(x) __logb(x)
|
||||
#endif /* Optimizing. */
|
||||
|
||||
#endif /* Use misc. */
|
||||
|
||||
|
||||
#if 0
|
||||
/* The "Future Library Directions" section of the
|
||||
ANSI Standard reserves these as `float' and
|
||||
`long double' versions of the above functions. */
|
||||
|
||||
extern __CONSTVALUE float acosf __P ((float __x));
|
||||
extern __CONSTVALUE float asinf __P ((float __x));
|
||||
extern __CONSTVALUE float atanf __P ((float __x));
|
||||
extern __CONSTVALUE float atan2f __P ((float __y, float __x));
|
||||
extern __CONSTVALUE float cosf __P ((float __x));
|
||||
extern __CONSTVALUE float sinf __P ((float __x));
|
||||
extern __CONSTVALUE float tanf __P ((float __x));
|
||||
extern __CONSTVALUE float coshf __P ((float __x));
|
||||
extern __CONSTVALUE float sinhf __P ((float __x));
|
||||
extern __CONSTVALUE float tanhf __P ((float __x));
|
||||
extern __CONSTVALUE float expf __P ((float __x));
|
||||
extern float frexpf __P ((float __value, int *__exp));
|
||||
extern __CONSTVALUE float ldexpf __P ((float __x, int __exp));
|
||||
extern __CONSTVALUE float logf __P ((float __x));
|
||||
extern __CONSTVALUE float log10f __P ((float __x));
|
||||
extern float modff __P ((float __value, float *__iptr));
|
||||
extern __CONSTVALUE float powf __P ((float __x, float __y));
|
||||
extern __CONSTVALUE float sqrtf __P ((float __x));
|
||||
extern __CONSTVALUE float ceilf __P ((float __x));
|
||||
extern __CONSTVALUE float fabsf __P ((float __x));
|
||||
extern __CONSTVALUE float floorf __P ((float __x));
|
||||
extern __CONSTVALUE float fmodf __P ((float __x, float __y));
|
||||
|
||||
extern __CONSTVALUE __long_double_t acosl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t asinl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t atanl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t atan2l __P ((__long_double_t __y, __long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t cosl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t sinl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t tanl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t coshl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t sinhl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t tanhl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t expl __P ((__long_double_t __x));
|
||||
extern __long_double_t frexpl __P ((__long_double_t __value, int *__exp));
|
||||
extern __CONSTVALUE __long_double_t ldexpl __P ((__long_double_t __x, int __exp));
|
||||
extern __CONSTVALUE __long_double_t logl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t log10l __P ((__long_double_t __x));
|
||||
extern __long_double_t modfl __P ((__long_double_t __value, __long_double_t * __ip));
|
||||
extern __CONSTVALUE __long_double_t powl __P ((__long_double_t __x, __long_double_t __y));
|
||||
extern __CONSTVALUE __long_double_t sqrtl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t ceill __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t fabsl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t floorl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t fmodl __P ((__long_double_t __x, __long_double_t __y));
|
||||
#endif /* 0 */
|
||||
|
||||
/* Get machine-dependent inline versions (if there are any). */
|
||||
/*
|
||||
#include <__math.h>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
|
||||
#endif /* math.h */
|
||||
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* ANSI Standard: 4.5 MATHEMATICS <math.h>
|
||||
*/
|
||||
|
||||
#ifndef _MATH_H
|
||||
#define _MATH_H 1
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
|
||||
#include <defs.h>
|
||||
#include <features.h>
|
||||
|
||||
#define __need_Emath
|
||||
#include <errno.h>
|
||||
|
||||
/* Get machine-dependent HUGE_VAL value (returned on overflow). */
|
||||
#include <huge_val.h>
|
||||
|
||||
/* Get machine-dependent NAN value (returned for some domain errors). */
|
||||
#ifdef __USE_GNU
|
||||
#include <nan.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* Trigonometric functions. */
|
||||
|
||||
/* Arc cosine of X. */
|
||||
extern __CONSTVALUE double acos __P ((double __x));
|
||||
/* Arc sine of X. */
|
||||
extern __CONSTVALUE double asin __P ((double __x));
|
||||
/* Arc tangent of X. */
|
||||
extern __CONSTVALUE double atan __P ((double __x));
|
||||
/* Arc tangent of Y/X. */
|
||||
extern __CONSTVALUE double atan2 __P ((double __y, double __x));
|
||||
|
||||
/* Cosine of X. */
|
||||
extern __CONSTVALUE double cos __P ((double __x));
|
||||
/* Sine of X. */
|
||||
extern __CONSTVALUE double sin __P ((double __x));
|
||||
extern __CONSTVALUE double _sin __P ((double __x));
|
||||
/* Tangent of X. */
|
||||
extern __CONSTVALUE double tan __P ((double __x));
|
||||
|
||||
|
||||
/* Hyperbolic functions. */
|
||||
|
||||
/* Hyperbolic cosine of X. */
|
||||
extern __CONSTVALUE double cosh __P ((double __x));
|
||||
/* Hyperbolic sine of X. */
|
||||
extern __CONSTVALUE double sinh __P ((double __x));
|
||||
/* Hyperbolic tangent of X. */
|
||||
extern __CONSTVALUE double tanh __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* Hyperbolic arc cosine of X. */
|
||||
extern __CONSTVALUE double acosh __P ((double __x));
|
||||
/* Hyperbolic arc sine of X. */
|
||||
extern __CONSTVALUE double asinh __P ((double __x));
|
||||
/* Hyperbolic arc tangent of X. */
|
||||
extern __CONSTVALUE double atanh __P ((double __x));
|
||||
#endif
|
||||
|
||||
/* Exponential and logarithmic functions. */
|
||||
|
||||
/* Exponentional function of X. */
|
||||
extern __CONSTVALUE double exp __P ((double __x));
|
||||
|
||||
/* Break VALUE into a normalized fraction and an integral power of 2. */
|
||||
extern double frexp __P ((double __value, int *__exp));
|
||||
|
||||
/* X times (two to the EXP power). */
|
||||
extern __CONSTVALUE double ldexp __P ((double __x, int __exp));
|
||||
|
||||
/* Natural logarithm of X. */
|
||||
extern __CONSTVALUE double log __P ((double __x));
|
||||
|
||||
/* Base-ten logarithm of X. */
|
||||
extern __CONSTVALUE double log10 __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* Return exp(X) - 1. */
|
||||
extern __CONSTVALUE double __expm1 __P ((double __x));
|
||||
extern __CONSTVALUE double expm1 __P ((double __x));
|
||||
|
||||
/* Return log(1 + X). */
|
||||
extern __CONSTVALUE double log1p __P ((double __x));
|
||||
#endif
|
||||
|
||||
/* Break VALUE into integral and fractional parts. */
|
||||
extern double modf __P ((double __value, double *__iptr));
|
||||
|
||||
|
||||
/* Power functions. */
|
||||
|
||||
/* Return X to the Y power. */
|
||||
extern __CONSTVALUE double pow __P ((double __x, double __y));
|
||||
|
||||
/* Return the square root of X. */
|
||||
extern __CONSTVALUE double sqrt __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* Return the cube root of X. */
|
||||
extern __CONSTVALUE double cbrt __P ((double __x));
|
||||
#endif
|
||||
|
||||
|
||||
/* Nearest integer, absolute value, and remainder functions. */
|
||||
|
||||
/* Smallest integral value not less than X. */
|
||||
extern __CONSTVALUE double ceil __P ((double __x));
|
||||
|
||||
/* Absolute value of X. */
|
||||
extern __CONSTVALUE double fabs __P ((double __x));
|
||||
|
||||
/* Largest integer not greater than X. */
|
||||
extern __CONSTVALUE double floor __P ((double __x));
|
||||
|
||||
/* Floating-point modulo remainder of X/Y. */
|
||||
extern __CONSTVALUE double fmod __P ((double __x, double __y));
|
||||
|
||||
|
||||
/* Return 0 if VALUE is finite or NaN, +1 if it
|
||||
is +Infinity, -1 if it is -Infinity. */
|
||||
extern __CONSTVALUE int __isinf __P ((double __value));
|
||||
|
||||
/* Return nonzero if VALUE is not a number. */
|
||||
extern __CONSTVALUE int __isnan __P ((double __value));
|
||||
|
||||
/* Return nonzero if VALUE is finite and not NaN. */
|
||||
extern __CONSTVALUE int __finite __P ((double __value));
|
||||
#ifdef __OPTIMIZE__
|
||||
#define __finite(value) (!__isinf(value))
|
||||
#endif
|
||||
|
||||
/* Deal with an infinite or NaN result.
|
||||
If ERROR is ERANGE, result is +Inf;
|
||||
if ERROR is - ERANGE, result is -Inf;
|
||||
otherwise result is NaN.
|
||||
This will set `errno' to either ERANGE or EDOM,
|
||||
and may return an infinity or NaN, or may do something else. */
|
||||
extern double __infnan __P ((int __error));
|
||||
|
||||
/* Return X with its signed changed to Y's. */
|
||||
extern __CONSTVALUE double __copysign __P ((double __x, double __y));
|
||||
|
||||
/* Return X times (2 to the Nth power). */
|
||||
extern __CONSTVALUE double __scalb __P ((double __x, int __n));
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
#define __scalb(x, n) ldexp ((x), (n))
|
||||
#endif
|
||||
|
||||
/* Return the remainder of X/Y. */
|
||||
extern __CONSTVALUE double __drem __P ((double __x, double __y));
|
||||
|
||||
/* Return the base 2 signed integral exponent of X. */
|
||||
extern __CONSTVALUE double __logb __P ((double __x));
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* Return the integer nearest X in the direction of the
|
||||
prevailing rounding mode. */
|
||||
extern __CONSTVALUE double __rint __P ((double __x));
|
||||
extern __CONSTVALUE double rint __P ((double __x));
|
||||
|
||||
/* Return `sqrt(X*X + Y*Y)'. */
|
||||
extern __CONSTVALUE double hypot __P ((double __x, double __y));
|
||||
|
||||
struct __cabs_complex
|
||||
{
|
||||
double __x, __y;
|
||||
};
|
||||
|
||||
/* Return `sqrt(X*X + Y*Y)'. */
|
||||
extern __CONSTVALUE double cabs __P ((struct __cabs_complex));
|
||||
|
||||
extern __CONSTVALUE int isinf __P ((double __value));
|
||||
extern __CONSTVALUE int isnan __P ((double __value));
|
||||
extern __CONSTVALUE int finite __P ((double __value));
|
||||
extern __CONSTVALUE double infnan __P ((int __error));
|
||||
extern __CONSTVALUE double copysign __P ((double __x, double __y));
|
||||
extern __CONSTVALUE double scalb __P ((double __x, int __n));
|
||||
extern __CONSTVALUE double drem __P ((double __x, double __y));
|
||||
extern __CONSTVALUE double logb __P ((double __x));
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
#define isinf(value) __isinf(value)
|
||||
#define isnan(value) __isnan(value)
|
||||
#define infnan(error) __infnan(error)
|
||||
#define finite(value) __finite(value)
|
||||
#define copysign(x, y) __copysign((x), (y))
|
||||
#define scalb(x, n) __scalb((x), (n))
|
||||
#define drem(x, y) __drem((x), (y))
|
||||
#define logb(x) __logb(x)
|
||||
#endif /* Optimizing. */
|
||||
|
||||
#endif /* Use misc. */
|
||||
|
||||
|
||||
#if 0
|
||||
/* The "Future Library Directions" section of the
|
||||
ANSI Standard reserves these as `float' and
|
||||
`long double' versions of the above functions. */
|
||||
|
||||
extern __CONSTVALUE float acosf __P ((float __x));
|
||||
extern __CONSTVALUE float asinf __P ((float __x));
|
||||
extern __CONSTVALUE float atanf __P ((float __x));
|
||||
extern __CONSTVALUE float atan2f __P ((float __y, float __x));
|
||||
extern __CONSTVALUE float cosf __P ((float __x));
|
||||
extern __CONSTVALUE float sinf __P ((float __x));
|
||||
extern __CONSTVALUE float tanf __P ((float __x));
|
||||
extern __CONSTVALUE float coshf __P ((float __x));
|
||||
extern __CONSTVALUE float sinhf __P ((float __x));
|
||||
extern __CONSTVALUE float tanhf __P ((float __x));
|
||||
extern __CONSTVALUE float expf __P ((float __x));
|
||||
extern float frexpf __P ((float __value, int *__exp));
|
||||
extern __CONSTVALUE float ldexpf __P ((float __x, int __exp));
|
||||
extern __CONSTVALUE float logf __P ((float __x));
|
||||
extern __CONSTVALUE float log10f __P ((float __x));
|
||||
extern float modff __P ((float __value, float *__iptr));
|
||||
extern __CONSTVALUE float powf __P ((float __x, float __y));
|
||||
extern __CONSTVALUE float sqrtf __P ((float __x));
|
||||
extern __CONSTVALUE float ceilf __P ((float __x));
|
||||
extern __CONSTVALUE float fabsf __P ((float __x));
|
||||
extern __CONSTVALUE float floorf __P ((float __x));
|
||||
extern __CONSTVALUE float fmodf __P ((float __x, float __y));
|
||||
|
||||
extern __CONSTVALUE __long_double_t acosl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t asinl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t atanl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t atan2l __P ((__long_double_t __y, __long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t cosl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t sinl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t tanl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t coshl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t sinhl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t tanhl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t expl __P ((__long_double_t __x));
|
||||
extern __long_double_t frexpl __P ((__long_double_t __value, int *__exp));
|
||||
extern __CONSTVALUE __long_double_t ldexpl __P ((__long_double_t __x, int __exp));
|
||||
extern __CONSTVALUE __long_double_t logl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t log10l __P ((__long_double_t __x));
|
||||
extern __long_double_t modfl __P ((__long_double_t __value, __long_double_t * __ip));
|
||||
extern __CONSTVALUE __long_double_t powl __P ((__long_double_t __x, __long_double_t __y));
|
||||
extern __CONSTVALUE __long_double_t sqrtl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t ceill __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t fabsl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t floorl __P ((__long_double_t __x));
|
||||
extern __CONSTVALUE __long_double_t fmodl __P ((__long_double_t __x, __long_double_t __y));
|
||||
#endif /* 0 */
|
||||
|
||||
/* Get machine-dependent inline versions (if there are any). */
|
||||
/*
|
||||
#include <__math.h>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
|
||||
#endif /* math.h */
|
||||
|
|
|
@ -1,165 +1,165 @@
|
|||
/* memcopy.h -- definitions for memory copy functions. Generic C version.
|
||||
Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
Contributed by Torbjorn Granlund (tege@sics.se).
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/* The strategy of the memory functions is:
|
||||
|
||||
1. Copy bytes until the destination pointer is aligned.
|
||||
|
||||
2. Copy words in unrolled loops. If the source and destination
|
||||
are not aligned in the same way, use word memory operations,
|
||||
but shift and merge two read words before writing.
|
||||
|
||||
3. Copy the few remaining bytes.
|
||||
|
||||
This is fast on processors that have at least 10 registers for
|
||||
allocation by GCC, and that can access memory at reg+const in one
|
||||
instruction.
|
||||
|
||||
I made an "exhaustive" test of this memmove when I wrote it,
|
||||
exhaustive in the sense that I tried all alignment and length
|
||||
combinations, with and without overlap. */
|
||||
|
||||
#ifndef _MEMCPY_H_
|
||||
#define _MEMCPY_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <endian.h>
|
||||
|
||||
/* The macros defined in this file are:
|
||||
|
||||
BYTE_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_to_copy)
|
||||
|
||||
BYTE_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_to_copy)
|
||||
|
||||
WORD_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_remaining, nbytes_to_copy)
|
||||
|
||||
WORD_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_remaining, nbytes_to_copy)
|
||||
|
||||
MERGE(old_word, sh_1, new_word, sh_2)
|
||||
[I fail to understand. I feel stupid. --roland]
|
||||
*/
|
||||
|
||||
/* Type to use for aligned memory operations.
|
||||
This should normally be the biggest type supported by a single load
|
||||
and store. */
|
||||
#define op_t unsigned long int
|
||||
#define OPSIZ (sizeof(op_t))
|
||||
|
||||
|
||||
/* Type to use for unaligned operations. */
|
||||
typedef unsigned char byte;
|
||||
|
||||
/* Optimal type for storing bytes in registers. */
|
||||
#define reg_char char
|
||||
|
||||
#undef TESTME
|
||||
|
||||
#ifndef MERGE
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
//#define TESTME
|
||||
#define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#ifndef TESTME
|
||||
#define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
|
||||
#endif
|
||||
#endif
|
||||
#endif //MERGE
|
||||
|
||||
|
||||
/* Copy exactly NBYTES bytes from SRC_BP to DST_BP,
|
||||
without any assumptions about alignment of the pointers. */
|
||||
#define BYTE_COPY_FWD(dst_bp, src_bp, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
size_t __nbytes = (nbytes); \
|
||||
while (__nbytes > 0) \
|
||||
{ \
|
||||
byte __x = ((byte *) src_bp)[0]; \
|
||||
src_bp += 1; \
|
||||
__nbytes -= 1; \
|
||||
((byte *) dst_bp)[0] = __x; \
|
||||
dst_bp += 1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Copy exactly NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR,
|
||||
beginning at the bytes right before the pointers and continuing towards
|
||||
smaller addresses. Don't assume anything about alignment of the
|
||||
pointers. */
|
||||
#define BYTE_COPY_BWD(dst_ep, src_ep, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
size_t __nbytes = (nbytes); \
|
||||
while (__nbytes > 0) \
|
||||
{ \
|
||||
byte __x; \
|
||||
src_ep -= 1; \
|
||||
__x = ((byte *) src_ep)[0]; \
|
||||
dst_ep -= 1; \
|
||||
__nbytes -= 1; \
|
||||
((byte *) dst_ep)[0] = __x; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Copy *up to* NBYTES bytes from SRC_BP to DST_BP, with
|
||||
the assumption that DST_BP is aligned on an OPSIZ multiple. If
|
||||
not all bytes could be easily copied, store remaining number of bytes
|
||||
in NBYTES_LEFT, otherwise store 0. */
|
||||
extern void _wordcopy_fwd_aligned __P ((long int, long int, size_t));
|
||||
extern void _wordcopy_fwd_dest_aligned __P ((long int, long int, size_t));
|
||||
#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
if (src_bp % OPSIZ == 0) \
|
||||
_wordcopy_fwd_aligned (dst_bp, src_bp, (nbytes) / OPSIZ); \
|
||||
else \
|
||||
_wordcopy_fwd_dest_aligned (dst_bp, src_bp, (nbytes) / OPSIZ); \
|
||||
src_bp += (nbytes) & NEGU32(OPSIZ); \
|
||||
dst_bp += (nbytes) & NEGU32(OPSIZ); \
|
||||
(nbytes_left) = (nbytes) % OPSIZ; \
|
||||
} while (0)
|
||||
|
||||
/* Copy *up to* NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR,
|
||||
beginning at the words (of type op_t) right before the pointers and
|
||||
continuing towards smaller addresses. May take advantage of that
|
||||
DST_END_PTR is aligned on an OPSIZ multiple. If not all bytes could be
|
||||
easily copied, store remaining number of bytes in NBYTES_REMAINING,
|
||||
otherwise store 0. */
|
||||
extern void _wordcopy_bwd_aligned __P ((long int, long int, size_t));
|
||||
extern void _wordcopy_bwd_dest_aligned __P ((long int, long int, size_t));
|
||||
#define WORD_COPY_BWD(dst_ep, src_ep, nbytes_left, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
if (src_ep % OPSIZ == 0) \
|
||||
_wordcopy_bwd_aligned (dst_ep, src_ep, (nbytes) / OPSIZ); \
|
||||
else \
|
||||
_wordcopy_bwd_dest_aligned (dst_ep, src_ep, (nbytes) / OPSIZ); \
|
||||
src_ep -= (nbytes) & NEGU32(OPSIZ); \
|
||||
dst_ep -= (nbytes) & NEGU32(OPSIZ); \
|
||||
(nbytes_left) = (nbytes) % OPSIZ; \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Threshold value for when to enter the unrolled loops. */
|
||||
#define OP_T_THRES 16
|
||||
|
||||
#endif //_MEMCPY_H_
|
||||
/* memcopy.h -- definitions for memory copy functions. Generic C version.
|
||||
Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
Contributed by Torbjorn Granlund (tege@sics.se).
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/* The strategy of the memory functions is:
|
||||
|
||||
1. Copy bytes until the destination pointer is aligned.
|
||||
|
||||
2. Copy words in unrolled loops. If the source and destination
|
||||
are not aligned in the same way, use word memory operations,
|
||||
but shift and merge two read words before writing.
|
||||
|
||||
3. Copy the few remaining bytes.
|
||||
|
||||
This is fast on processors that have at least 10 registers for
|
||||
allocation by GCC, and that can access memory at reg+const in one
|
||||
instruction.
|
||||
|
||||
I made an "exhaustive" test of this memmove when I wrote it,
|
||||
exhaustive in the sense that I tried all alignment and length
|
||||
combinations, with and without overlap. */
|
||||
|
||||
#ifndef _MEMCPY_H_
|
||||
#define _MEMCPY_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <endian.h>
|
||||
|
||||
/* The macros defined in this file are:
|
||||
|
||||
BYTE_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_to_copy)
|
||||
|
||||
BYTE_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_to_copy)
|
||||
|
||||
WORD_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_remaining, nbytes_to_copy)
|
||||
|
||||
WORD_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_remaining, nbytes_to_copy)
|
||||
|
||||
MERGE(old_word, sh_1, new_word, sh_2)
|
||||
[I fail to understand. I feel stupid. --roland]
|
||||
*/
|
||||
|
||||
/* Type to use for aligned memory operations.
|
||||
This should normally be the biggest type supported by a single load
|
||||
and store. */
|
||||
#define op_t unsigned long int
|
||||
#define OPSIZ (sizeof(op_t))
|
||||
|
||||
|
||||
/* Type to use for unaligned operations. */
|
||||
typedef unsigned char byte;
|
||||
|
||||
/* Optimal type for storing bytes in registers. */
|
||||
#define reg_char char
|
||||
|
||||
#undef TESTME
|
||||
|
||||
#ifndef MERGE
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
//#define TESTME
|
||||
#define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#ifndef TESTME
|
||||
#define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
|
||||
#endif
|
||||
#endif
|
||||
#endif //MERGE
|
||||
|
||||
|
||||
/* Copy exactly NBYTES bytes from SRC_BP to DST_BP,
|
||||
without any assumptions about alignment of the pointers. */
|
||||
#define BYTE_COPY_FWD(dst_bp, src_bp, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
size_t __nbytes = (nbytes); \
|
||||
while (__nbytes > 0) \
|
||||
{ \
|
||||
byte __x = ((byte *) src_bp)[0]; \
|
||||
src_bp += 1; \
|
||||
__nbytes -= 1; \
|
||||
((byte *) dst_bp)[0] = __x; \
|
||||
dst_bp += 1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Copy exactly NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR,
|
||||
beginning at the bytes right before the pointers and continuing towards
|
||||
smaller addresses. Don't assume anything about alignment of the
|
||||
pointers. */
|
||||
#define BYTE_COPY_BWD(dst_ep, src_ep, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
size_t __nbytes = (nbytes); \
|
||||
while (__nbytes > 0) \
|
||||
{ \
|
||||
byte __x; \
|
||||
src_ep -= 1; \
|
||||
__x = ((byte *) src_ep)[0]; \
|
||||
dst_ep -= 1; \
|
||||
__nbytes -= 1; \
|
||||
((byte *) dst_ep)[0] = __x; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Copy *up to* NBYTES bytes from SRC_BP to DST_BP, with
|
||||
the assumption that DST_BP is aligned on an OPSIZ multiple. If
|
||||
not all bytes could be easily copied, store remaining number of bytes
|
||||
in NBYTES_LEFT, otherwise store 0. */
|
||||
extern void _wordcopy_fwd_aligned __P ((long int, long int, size_t));
|
||||
extern void _wordcopy_fwd_dest_aligned __P ((long int, long int, size_t));
|
||||
#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
if (src_bp % OPSIZ == 0) \
|
||||
_wordcopy_fwd_aligned (dst_bp, src_bp, (nbytes) / OPSIZ); \
|
||||
else \
|
||||
_wordcopy_fwd_dest_aligned (dst_bp, src_bp, (nbytes) / OPSIZ); \
|
||||
src_bp += (nbytes) & NEGU32(OPSIZ); \
|
||||
dst_bp += (nbytes) & NEGU32(OPSIZ); \
|
||||
(nbytes_left) = (nbytes) % OPSIZ; \
|
||||
} while (0)
|
||||
|
||||
/* Copy *up to* NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR,
|
||||
beginning at the words (of type op_t) right before the pointers and
|
||||
continuing towards smaller addresses. May take advantage of that
|
||||
DST_END_PTR is aligned on an OPSIZ multiple. If not all bytes could be
|
||||
easily copied, store remaining number of bytes in NBYTES_REMAINING,
|
||||
otherwise store 0. */
|
||||
extern void _wordcopy_bwd_aligned __P ((long int, long int, size_t));
|
||||
extern void _wordcopy_bwd_dest_aligned __P ((long int, long int, size_t));
|
||||
#define WORD_COPY_BWD(dst_ep, src_ep, nbytes_left, nbytes) \
|
||||
do \
|
||||
{ \
|
||||
if (src_ep % OPSIZ == 0) \
|
||||
_wordcopy_bwd_aligned (dst_ep, src_ep, (nbytes) / OPSIZ); \
|
||||
else \
|
||||
_wordcopy_bwd_dest_aligned (dst_ep, src_ep, (nbytes) / OPSIZ); \
|
||||
src_ep -= (nbytes) & NEGU32(OPSIZ); \
|
||||
dst_ep -= (nbytes) & NEGU32(OPSIZ); \
|
||||
(nbytes_left) = (nbytes) % OPSIZ; \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Threshold value for when to enter the unrolled loops. */
|
||||
#define OP_T_THRES 16
|
||||
|
||||
#endif //_MEMCPY_H_
|
||||
|
|
|
@ -1,226 +1,226 @@
|
|||
/* Copyright (C) 1992,93,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_CDEFS_H
|
||||
#define _SYS_CDEFS_H 1
|
||||
|
||||
/* We are almost always included from features.h. */
|
||||
#ifndef _FEATURES_H
|
||||
# include <features.h>
|
||||
#endif
|
||||
|
||||
/* The GNU libc does not support any K&R compilers or the traditional mode
|
||||
of ISO C compilers anymore. Check for some of the combinations not
|
||||
anymore supported. */
|
||||
#if defined __GNUC__ && !defined __STDC__
|
||||
# error "You need a ISO C conforming compiler to use the glibc headers"
|
||||
#endif
|
||||
|
||||
/* Some user header file might have defined this before. */
|
||||
#undef __P
|
||||
#undef __PMT
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
/* GCC can always grok prototypes. For C++ programs we add throw()
|
||||
to help it optimize the function calls. But this works only with
|
||||
gcc 2.8.x and egcs. */
|
||||
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
||||
# define __THROW throw ()
|
||||
# else
|
||||
# define __THROW
|
||||
# endif
|
||||
# define __P(args) args __THROW
|
||||
/* This macro will be used for functions which might take C++ callback
|
||||
functions. */
|
||||
# define __PMT(args) args
|
||||
|
||||
#else /* Not GCC. */
|
||||
|
||||
# define __inline /* No inline functions. */
|
||||
|
||||
# define __THROW
|
||||
# define __P(args) args
|
||||
# define __PMT(args) args
|
||||
|
||||
# define __const const
|
||||
# define __signed signed
|
||||
# define __volatile volatile
|
||||
|
||||
#endif /* GCC. */
|
||||
|
||||
/* For these things, GCC behaves the ANSI way normally,
|
||||
and the non-ANSI way under -traditional. */
|
||||
|
||||
#define __CONCAT(x,y) x ## y
|
||||
#define __STRING(x) #x
|
||||
|
||||
/* This is not a typedef so `const __ptr_t' does the right thing. */
|
||||
#define __ptr_t void *
|
||||
#define __long_double_t long double
|
||||
|
||||
|
||||
/* C++ needs to know that types and declarations are C, not C++. */
|
||||
#ifdef __cplusplus
|
||||
# define __BEGIN_DECLS extern "C" {
|
||||
# define __END_DECLS }
|
||||
#else
|
||||
# define __BEGIN_DECLS
|
||||
# define __END_DECLS
|
||||
#endif
|
||||
|
||||
|
||||
/* Support for bounded pointers. */
|
||||
#ifndef __BOUNDED_POINTERS__
|
||||
# define __bounded /* nothing */
|
||||
# define __unbounded /* nothing */
|
||||
# define __ptrvalue /* nothing */
|
||||
#endif
|
||||
|
||||
|
||||
/* Support for flexible arrays. */
|
||||
#if __GNUC_PREREQ (2,97)
|
||||
/* GCC 2.97 supports C99 flexible array members. */
|
||||
# define __flexarr []
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# define __flexarr [0]
|
||||
# else
|
||||
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
||||
# define __flexarr []
|
||||
# else
|
||||
/* Some other non-C99 compiler. Approximate with [1]. */
|
||||
# define __flexarr [1]
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* __asm__ ("xyz") is used throughout the headers to rename functions
|
||||
at the assembly language level. This is wrapped by the __REDIRECT
|
||||
macro, in order to support compilers that can do this some other
|
||||
way. When compilers don't support asm-names at all, we have to do
|
||||
preprocessor tricks instead (which don't have exactly the right
|
||||
semantics, but it's the best we can do).
|
||||
|
||||
Example:
|
||||
int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 2
|
||||
|
||||
# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
|
||||
# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
|
||||
# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
|
||||
|
||||
/*
|
||||
#elif __SOME_OTHER_COMPILER__
|
||||
|
||||
# define __REDIRECT(name, proto, alias) name proto; \
|
||||
_Pragma("let " #name " = " #alias)
|
||||
*/
|
||||
#endif
|
||||
|
||||
/* GCC has various useful declarations that can be made with the
|
||||
`__attribute__' syntax. All of the ways we use this do fine if
|
||||
they are omitted for compilers that don't understand it. */
|
||||
#if !defined __GNUC__ || __GNUC__ < 2
|
||||
# define __attribute__(xyz) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.96 development the `malloc' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings. */
|
||||
#if __GNUC_PREREQ (2,96)
|
||||
# define __attribute_malloc__ __attribute__ ((__malloc__))
|
||||
#else
|
||||
# define __attribute_malloc__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.96 development the `pure' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings. */
|
||||
#if __GNUC_PREREQ (2,96)
|
||||
# define __attribute_pure__ __attribute__ ((__pure__))
|
||||
#else
|
||||
# define __attribute_pure__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 3.1 development the `used' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings. */
|
||||
#if __GNUC_PREREQ (3,1)
|
||||
# define __attribute_used__ __attribute__ ((__used__))
|
||||
#else
|
||||
# define __attribute_used__ __attribute__ ((__unused__))
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.8 development the `format_arg' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings.
|
||||
If several `format_arg' attributes are given for the same function, in
|
||||
gcc-3.0 and older, all but the last one are ignored. In newer gccs,
|
||||
all designated arguments are considered. */
|
||||
#if __GNUC_PREREQ (2,8)
|
||||
# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
|
||||
#else
|
||||
# define __attribute_format_arg__(x) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.97 development the `strfmon' format
|
||||
attribute for functions was introduced. We don't want to use it
|
||||
unconditionally (although this would be possible) since it
|
||||
generates warnings. */
|
||||
#if __GNUC_PREREQ (2,97)
|
||||
# define __attribute_format_strfmon__(a,b) \
|
||||
__attribute__ ((__format__ (__strfmon__, a, b)))
|
||||
#else
|
||||
# define __attribute_format_strfmon__(a,b) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* It is possible to compile containing GCC extensions even if GCC is
|
||||
run in pedantic mode if the uses are carefully marked using the
|
||||
`__extension__' keyword. But this is not generally available before
|
||||
version 2.8. */
|
||||
#if !__GNUC_PREREQ (2,8)
|
||||
# define __extension__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* __restrict is known in EGCS 1.2 and above. */
|
||||
#if !__GNUC_PREREQ (2,92)
|
||||
# define __restrict /* Ignore */
|
||||
#endif
|
||||
|
||||
/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is
|
||||
array_name[restrict]
|
||||
GCC 3.1 supports this. */
|
||||
#if __GNUC_PREREQ (3,1) && !defined __GNUG__
|
||||
# define __restrict_arr __restrict
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# define __restrict_arr /* Not supported in old GCC. */
|
||||
# else
|
||||
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
||||
# define __restrict_arr restrict
|
||||
# else
|
||||
/* Some other non-C99 compiler. */
|
||||
# define __restrict_arr /* Not supported. */
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* sys/cdefs.h */
|
||||
/* Copyright (C) 1992,93,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_CDEFS_H
|
||||
#define _SYS_CDEFS_H 1
|
||||
|
||||
/* We are almost always included from features.h. */
|
||||
#ifndef _FEATURES_H
|
||||
# include <features.h>
|
||||
#endif
|
||||
|
||||
/* The GNU libc does not support any K&R compilers or the traditional mode
|
||||
of ISO C compilers anymore. Check for some of the combinations not
|
||||
anymore supported. */
|
||||
#if defined __GNUC__ && !defined __STDC__
|
||||
# error "You need a ISO C conforming compiler to use the glibc headers"
|
||||
#endif
|
||||
|
||||
/* Some user header file might have defined this before. */
|
||||
#undef __P
|
||||
#undef __PMT
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
/* GCC can always grok prototypes. For C++ programs we add throw()
|
||||
to help it optimize the function calls. But this works only with
|
||||
gcc 2.8.x and egcs. */
|
||||
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
||||
# define __THROW throw ()
|
||||
# else
|
||||
# define __THROW
|
||||
# endif
|
||||
# define __P(args) args __THROW
|
||||
/* This macro will be used for functions which might take C++ callback
|
||||
functions. */
|
||||
# define __PMT(args) args
|
||||
|
||||
#else /* Not GCC. */
|
||||
|
||||
# define __inline /* No inline functions. */
|
||||
|
||||
# define __THROW
|
||||
# define __P(args) args
|
||||
# define __PMT(args) args
|
||||
|
||||
# define __const const
|
||||
# define __signed signed
|
||||
# define __volatile volatile
|
||||
|
||||
#endif /* GCC. */
|
||||
|
||||
/* For these things, GCC behaves the ANSI way normally,
|
||||
and the non-ANSI way under -traditional. */
|
||||
|
||||
#define __CONCAT(x,y) x ## y
|
||||
#define __STRING(x) #x
|
||||
|
||||
/* This is not a typedef so `const __ptr_t' does the right thing. */
|
||||
#define __ptr_t void *
|
||||
#define __long_double_t long double
|
||||
|
||||
|
||||
/* C++ needs to know that types and declarations are C, not C++. */
|
||||
#ifdef __cplusplus
|
||||
# define __BEGIN_DECLS extern "C" {
|
||||
# define __END_DECLS }
|
||||
#else
|
||||
# define __BEGIN_DECLS
|
||||
# define __END_DECLS
|
||||
#endif
|
||||
|
||||
|
||||
/* Support for bounded pointers. */
|
||||
#ifndef __BOUNDED_POINTERS__
|
||||
# define __bounded /* nothing */
|
||||
# define __unbounded /* nothing */
|
||||
# define __ptrvalue /* nothing */
|
||||
#endif
|
||||
|
||||
|
||||
/* Support for flexible arrays. */
|
||||
#if __GNUC_PREREQ (2,97)
|
||||
/* GCC 2.97 supports C99 flexible array members. */
|
||||
# define __flexarr []
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# define __flexarr [0]
|
||||
# else
|
||||
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
||||
# define __flexarr []
|
||||
# else
|
||||
/* Some other non-C99 compiler. Approximate with [1]. */
|
||||
# define __flexarr [1]
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* __asm__ ("xyz") is used throughout the headers to rename functions
|
||||
at the assembly language level. This is wrapped by the __REDIRECT
|
||||
macro, in order to support compilers that can do this some other
|
||||
way. When compilers don't support asm-names at all, we have to do
|
||||
preprocessor tricks instead (which don't have exactly the right
|
||||
semantics, but it's the best we can do).
|
||||
|
||||
Example:
|
||||
int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 2
|
||||
|
||||
# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
|
||||
# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
|
||||
# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
|
||||
|
||||
/*
|
||||
#elif __SOME_OTHER_COMPILER__
|
||||
|
||||
# define __REDIRECT(name, proto, alias) name proto; \
|
||||
_Pragma("let " #name " = " #alias)
|
||||
*/
|
||||
#endif
|
||||
|
||||
/* GCC has various useful declarations that can be made with the
|
||||
`__attribute__' syntax. All of the ways we use this do fine if
|
||||
they are omitted for compilers that don't understand it. */
|
||||
#if !defined __GNUC__ || __GNUC__ < 2
|
||||
# define __attribute__(xyz) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.96 development the `malloc' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings. */
|
||||
#if __GNUC_PREREQ (2,96)
|
||||
# define __attribute_malloc__ __attribute__ ((__malloc__))
|
||||
#else
|
||||
# define __attribute_malloc__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.96 development the `pure' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings. */
|
||||
#if __GNUC_PREREQ (2,96)
|
||||
# define __attribute_pure__ __attribute__ ((__pure__))
|
||||
#else
|
||||
# define __attribute_pure__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 3.1 development the `used' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings. */
|
||||
#if __GNUC_PREREQ (3,1)
|
||||
# define __attribute_used__ __attribute__ ((__used__))
|
||||
#else
|
||||
# define __attribute_used__ __attribute__ ((__unused__))
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.8 development the `format_arg' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings.
|
||||
If several `format_arg' attributes are given for the same function, in
|
||||
gcc-3.0 and older, all but the last one are ignored. In newer gccs,
|
||||
all designated arguments are considered. */
|
||||
#if __GNUC_PREREQ (2,8)
|
||||
# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
|
||||
#else
|
||||
# define __attribute_format_arg__(x) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.97 development the `strfmon' format
|
||||
attribute for functions was introduced. We don't want to use it
|
||||
unconditionally (although this would be possible) since it
|
||||
generates warnings. */
|
||||
#if __GNUC_PREREQ (2,97)
|
||||
# define __attribute_format_strfmon__(a,b) \
|
||||
__attribute__ ((__format__ (__strfmon__, a, b)))
|
||||
#else
|
||||
# define __attribute_format_strfmon__(a,b) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* It is possible to compile containing GCC extensions even if GCC is
|
||||
run in pedantic mode if the uses are carefully marked using the
|
||||
`__extension__' keyword. But this is not generally available before
|
||||
version 2.8. */
|
||||
#if !__GNUC_PREREQ (2,8)
|
||||
# define __extension__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* __restrict is known in EGCS 1.2 and above. */
|
||||
#if !__GNUC_PREREQ (2,92)
|
||||
# define __restrict /* Ignore */
|
||||
#endif
|
||||
|
||||
/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is
|
||||
array_name[restrict]
|
||||
GCC 3.1 supports this. */
|
||||
#if __GNUC_PREREQ (3,1) && !defined __GNUG__
|
||||
# define __restrict_arr __restrict
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# define __restrict_arr /* Not supported in old GCC. */
|
||||
# else
|
||||
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
||||
# define __restrict_arr restrict
|
||||
# else
|
||||
/* Some other non-C99 compiler. */
|
||||
# define __restrict_arr /* Not supported. */
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* sys/cdefs.h */
|
||||
|
|
|
@ -1,88 +1,88 @@
|
|||
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
|
||||
#ifndef __dj_include_stdarg_h_
|
||||
#define __dj_include_stdarg_h_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(push,8)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#ifdef _M_ALPHA
|
||||
typedef struct {
|
||||
char *a0; /* pointer to first homed integer argument */
|
||||
int offset; /* byte offset of next parameter */
|
||||
} va_list;
|
||||
#else
|
||||
typedef char * va_list;
|
||||
#endif
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
#ifndef __dj_ENFORCE_ANSI_FREESTANDING
|
||||
|
||||
#ifdef __dj_include_varargs_h_
|
||||
#error stdarg.h and varargs.h are mutually exclusive
|
||||
#endif
|
||||
|
||||
#include <sys/djtypes.h>
|
||||
|
||||
__DJ_va_list
|
||||
#undef __DJ_va_list
|
||||
#define __DJ_va_list
|
||||
|
||||
#define __dj_va_rounded_size(T) \
|
||||
(((sizeof (T) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
|
||||
|
||||
#define va_arg(ap, T) \
|
||||
(ap = (va_list) ((char *) (ap) + __dj_va_rounded_size (T)), \
|
||||
*((T *) (void *) ((char *) (ap) - __dj_va_rounded_size (T))))
|
||||
|
||||
#define va_end(ap)
|
||||
|
||||
#define va_start(ap, last_arg) \
|
||||
(ap = ((va_list) __builtin_next_arg (last_arg)))
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
|
||||
#ifndef _POSIX_SOURCE
|
||||
|
||||
#endif // !_POSIX_SOURCE
|
||||
#endif // !__STRICT_ANSI__
|
||||
#endif // !__dj_ENFORCE_ANSI_FREESTANDING
|
||||
|
||||
#ifndef __dj_ENFORCE_FUNCTION_CALLS
|
||||
#endif //!__dj_ENFORCE_FUNCTION_CALLS
|
||||
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(pop)
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !__dj_include_stdarg_h_ */
|
||||
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
|
||||
#ifndef __dj_include_stdarg_h_
|
||||
#define __dj_include_stdarg_h_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(push,8)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#ifdef _M_ALPHA
|
||||
typedef struct {
|
||||
char *a0; /* pointer to first homed integer argument */
|
||||
int offset; /* byte offset of next parameter */
|
||||
} va_list;
|
||||
#else
|
||||
typedef char * va_list;
|
||||
#endif
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
#ifndef __dj_ENFORCE_ANSI_FREESTANDING
|
||||
|
||||
#ifdef __dj_include_varargs_h_
|
||||
#error stdarg.h and varargs.h are mutually exclusive
|
||||
#endif
|
||||
|
||||
#include <sys/djtypes.h>
|
||||
|
||||
__DJ_va_list
|
||||
#undef __DJ_va_list
|
||||
#define __DJ_va_list
|
||||
|
||||
#define __dj_va_rounded_size(T) \
|
||||
(((sizeof (T) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
|
||||
|
||||
#define va_arg(ap, T) \
|
||||
(ap = (va_list) ((char *) (ap) + __dj_va_rounded_size (T)), \
|
||||
*((T *) (void *) ((char *) (ap) - __dj_va_rounded_size (T))))
|
||||
|
||||
#define va_end(ap)
|
||||
|
||||
#define va_start(ap, last_arg) \
|
||||
(ap = ((va_list) __builtin_next_arg (last_arg)))
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
|
||||
#ifndef _POSIX_SOURCE
|
||||
|
||||
#endif // !_POSIX_SOURCE
|
||||
#endif // !__STRICT_ANSI__
|
||||
#endif // !__dj_ENFORCE_ANSI_FREESTANDING
|
||||
|
||||
#ifndef __dj_ENFORCE_FUNCTION_CALLS
|
||||
#endif //!__dj_ENFORCE_FUNCTION_CALLS
|
||||
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(pop)
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !__dj_include_stdarg_h_ */
|
||||
|
|
|
@ -1,330 +1,330 @@
|
|||
#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
|
||||
&& !defined(__STDDEF_H__)) \
|
||||
|| defined(__need_wchar_t) || defined(__need_size_t) \
|
||||
|| defined(__need_ptrdiff_t) || defined(__need_NULL) \
|
||||
|| defined(__need_wint_t)
|
||||
|
||||
/* Any one of these symbols __need_* means that GNU libc
|
||||
wants us just to define one data type. So don't define
|
||||
the symbols that indicate this file's entire job has been done. */
|
||||
#if (!defined(__need_wchar_t) && !defined(__need_size_t) \
|
||||
&& !defined(__need_ptrdiff_t) && !defined(__need_NULL) \
|
||||
&& !defined(__need_wint_t))
|
||||
#define _STDDEF_H
|
||||
#define _STDDEF_H_
|
||||
/* snaroff@next.com says the NeXT needs this. */
|
||||
#define _ANSI_STDDEF_H
|
||||
/* Irix 5.1 needs this. */
|
||||
#define __STDDEF_H__
|
||||
#endif
|
||||
|
||||
#ifndef __sys_stdtypes_h
|
||||
/* This avoids lossage on SunOS but only if stdtypes.h comes first.
|
||||
There's no way to win with the other order! Sun lossage. */
|
||||
|
||||
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
|
||||
one less case to deal with in the following. */
|
||||
#if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__)
|
||||
#include <machine/ansi.h>
|
||||
#endif
|
||||
|
||||
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
|
||||
defined if the corresponding type is *not* defined.
|
||||
FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_ */
|
||||
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_)
|
||||
#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
|
||||
#define _SIZE_T_
|
||||
#endif
|
||||
#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
|
||||
#define _PTRDIFF_T_
|
||||
#endif
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_. */
|
||||
#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
|
||||
#ifndef _BSD_WCHAR_T_
|
||||
#define _WCHAR_T
|
||||
#endif
|
||||
#endif
|
||||
/* Undef _FOO_T_ if we are supposed to define foo_t. */
|
||||
#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#if defined (__need_size_t) || defined (_STDDEF_H_)
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#if defined (__need_wchar_t) || defined (_STDDEF_H_)
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */
|
||||
|
||||
/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
|
||||
Just ignore it. */
|
||||
#if defined (__sequent__) && defined (_PTRDIFF_T_)
|
||||
#undef _PTRDIFF_T_
|
||||
#endif
|
||||
|
||||
/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
|
||||
_TYPE_size_t which will typedef size_t. fixincludes patched the
|
||||
vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
|
||||
not defined, and so that defining this macro defines _GCC_SIZE_T.
|
||||
If we find that the macros are still defined at this point, we must
|
||||
invoke them so that the type is defined as expected. */
|
||||
#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
|
||||
_TYPE_ptrdiff_t;
|
||||
#undef _TYPE_ptrdiff_t
|
||||
#endif
|
||||
#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
|
||||
_TYPE_size_t;
|
||||
#undef _TYPE_size_t
|
||||
#endif
|
||||
#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
|
||||
_TYPE_wchar_t;
|
||||
#undef _TYPE_wchar_t
|
||||
#endif
|
||||
|
||||
/* In case nobody has defined these types, but we aren't running under
|
||||
GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
|
||||
__WCHAR_TYPE__ have reasonable values. This can happen if the
|
||||
parts of GCC is compiled by an older compiler, that actually
|
||||
include gstddef.h, such as collect2. */
|
||||
|
||||
/* Signed type of difference of two pointers. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
|
||||
#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */
|
||||
#ifndef _T_PTRDIFF_
|
||||
#ifndef _T_PTRDIFF
|
||||
#ifndef __PTRDIFF_T
|
||||
#ifndef _PTRDIFF_T_
|
||||
#ifndef _BSD_PTRDIFF_T_
|
||||
#ifndef ___int_ptrdiff_t_h
|
||||
#ifndef _GCC_PTRDIFF_T
|
||||
#define _PTRDIFF_T
|
||||
#define _T_PTRDIFF_
|
||||
#define _T_PTRDIFF
|
||||
#define __PTRDIFF_T
|
||||
#define _PTRDIFF_T_
|
||||
#define _BSD_PTRDIFF_T_
|
||||
#define ___int_ptrdiff_t_h
|
||||
#define _GCC_PTRDIFF_T
|
||||
#ifndef __PTRDIFF_TYPE__
|
||||
#define __PTRDIFF_TYPE__ long int
|
||||
#endif
|
||||
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
#endif /* _GCC_PTRDIFF_T */
|
||||
#endif /* ___int_ptrdiff_t_h */
|
||||
#endif /* _BSD_PTRDIFF_T_ */
|
||||
#endif /* _PTRDIFF_T_ */
|
||||
#endif /* __PTRDIFF_T */
|
||||
#endif /* _T_PTRDIFF */
|
||||
#endif /* _T_PTRDIFF_ */
|
||||
#endif /* _PTRDIFF_T */
|
||||
|
||||
/* If this symbol has done its job, get rid of it. */
|
||||
#undef __need_ptrdiff_t
|
||||
|
||||
#endif /* _STDDEF_H or __need_ptrdiff_t. */
|
||||
|
||||
/* Unsigned type of `sizeof' something. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_size_t)
|
||||
#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
|
||||
#ifndef _SYS_SIZE_T_H
|
||||
#ifndef _T_SIZE_
|
||||
#ifndef _T_SIZE
|
||||
#ifndef __SIZE_T_
|
||||
#ifndef _SIZE_T_
|
||||
#ifndef _BSD_SIZE_T_
|
||||
#ifndef _SIZE_T_DEFINED_
|
||||
#ifndef _SIZE_T_DEFINED
|
||||
#ifndef ___int_size_t_h
|
||||
#ifndef _GCC_SIZE_T
|
||||
#ifndef _SIZET_
|
||||
#ifndef __size_t
|
||||
#define _SIZE_T
|
||||
#define _SYS_SIZE_T_H
|
||||
#define _T_SIZE_
|
||||
#define _T_SIZE
|
||||
#define __SIZE_T_
|
||||
#define _SIZE_T_
|
||||
#define _BSD_SIZE_T_
|
||||
#define _SIZE_T_DEFINED_
|
||||
#define _SIZE_T_DEFINED
|
||||
#define ___int_size_t_h
|
||||
#define _GCC_SIZE_T
|
||||
#define _SIZET_
|
||||
#define __size_t
|
||||
#ifndef __SIZE_TYPE__
|
||||
#define __SIZE_TYPE__ unsigned int
|
||||
#endif
|
||||
#if !(defined (__GNUG__) && defined (size_t))
|
||||
#ifndef _DONESIZET
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
#define _DONESIZET
|
||||
#endif
|
||||
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||
#endif /* __size_t */
|
||||
#endif /* _SIZET_ */
|
||||
#endif /* _GCC_SIZE_T */
|
||||
#endif /* ___int_size_t_h */
|
||||
#endif /* _SIZE_T_DEFINED */
|
||||
#endif /* _SIZE_T_DEFINED_ */
|
||||
#endif /* _BSD_SIZE_T_ */
|
||||
#endif /* _SIZE_T_ */
|
||||
#endif /* __SIZE_T */
|
||||
#endif /* _T_SIZE */
|
||||
#endif /* _T_SIZE_ */
|
||||
#endif /* _SYS_SIZE_T_H */
|
||||
#endif /* _SIZE_T */
|
||||
#undef __need_size_t
|
||||
#endif /* _STDDEF_H or __need_size_t. */
|
||||
|
||||
|
||||
/* Wide character type.
|
||||
Locale-writers should change this as necessary to
|
||||
be big enough to hold unique values not between 0 and 127,
|
||||
and not (wchar_t) -1, for each defined multibyte character. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_wchar_t)
|
||||
#ifndef _WCHAR_T
|
||||
#ifndef _T_WCHAR_
|
||||
#ifndef _T_WCHAR
|
||||
#ifndef __WCHAR_T
|
||||
#ifndef _WCHAR_T_
|
||||
#ifndef _BSD_WCHAR_T_
|
||||
#ifndef _WCHAR_T_DEFINED_
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
#ifndef _WCHAR_T_H
|
||||
#ifndef ___int_wchar_t_h
|
||||
#ifndef __INT_WCHAR_T_H
|
||||
#ifndef _GCC_WCHAR_T
|
||||
#define _WCHAR_T
|
||||
#define _T_WCHAR_
|
||||
#define _T_WCHAR
|
||||
#define __WCHAR_T
|
||||
#define _WCHAR_T_
|
||||
#define _BSD_WCHAR_T_
|
||||
#define _WCHAR_T_DEFINED_
|
||||
#define _WCHAR_T_DEFINED
|
||||
#define _WCHAR_T_H
|
||||
#define ___int_wchar_t_h
|
||||
#define __INT_WCHAR_T_H
|
||||
#define _GCC_WCHAR_T
|
||||
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
|
||||
symbols in the _FOO_T_ family, stays defined even after its
|
||||
corresponding type is defined). If we define wchar_t, then we
|
||||
must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
|
||||
we undef _WCHAR_T_, then we must also define rune_t, since
|
||||
headers like runetype.h assume that if machine/ansi.h is included,
|
||||
and _BSD_WCHAR_T_ is not defined, then rune_t is available.
|
||||
machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
|
||||
the same type." */
|
||||
#ifdef _BSD_WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#ifdef _BSD_RUNE_T_
|
||||
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
||||
typedef _BSD_RUNE_T_ rune_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __WCHAR_TYPE__
|
||||
#define __WCHAR_TYPE__ int
|
||||
#endif
|
||||
#ifndef __cplusplus
|
||||
typedef __WCHAR_TYPE__ wchar_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#undef __need_wchar_t
|
||||
#endif /* _STDDEF_H or __need_wchar_t. */
|
||||
|
||||
#if defined (_STDDEF_H) || defined (__need_wint_t)
|
||||
#ifndef _WINT_T
|
||||
#define _WINT_T
|
||||
|
||||
#ifndef __WINT_TYPE__
|
||||
#define __WINT_TYPE__ unsigned int
|
||||
#endif
|
||||
typedef __WINT_TYPE__ wint_t;
|
||||
#endif
|
||||
#undef __need_wint_t
|
||||
#endif
|
||||
|
||||
/* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
|
||||
are already defined. */
|
||||
#ifdef _ANSI_H_
|
||||
/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
|
||||
are probably typos and should be removed before 2.8 is released. */
|
||||
#ifdef _GCC_PTRDIFF_T_
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#ifdef _GCC_SIZE_T_
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#ifdef _GCC_WCHAR_T_
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
/* The following ones are the real ones. */
|
||||
#ifdef _GCC_PTRDIFF_T
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#ifdef _GCC_SIZE_T
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#ifdef _GCC_WCHAR_T
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
#endif /* _ANSI_H_ */
|
||||
|
||||
#endif /* __sys_stdtypes_h */
|
||||
|
||||
/* A null pointer constant. */
|
||||
|
||||
#if defined (_STDDEF_H) || defined (__need_NULL)
|
||||
#undef NULL /* in case <stdio.h> has defined it. */
|
||||
#ifdef __GNUG__
|
||||
#define NULL (__null)
|
||||
#else /* G++ */
|
||||
#define NULL (0)
|
||||
#endif /* G++ */
|
||||
#endif /* NULL not defined and <stddef.h> or need NULL. */
|
||||
#undef __need_NULL
|
||||
|
||||
#ifdef _STDDEF_H
|
||||
|
||||
/* Offset of member MEMBER in a struct of type TYPE. */
|
||||
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||
|
||||
#endif /* _STDDEF_H was defined this time */
|
||||
|
||||
#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
|
||||
|| __need_XXX was not defined before */
|
||||
#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
|
||||
&& !defined(__STDDEF_H__)) \
|
||||
|| defined(__need_wchar_t) || defined(__need_size_t) \
|
||||
|| defined(__need_ptrdiff_t) || defined(__need_NULL) \
|
||||
|| defined(__need_wint_t)
|
||||
|
||||
/* Any one of these symbols __need_* means that GNU libc
|
||||
wants us just to define one data type. So don't define
|
||||
the symbols that indicate this file's entire job has been done. */
|
||||
#if (!defined(__need_wchar_t) && !defined(__need_size_t) \
|
||||
&& !defined(__need_ptrdiff_t) && !defined(__need_NULL) \
|
||||
&& !defined(__need_wint_t))
|
||||
#define _STDDEF_H
|
||||
#define _STDDEF_H_
|
||||
/* snaroff@next.com says the NeXT needs this. */
|
||||
#define _ANSI_STDDEF_H
|
||||
/* Irix 5.1 needs this. */
|
||||
#define __STDDEF_H__
|
||||
#endif
|
||||
|
||||
#ifndef __sys_stdtypes_h
|
||||
/* This avoids lossage on SunOS but only if stdtypes.h comes first.
|
||||
There's no way to win with the other order! Sun lossage. */
|
||||
|
||||
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
|
||||
one less case to deal with in the following. */
|
||||
#if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__)
|
||||
#include <machine/ansi.h>
|
||||
#endif
|
||||
|
||||
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
|
||||
defined if the corresponding type is *not* defined.
|
||||
FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_ */
|
||||
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_)
|
||||
#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
|
||||
#define _SIZE_T_
|
||||
#endif
|
||||
#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
|
||||
#define _PTRDIFF_T_
|
||||
#endif
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_. */
|
||||
#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
|
||||
#ifndef _BSD_WCHAR_T_
|
||||
#define _WCHAR_T
|
||||
#endif
|
||||
#endif
|
||||
/* Undef _FOO_T_ if we are supposed to define foo_t. */
|
||||
#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#if defined (__need_size_t) || defined (_STDDEF_H_)
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#if defined (__need_wchar_t) || defined (_STDDEF_H_)
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */
|
||||
|
||||
/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
|
||||
Just ignore it. */
|
||||
#if defined (__sequent__) && defined (_PTRDIFF_T_)
|
||||
#undef _PTRDIFF_T_
|
||||
#endif
|
||||
|
||||
/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
|
||||
_TYPE_size_t which will typedef size_t. fixincludes patched the
|
||||
vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
|
||||
not defined, and so that defining this macro defines _GCC_SIZE_T.
|
||||
If we find that the macros are still defined at this point, we must
|
||||
invoke them so that the type is defined as expected. */
|
||||
#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
|
||||
_TYPE_ptrdiff_t;
|
||||
#undef _TYPE_ptrdiff_t
|
||||
#endif
|
||||
#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
|
||||
_TYPE_size_t;
|
||||
#undef _TYPE_size_t
|
||||
#endif
|
||||
#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
|
||||
_TYPE_wchar_t;
|
||||
#undef _TYPE_wchar_t
|
||||
#endif
|
||||
|
||||
/* In case nobody has defined these types, but we aren't running under
|
||||
GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
|
||||
__WCHAR_TYPE__ have reasonable values. This can happen if the
|
||||
parts of GCC is compiled by an older compiler, that actually
|
||||
include gstddef.h, such as collect2. */
|
||||
|
||||
/* Signed type of difference of two pointers. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
|
||||
#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */
|
||||
#ifndef _T_PTRDIFF_
|
||||
#ifndef _T_PTRDIFF
|
||||
#ifndef __PTRDIFF_T
|
||||
#ifndef _PTRDIFF_T_
|
||||
#ifndef _BSD_PTRDIFF_T_
|
||||
#ifndef ___int_ptrdiff_t_h
|
||||
#ifndef _GCC_PTRDIFF_T
|
||||
#define _PTRDIFF_T
|
||||
#define _T_PTRDIFF_
|
||||
#define _T_PTRDIFF
|
||||
#define __PTRDIFF_T
|
||||
#define _PTRDIFF_T_
|
||||
#define _BSD_PTRDIFF_T_
|
||||
#define ___int_ptrdiff_t_h
|
||||
#define _GCC_PTRDIFF_T
|
||||
#ifndef __PTRDIFF_TYPE__
|
||||
#define __PTRDIFF_TYPE__ long int
|
||||
#endif
|
||||
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
#endif /* _GCC_PTRDIFF_T */
|
||||
#endif /* ___int_ptrdiff_t_h */
|
||||
#endif /* _BSD_PTRDIFF_T_ */
|
||||
#endif /* _PTRDIFF_T_ */
|
||||
#endif /* __PTRDIFF_T */
|
||||
#endif /* _T_PTRDIFF */
|
||||
#endif /* _T_PTRDIFF_ */
|
||||
#endif /* _PTRDIFF_T */
|
||||
|
||||
/* If this symbol has done its job, get rid of it. */
|
||||
#undef __need_ptrdiff_t
|
||||
|
||||
#endif /* _STDDEF_H or __need_ptrdiff_t. */
|
||||
|
||||
/* Unsigned type of `sizeof' something. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_size_t)
|
||||
#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
|
||||
#ifndef _SYS_SIZE_T_H
|
||||
#ifndef _T_SIZE_
|
||||
#ifndef _T_SIZE
|
||||
#ifndef __SIZE_T_
|
||||
#ifndef _SIZE_T_
|
||||
#ifndef _BSD_SIZE_T_
|
||||
#ifndef _SIZE_T_DEFINED_
|
||||
#ifndef _SIZE_T_DEFINED
|
||||
#ifndef ___int_size_t_h
|
||||
#ifndef _GCC_SIZE_T
|
||||
#ifndef _SIZET_
|
||||
#ifndef __size_t
|
||||
#define _SIZE_T
|
||||
#define _SYS_SIZE_T_H
|
||||
#define _T_SIZE_
|
||||
#define _T_SIZE
|
||||
#define __SIZE_T_
|
||||
#define _SIZE_T_
|
||||
#define _BSD_SIZE_T_
|
||||
#define _SIZE_T_DEFINED_
|
||||
#define _SIZE_T_DEFINED
|
||||
#define ___int_size_t_h
|
||||
#define _GCC_SIZE_T
|
||||
#define _SIZET_
|
||||
#define __size_t
|
||||
#ifndef __SIZE_TYPE__
|
||||
#define __SIZE_TYPE__ unsigned int
|
||||
#endif
|
||||
#if !(defined (__GNUG__) && defined (size_t))
|
||||
#ifndef _DONESIZET
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
#define _DONESIZET
|
||||
#endif
|
||||
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||
#endif /* __size_t */
|
||||
#endif /* _SIZET_ */
|
||||
#endif /* _GCC_SIZE_T */
|
||||
#endif /* ___int_size_t_h */
|
||||
#endif /* _SIZE_T_DEFINED */
|
||||
#endif /* _SIZE_T_DEFINED_ */
|
||||
#endif /* _BSD_SIZE_T_ */
|
||||
#endif /* _SIZE_T_ */
|
||||
#endif /* __SIZE_T */
|
||||
#endif /* _T_SIZE */
|
||||
#endif /* _T_SIZE_ */
|
||||
#endif /* _SYS_SIZE_T_H */
|
||||
#endif /* _SIZE_T */
|
||||
#undef __need_size_t
|
||||
#endif /* _STDDEF_H or __need_size_t. */
|
||||
|
||||
|
||||
/* Wide character type.
|
||||
Locale-writers should change this as necessary to
|
||||
be big enough to hold unique values not between 0 and 127,
|
||||
and not (wchar_t) -1, for each defined multibyte character. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_wchar_t)
|
||||
#ifndef _WCHAR_T
|
||||
#ifndef _T_WCHAR_
|
||||
#ifndef _T_WCHAR
|
||||
#ifndef __WCHAR_T
|
||||
#ifndef _WCHAR_T_
|
||||
#ifndef _BSD_WCHAR_T_
|
||||
#ifndef _WCHAR_T_DEFINED_
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
#ifndef _WCHAR_T_H
|
||||
#ifndef ___int_wchar_t_h
|
||||
#ifndef __INT_WCHAR_T_H
|
||||
#ifndef _GCC_WCHAR_T
|
||||
#define _WCHAR_T
|
||||
#define _T_WCHAR_
|
||||
#define _T_WCHAR
|
||||
#define __WCHAR_T
|
||||
#define _WCHAR_T_
|
||||
#define _BSD_WCHAR_T_
|
||||
#define _WCHAR_T_DEFINED_
|
||||
#define _WCHAR_T_DEFINED
|
||||
#define _WCHAR_T_H
|
||||
#define ___int_wchar_t_h
|
||||
#define __INT_WCHAR_T_H
|
||||
#define _GCC_WCHAR_T
|
||||
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
|
||||
symbols in the _FOO_T_ family, stays defined even after its
|
||||
corresponding type is defined). If we define wchar_t, then we
|
||||
must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
|
||||
we undef _WCHAR_T_, then we must also define rune_t, since
|
||||
headers like runetype.h assume that if machine/ansi.h is included,
|
||||
and _BSD_WCHAR_T_ is not defined, then rune_t is available.
|
||||
machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
|
||||
the same type." */
|
||||
#ifdef _BSD_WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#ifdef _BSD_RUNE_T_
|
||||
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
||||
typedef _BSD_RUNE_T_ rune_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __WCHAR_TYPE__
|
||||
#define __WCHAR_TYPE__ int
|
||||
#endif
|
||||
#ifndef __cplusplus
|
||||
typedef __WCHAR_TYPE__ wchar_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#undef __need_wchar_t
|
||||
#endif /* _STDDEF_H or __need_wchar_t. */
|
||||
|
||||
#if defined (_STDDEF_H) || defined (__need_wint_t)
|
||||
#ifndef _WINT_T
|
||||
#define _WINT_T
|
||||
|
||||
#ifndef __WINT_TYPE__
|
||||
#define __WINT_TYPE__ unsigned int
|
||||
#endif
|
||||
typedef __WINT_TYPE__ wint_t;
|
||||
#endif
|
||||
#undef __need_wint_t
|
||||
#endif
|
||||
|
||||
/* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
|
||||
are already defined. */
|
||||
#ifdef _ANSI_H_
|
||||
/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
|
||||
are probably typos and should be removed before 2.8 is released. */
|
||||
#ifdef _GCC_PTRDIFF_T_
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#ifdef _GCC_SIZE_T_
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#ifdef _GCC_WCHAR_T_
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
/* The following ones are the real ones. */
|
||||
#ifdef _GCC_PTRDIFF_T
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#ifdef _GCC_SIZE_T
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#ifdef _GCC_WCHAR_T
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
#endif /* _ANSI_H_ */
|
||||
|
||||
#endif /* __sys_stdtypes_h */
|
||||
|
||||
/* A null pointer constant. */
|
||||
|
||||
#if defined (_STDDEF_H) || defined (__need_NULL)
|
||||
#undef NULL /* in case <stdio.h> has defined it. */
|
||||
#ifdef __GNUG__
|
||||
#define NULL (__null)
|
||||
#else /* G++ */
|
||||
#define NULL (0)
|
||||
#endif /* G++ */
|
||||
#endif /* NULL not defined and <stddef.h> or need NULL. */
|
||||
#undef __need_NULL
|
||||
|
||||
#ifdef _STDDEF_H
|
||||
|
||||
/* Offset of member MEMBER in a struct of type TYPE. */
|
||||
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||
|
||||
#endif /* _STDDEF_H was defined this time */
|
||||
|
||||
#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
|
||||
|| __need_XXX was not defined before */
|
||||
|
|
|
@ -1,68 +1,68 @@
|
|||
#ifndef __STDIO_H__
|
||||
#define __STDIO_H__ 1
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#include <openxdk.h>
|
||||
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
int __cdecl sprintf(char *, const char *, ...);
|
||||
|
||||
//#include <tamtypes.h>
|
||||
#include <stddef.h>
|
||||
#include <features.h>
|
||||
|
||||
|
||||
#define _O_RDONLY (0x00000001)
|
||||
#define _O_WRONLY (0x00000002)
|
||||
#define _O_RDWR (0x00000003)
|
||||
#define _O_NBLOCK (0x00000010)
|
||||
#define _O_APPEND (0x00000100)
|
||||
#define _O_CREAT (0x00000200)
|
||||
#define _O_TRUNC (0x00000400)
|
||||
#define _O_EXCL (0x00000800)
|
||||
#define _O_TEMPORARY (0x00001000)
|
||||
#define _O_TEXT (0x00004000)
|
||||
#define _O_BINARY (0x00008000)
|
||||
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_NBLOCK _O_NBLOCK
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
extern u32 LastErrorCode;
|
||||
|
||||
int _open( char *filename, int oflag, int permission );
|
||||
int _read( int handle, void *buffer, unsigned int count );
|
||||
int _write( int handle, void* buffer, unsigned int count );
|
||||
int _close( int handle );
|
||||
int _lseek( int handle, u32 offset, int base );
|
||||
|
||||
int nprintf(const char *format, ...);
|
||||
int printf(const char *format, ...);
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // __STDIO_H__
|
||||
|
||||
|
||||
|
||||
#ifndef __STDIO_H__
|
||||
#define __STDIO_H__ 1
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#include <openxdk.h>
|
||||
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
int __cdecl sprintf(char *, const char *, ...);
|
||||
|
||||
//#include <tamtypes.h>
|
||||
#include <stddef.h>
|
||||
#include <features.h>
|
||||
|
||||
|
||||
#define _O_RDONLY (0x00000001)
|
||||
#define _O_WRONLY (0x00000002)
|
||||
#define _O_RDWR (0x00000003)
|
||||
#define _O_NBLOCK (0x00000010)
|
||||
#define _O_APPEND (0x00000100)
|
||||
#define _O_CREAT (0x00000200)
|
||||
#define _O_TRUNC (0x00000400)
|
||||
#define _O_EXCL (0x00000800)
|
||||
#define _O_TEMPORARY (0x00001000)
|
||||
#define _O_TEXT (0x00004000)
|
||||
#define _O_BINARY (0x00008000)
|
||||
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_NBLOCK _O_NBLOCK
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
extern u32 LastErrorCode;
|
||||
|
||||
int _open( char *filename, int oflag, int permission );
|
||||
int _read( int handle, void *buffer, unsigned int count );
|
||||
int _write( int handle, void* buffer, unsigned int count );
|
||||
int _close( int handle );
|
||||
int _lseek( int handle, u32 offset, int base );
|
||||
|
||||
int nprintf(const char *format, ...);
|
||||
int printf(const char *format, ...);
|
||||
//int sprintf(char*, const char *format, ...);
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // __STDIO_H__
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,117 +1,117 @@
|
|||
/* <stdlib.h>
|
||||
*
|
||||
* ANSI-C Standard Library definitions
|
||||
*/
|
||||
#define __IEEE_FLOAT 1 // BIGBOY
|
||||
|
||||
|
||||
#ifndef _STDLIB_H
|
||||
#define _STDLIB_H
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
/* note: no !defined(__STDC__) handling, deliberately */
|
||||
#include <defs.h>
|
||||
|
||||
#ifndef _STDDEF_H
|
||||
#include <stddef.h> /* get size_t, NULL */
|
||||
#endif
|
||||
|
||||
|
||||
char *itoa(int i, char* string, int radix);
|
||||
|
||||
/*
|
||||
These exit macro values work with either exit() or return from main(),
|
||||
and avoid unnecessary warnings from the DCL command intrepretor. They
|
||||
don't match VAX C's <stdlib.h>, which has 0 and 2 respectively. Using 0
|
||||
for success works with VAXCRTL's exit() but requires additional compiler
|
||||
support in main() (which VAX C neglects to provide). 2 always provokes
|
||||
"%NONAME-E-NOMSG, Message number 00000002"; similarly for unfixed 0.
|
||||
*/
|
||||
#define EXIT_SUCCESS 1 /* SS$_NORMAL, STS$K_SUCCESS */
|
||||
#define EXIT_FAILURE 0x10000002 /* (STS$K_ERROR | STS$M_INHIB_MSG) */
|
||||
|
||||
#define RAND_MAX 2147483647 /* 0x7FFFFFFF */
|
||||
#define lrand48() rand()
|
||||
|
||||
#if (__GNUC__ == 2 && !__STRICT_ANSI__)
|
||||
#if (__GNUC_MINOR__ >= 5)
|
||||
void abort(void) __asm ("decc$abort") __attribute__((noreturn));
|
||||
void exit(int) __asm ("decc$exit") __attribute__((noreturn));
|
||||
void _exit(int) __attribute__((noreturn));
|
||||
#else
|
||||
volatile void abort(void) __asm ("decc$abort");
|
||||
volatile void exit(int) __asm ("decc$exit");
|
||||
volatile void _exit(int);
|
||||
#endif
|
||||
#else
|
||||
void abort(void);
|
||||
void exit(int i);
|
||||
void _exit(int i);
|
||||
#endif
|
||||
int atexit(void (*)(void));
|
||||
|
||||
void *bsearch(const void *,const void *,size_t,size_t,
|
||||
int (*)(const void *,const void *));
|
||||
|
||||
void qsort(void *,size_t,size_t,int (*)(const void *,const void *)); // __asm ("decc$qsort");
|
||||
|
||||
int rand(void);
|
||||
int srand(int); /* routine to initialize rand() */
|
||||
|
||||
/* These are the functions that actually do things. The `random', `srandom',
|
||||
`initstate' and `setstate' functions are those from BSD Unices.
|
||||
The `rand' and `srand' functions are required by the ANSI standard.
|
||||
We provide both interfaces to the same random number generator. */
|
||||
/* Return a random long integer between 0 and RAND_MAX inclusive. */
|
||||
extern long int __random (void);
|
||||
/* Seed the random number generator with the given number. */
|
||||
extern void __srandom (unsigned int __seed);
|
||||
|
||||
|
||||
char *getenv(const char *); // __asm ("decc$getenv");
|
||||
int system(const char *);
|
||||
|
||||
/* math related routines */
|
||||
#ifndef _DIV_T
|
||||
#define _DIV_T
|
||||
typedef struct DIV_T { int quot, rem; } div_t;
|
||||
#endif
|
||||
#ifndef _LDIV_T
|
||||
#define _LDIV_T
|
||||
typedef struct LDIV_T { long quot, rem; } ldiv_t;
|
||||
#endif
|
||||
|
||||
# define ___fdecl(_func,_arglist)
|
||||
#if __IEEE_FLOAT
|
||||
# define ___gdecl(_func, _arglist) _func _arglist { __asm{ nop } }
|
||||
#elif __G_FLOAT
|
||||
# define ___gdecl(_func, _arglist) _func _arglist __asm("decc$g" #_func)
|
||||
#else
|
||||
# error "No floating format defined"
|
||||
#endif
|
||||
|
||||
int abs(int);
|
||||
int atoi (const char *i);
|
||||
long atol(const char * i);
|
||||
double atof(const char * i);
|
||||
div_t div(int i,int i2);
|
||||
long labs(long);
|
||||
ldiv_t ldiv(long,long);
|
||||
double strtod(const char *i,char **i2);
|
||||
long strtol(const char *i,char **i2,int i3);
|
||||
unsigned long strtoul(const char *i,char **i2,int i3);
|
||||
|
||||
/* memory manipulation routines; note: cfree() is gone; see also <malloc.h> */
|
||||
void* malloc (size_t i);
|
||||
void* calloc (size_t i, size_t i2);
|
||||
void* realloc (void *i, size_t i2);
|
||||
void free (void * i);
|
||||
|
||||
#undef ___gdecl
|
||||
#undef ___fdecl
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
#endif /*_STDLIB_H*/
|
||||
/* <stdlib.h>
|
||||
*
|
||||
* ANSI-C Standard Library definitions
|
||||
*/
|
||||
#define __IEEE_FLOAT 1 // BIGBOY
|
||||
|
||||
|
||||
#ifndef _STDLIB_H
|
||||
#define _STDLIB_H
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
/* note: no !defined(__STDC__) handling, deliberately */
|
||||
#include <defs.h>
|
||||
|
||||
#ifndef _STDDEF_H
|
||||
#include <stddef.h> /* get size_t, NULL */
|
||||
#endif
|
||||
|
||||
|
||||
char *itoa(int i, char* string, int radix);
|
||||
|
||||
/*
|
||||
These exit macro values work with either exit() or return from main(),
|
||||
and avoid unnecessary warnings from the DCL command intrepretor. They
|
||||
don't match VAX C's <stdlib.h>, which has 0 and 2 respectively. Using 0
|
||||
for success works with VAXCRTL's exit() but requires additional compiler
|
||||
support in main() (which VAX C neglects to provide). 2 always provokes
|
||||
"%NONAME-E-NOMSG, Message number 00000002"; similarly for unfixed 0.
|
||||
*/
|
||||
#define EXIT_SUCCESS 1 /* SS$_NORMAL, STS$K_SUCCESS */
|
||||
#define EXIT_FAILURE 0x10000002 /* (STS$K_ERROR | STS$M_INHIB_MSG) */
|
||||
|
||||
#define RAND_MAX 2147483647 /* 0x7FFFFFFF */
|
||||
#define lrand48() rand()
|
||||
|
||||
#if (__GNUC__ == 2 && !__STRICT_ANSI__)
|
||||
#if (__GNUC_MINOR__ >= 5)
|
||||
void abort(void) __asm ("decc$abort") __attribute__((noreturn));
|
||||
void exit(int) __asm ("decc$exit") __attribute__((noreturn));
|
||||
void _exit(int) __attribute__((noreturn));
|
||||
#else
|
||||
volatile void abort(void) __asm ("decc$abort");
|
||||
volatile void exit(int) __asm ("decc$exit");
|
||||
volatile void _exit(int);
|
||||
#endif
|
||||
#else
|
||||
void abort(void);
|
||||
void exit(int i);
|
||||
void _exit(int i);
|
||||
#endif
|
||||
int atexit(void (*)(void));
|
||||
|
||||
void *bsearch(const void *,const void *,size_t,size_t,
|
||||
int (*)(const void *,const void *));
|
||||
|
||||
void qsort(void *,size_t,size_t,int (*)(const void *,const void *)); // __asm ("decc$qsort");
|
||||
|
||||
int rand(void);
|
||||
int srand(int); /* routine to initialize rand() */
|
||||
|
||||
/* These are the functions that actually do things. The `random', `srandom',
|
||||
`initstate' and `setstate' functions are those from BSD Unices.
|
||||
The `rand' and `srand' functions are required by the ANSI standard.
|
||||
We provide both interfaces to the same random number generator. */
|
||||
/* Return a random long integer between 0 and RAND_MAX inclusive. */
|
||||
extern long int __random (void);
|
||||
/* Seed the random number generator with the given number. */
|
||||
extern void __srandom (unsigned int __seed);
|
||||
|
||||
|
||||
char *getenv(const char *); // __asm ("decc$getenv");
|
||||
int system(const char *);
|
||||
|
||||
/* math related routines */
|
||||
#ifndef _DIV_T
|
||||
#define _DIV_T
|
||||
typedef struct DIV_T { int quot, rem; } div_t;
|
||||
#endif
|
||||
#ifndef _LDIV_T
|
||||
#define _LDIV_T
|
||||
typedef struct LDIV_T { long quot, rem; } ldiv_t;
|
||||
#endif
|
||||
|
||||
# define ___fdecl(_func,_arglist)
|
||||
#if __IEEE_FLOAT
|
||||
# define ___gdecl(_func, _arglist) _func _arglist { __asm{ nop } }
|
||||
#elif __G_FLOAT
|
||||
# define ___gdecl(_func, _arglist) _func _arglist __asm("decc$g" #_func)
|
||||
#else
|
||||
# error "No floating format defined"
|
||||
#endif
|
||||
|
||||
int abs(int);
|
||||
int atoi (const char *i);
|
||||
long atol(const char * i);
|
||||
double atof(const char * i);
|
||||
div_t div(int i,int i2);
|
||||
long labs(long);
|
||||
ldiv_t ldiv(long,long);
|
||||
double strtod(const char *i,char **i2);
|
||||
long strtol(const char *i,char **i2,int i3);
|
||||
unsigned long strtoul(const char *i,char **i2,int i3);
|
||||
|
||||
/* memory manipulation routines; note: cfree() is gone; see also <malloc.h> */
|
||||
void* malloc (size_t i);
|
||||
void* calloc (size_t i, size_t i2);
|
||||
void* realloc (void *i, size_t i2);
|
||||
void free (void * i);
|
||||
|
||||
#undef ___gdecl
|
||||
#undef ___fdecl
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
#endif /*_STDLIB_H*/
|
||||
|
|
|
@ -1,193 +1,193 @@
|
|||
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* ANSI Standard: 4.11 STRING HANDLING <string.h>
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifndef _STRING_H
|
||||
|
||||
#define _STRING_H 1
|
||||
#include <features.h>
|
||||
|
||||
/* Get size_t and NULL from <stddef.h>. */
|
||||
#define __need_ptrdiff_t
|
||||
#define __need_size_t
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
/* Copy N bytes of SRC to DEST. */
|
||||
extern __ptr_t memcpy __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
size_t __n));
|
||||
/* Copy N bytes of SRC to DEST, guaranteeing
|
||||
correct behavior for overlapping strings. */
|
||||
extern __ptr_t memmove __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
size_t __n));
|
||||
|
||||
/* Copy no more than N bytes of SRC to DEST, stopping when C is found.
|
||||
Return the position in DEST one byte past where C was copied,
|
||||
or NULL if C was not found in the first N bytes of SRC. */
|
||||
extern __ptr_t __memccpy __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
int __c, size_t __n));
|
||||
#if defined (__USE_SVID) || defined (__USE_BSD)
|
||||
extern __ptr_t memccpy __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
int __c, size_t __n));
|
||||
#ifdef __OPTIMIZE__
|
||||
#define memccpy(dest, src, c, n) __memccpy((dest), (src), (c), (n))
|
||||
#endif /* Optimizing. */
|
||||
#endif /* SVID. */
|
||||
|
||||
|
||||
/* Set N bytes of S to C. */
|
||||
extern __ptr_t memset __P ((__ptr_t __s, int __c, size_t __n));
|
||||
|
||||
/* Compare N bytes of S1 and S2. */
|
||||
extern int memcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2,
|
||||
size_t __n));
|
||||
|
||||
/* Search N bytes of S for C. */
|
||||
extern __ptr_t memchr __P ((__const __ptr_t __s, int __c, size_t __n));
|
||||
|
||||
|
||||
/* Copy SRC to DEST. */
|
||||
extern char *strcpy __P ((char *__dest, __const char *__src));
|
||||
/* Copy no more than N characters of SRC to DEST. */
|
||||
extern char *strncpy __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
/* Append SRC onto DEST. */
|
||||
extern char *strcat __P ((char *__dest, __const char *__src));
|
||||
/* Append no more than N characters from SRC onto DEST. */
|
||||
extern char *strncat __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
/* Compare S1 and S2. */
|
||||
extern int strcmp __P ((__const char *__s1, __const char *__s2));
|
||||
/* Compare N characters of S1 and S2. */
|
||||
extern int strncmp __P ((__const char *__s1, __const char *__s2, size_t __n));
|
||||
|
||||
/* Compare the collated forms of S1 and S2. */
|
||||
extern int strcoll __P ((__const char *__s1, __const char *__s2));
|
||||
/* Put a transformation of SRC into no more than N bytes of DEST. */
|
||||
extern size_t strxfrm __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
#if defined (__USE_SVID) || defined (__USE_BSD)
|
||||
/* Duplicate S, returning an identical malloc'd string. */
|
||||
extern char *strdup __P ((__const char *__s));
|
||||
#endif
|
||||
|
||||
/* Find the first occurrence of C in S. */
|
||||
extern char *strchr __P ((__const char *__s, int __c));
|
||||
/* Find the last occurrence of C in S. */
|
||||
extern char *strrchr __P ((__const char *__s, int __c));
|
||||
|
||||
/* Return the length of the initial segment of S which
|
||||
consists entirely of characters not in REJECT. */
|
||||
extern size_t strcspn __P ((__const char *__s, __const char *__reject));
|
||||
/* Return the length of the initial segment of S which
|
||||
consists entirely of characters in ACCEPT. */
|
||||
extern size_t strspn __P ((__const char *__s, __const char *__accept));
|
||||
/* Find the first occurence in S of any character in ACCEPT. */
|
||||
extern char *strpbrk __P ((__const char *__s, __const char *__accept));
|
||||
/* Find the first occurence of NEEDLE in HAYSTACK. */
|
||||
extern char *strstr __P ((__const char *__haystack, __const char *__needle));
|
||||
|
||||
/* Divide S into tokens separated by characters in DELIM. */
|
||||
extern char *strtok __P ((char *__s, __const char *__delim));
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Find the first occurence of NEEDLE in HAYSTACK.
|
||||
NEEDLE is NEEDLELEN bytes long;
|
||||
HAYSTACK is HAYSTACKLEN bytes long. */
|
||||
extern __ptr_t memmem __P ((__const __ptr_t __haystack, size_t __haystacklen,
|
||||
__const __ptr_t __needle, size_t __needlelen));
|
||||
#endif
|
||||
|
||||
/* Return the length of S. */
|
||||
extern size_t strlen __P ((__const char *__s));
|
||||
|
||||
/* Return a string describing the meaning of the errno code in ERRNUM. */
|
||||
extern char *strerror __P ((int __errnum));
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* Find the first occurrence of C in S (same as strchr). */
|
||||
extern char *index __P ((__const char *__s, int __c));
|
||||
|
||||
/* Find the last occurrence of C in S (same as strrchr). */
|
||||
extern char *rindex __P ((__const char *__s, int __c));
|
||||
|
||||
/* Copy N bytes of SRC to DEST (like memmove, but args reversed). */
|
||||
extern void bcopy __P ((__const __ptr_t __src, __ptr_t __dest, size_t __n));
|
||||
|
||||
/* Set N bytes of S to 0. */
|
||||
extern void bzero __P ((__ptr_t __s, size_t __n));
|
||||
|
||||
/* Compare N bytes of S1 and S2 (same as memcmp). */
|
||||
extern int bcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2, size_t __n));
|
||||
|
||||
/* Return the position of the first bit set in I, or 0 if none are set.
|
||||
The least-significant bit is position 1, the most-significant 32. */
|
||||
extern int ffs __P ((int __i));
|
||||
|
||||
/* Compare S1 and S2, ignoring case. */
|
||||
extern int strcasecmp __P ((__const char *__s1, __const char *__s2));
|
||||
|
||||
/* Return the next DELIM-delimited token from *STRINGP,
|
||||
terminating it with a '\0', and update *STRINGP to point past it. */
|
||||
extern char *strsep __P ((char **__stringp, __const char *__delim));
|
||||
#endif
|
||||
|
||||
/* Copy no more than N characters of SRC to DEST, returning the address of
|
||||
the last character written into DEST. */
|
||||
extern char *__stpncpy __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Compare no more than N chars of S1 and S2, ignoring case. */
|
||||
extern int strncasecmp __P ((__const char *__s1, __const char *__s2,
|
||||
size_t __n));
|
||||
|
||||
/* Return a string describing the meaning of the signal number in SIG. */
|
||||
extern char *strsignal __P ((int __sig));
|
||||
|
||||
/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
|
||||
extern char *stpcpy __P ((char *__dest, __const char *__src));
|
||||
|
||||
/* Copy no more than N characters of SRC to DEST, returning the address of
|
||||
the last character written into DEST. */
|
||||
extern char *stpncpy __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
#define stpncpy(dest, src, n) __stpncpy ((dest), (src), (n))
|
||||
#endif
|
||||
|
||||
/* Sautee STRING briskly. */
|
||||
extern char *strfry __P ((char *__string));
|
||||
|
||||
/* Frobnicate N bytes of S. */
|
||||
extern __ptr_t memfrob __P ((__ptr_t __s, size_t __n));
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* string.h */
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* ANSI Standard: 4.11 STRING HANDLING <string.h>
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifndef _STRING_H
|
||||
|
||||
#define _STRING_H 1
|
||||
#include <features.h>
|
||||
|
||||
/* Get size_t and NULL from <stddef.h>. */
|
||||
#define __need_ptrdiff_t
|
||||
#define __need_size_t
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
/* Copy N bytes of SRC to DEST. */
|
||||
extern __ptr_t memcpy __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
size_t __n));
|
||||
/* Copy N bytes of SRC to DEST, guaranteeing
|
||||
correct behavior for overlapping strings. */
|
||||
extern __ptr_t memmove __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
size_t __n));
|
||||
|
||||
/* Copy no more than N bytes of SRC to DEST, stopping when C is found.
|
||||
Return the position in DEST one byte past where C was copied,
|
||||
or NULL if C was not found in the first N bytes of SRC. */
|
||||
extern __ptr_t __memccpy __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
int __c, size_t __n));
|
||||
#if defined (__USE_SVID) || defined (__USE_BSD)
|
||||
extern __ptr_t memccpy __P ((__ptr_t __dest, __const __ptr_t __src,
|
||||
int __c, size_t __n));
|
||||
#ifdef __OPTIMIZE__
|
||||
#define memccpy(dest, src, c, n) __memccpy((dest), (src), (c), (n))
|
||||
#endif /* Optimizing. */
|
||||
#endif /* SVID. */
|
||||
|
||||
|
||||
/* Set N bytes of S to C. */
|
||||
extern __ptr_t memset __P ((__ptr_t __s, int __c, size_t __n));
|
||||
|
||||
/* Compare N bytes of S1 and S2. */
|
||||
extern int memcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2,
|
||||
size_t __n));
|
||||
|
||||
/* Search N bytes of S for C. */
|
||||
extern __ptr_t memchr __P ((__const __ptr_t __s, int __c, size_t __n));
|
||||
|
||||
|
||||
/* Copy SRC to DEST. */
|
||||
extern char *strcpy __P ((char *__dest, __const char *__src));
|
||||
/* Copy no more than N characters of SRC to DEST. */
|
||||
extern char *strncpy __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
/* Append SRC onto DEST. */
|
||||
extern char *strcat __P ((char *__dest, __const char *__src));
|
||||
/* Append no more than N characters from SRC onto DEST. */
|
||||
extern char *strncat __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
/* Compare S1 and S2. */
|
||||
extern int strcmp __P ((__const char *__s1, __const char *__s2));
|
||||
/* Compare N characters of S1 and S2. */
|
||||
extern int strncmp __P ((__const char *__s1, __const char *__s2, size_t __n));
|
||||
|
||||
/* Compare the collated forms of S1 and S2. */
|
||||
extern int strcoll __P ((__const char *__s1, __const char *__s2));
|
||||
/* Put a transformation of SRC into no more than N bytes of DEST. */
|
||||
extern size_t strxfrm __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
#if defined (__USE_SVID) || defined (__USE_BSD)
|
||||
/* Duplicate S, returning an identical malloc'd string. */
|
||||
extern char *strdup __P ((__const char *__s));
|
||||
#endif
|
||||
|
||||
/* Find the first occurrence of C in S. */
|
||||
extern char *strchr __P ((__const char *__s, int __c));
|
||||
/* Find the last occurrence of C in S. */
|
||||
extern char *strrchr __P ((__const char *__s, int __c));
|
||||
|
||||
/* Return the length of the initial segment of S which
|
||||
consists entirely of characters not in REJECT. */
|
||||
extern size_t strcspn __P ((__const char *__s, __const char *__reject));
|
||||
/* Return the length of the initial segment of S which
|
||||
consists entirely of characters in ACCEPT. */
|
||||
extern size_t strspn __P ((__const char *__s, __const char *__accept));
|
||||
/* Find the first occurence in S of any character in ACCEPT. */
|
||||
extern char *strpbrk __P ((__const char *__s, __const char *__accept));
|
||||
/* Find the first occurence of NEEDLE in HAYSTACK. */
|
||||
extern char *strstr __P ((__const char *__haystack, __const char *__needle));
|
||||
|
||||
/* Divide S into tokens separated by characters in DELIM. */
|
||||
extern char *strtok __P ((char *__s, __const char *__delim));
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Find the first occurence of NEEDLE in HAYSTACK.
|
||||
NEEDLE is NEEDLELEN bytes long;
|
||||
HAYSTACK is HAYSTACKLEN bytes long. */
|
||||
extern __ptr_t memmem __P ((__const __ptr_t __haystack, size_t __haystacklen,
|
||||
__const __ptr_t __needle, size_t __needlelen));
|
||||
#endif
|
||||
|
||||
/* Return the length of S. */
|
||||
extern size_t strlen __P ((__const char *__s));
|
||||
|
||||
/* Return a string describing the meaning of the errno code in ERRNUM. */
|
||||
extern char *strerror __P ((int __errnum));
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* Find the first occurrence of C in S (same as strchr). */
|
||||
extern char *index __P ((__const char *__s, int __c));
|
||||
|
||||
/* Find the last occurrence of C in S (same as strrchr). */
|
||||
extern char *rindex __P ((__const char *__s, int __c));
|
||||
|
||||
/* Copy N bytes of SRC to DEST (like memmove, but args reversed). */
|
||||
extern void bcopy __P ((__const __ptr_t __src, __ptr_t __dest, size_t __n));
|
||||
|
||||
/* Set N bytes of S to 0. */
|
||||
extern void bzero __P ((__ptr_t __s, size_t __n));
|
||||
|
||||
/* Compare N bytes of S1 and S2 (same as memcmp). */
|
||||
extern int bcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2, size_t __n));
|
||||
|
||||
/* Return the position of the first bit set in I, or 0 if none are set.
|
||||
The least-significant bit is position 1, the most-significant 32. */
|
||||
extern int ffs __P ((int __i));
|
||||
|
||||
/* Compare S1 and S2, ignoring case. */
|
||||
extern int strcasecmp __P ((__const char *__s1, __const char *__s2));
|
||||
|
||||
/* Return the next DELIM-delimited token from *STRINGP,
|
||||
terminating it with a '\0', and update *STRINGP to point past it. */
|
||||
extern char *strsep __P ((char **__stringp, __const char *__delim));
|
||||
#endif
|
||||
|
||||
/* Copy no more than N characters of SRC to DEST, returning the address of
|
||||
the last character written into DEST. */
|
||||
extern char *__stpncpy __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Compare no more than N chars of S1 and S2, ignoring case. */
|
||||
extern int strncasecmp __P ((__const char *__s1, __const char *__s2,
|
||||
size_t __n));
|
||||
|
||||
/* Return a string describing the meaning of the signal number in SIG. */
|
||||
extern char *strsignal __P ((int __sig));
|
||||
|
||||
/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
|
||||
extern char *stpcpy __P ((char *__dest, __const char *__src));
|
||||
|
||||
/* Copy no more than N characters of SRC to DEST, returning the address of
|
||||
the last character written into DEST. */
|
||||
extern char *stpncpy __P ((char *__dest, __const char *__src, size_t __n));
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
#define stpncpy(dest, src, n) __stpncpy ((dest), (src), (n))
|
||||
#endif
|
||||
|
||||
/* Sautee STRING briskly. */
|
||||
extern char *strfry __P ((char *__string));
|
||||
|
||||
/* Frobnicate N bytes of S. */
|
||||
extern __ptr_t memfrob __P ((__ptr_t __s, size_t __n));
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* string.h */
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,58 +1,58 @@
|
|||
/* Copyright (C) 1992, 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _ENDIAN_H
|
||||
#define _ENDIAN_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* Definitions for byte order, according to significance of bytes,
|
||||
from low addresses to high addresses. The value is what you get by
|
||||
putting '4' in the most significant byte, '3' in the second most
|
||||
significant byte, '2' in the second least significant byte, and '1'
|
||||
in the least significant byte, and then writing down one digit for
|
||||
each byte, starting with the byte at the lowest address at the left,
|
||||
and proceeding to the byte with the highest address at the right. */
|
||||
|
||||
#define __LITTLE_ENDIAN 1234
|
||||
#define __BIG_ENDIAN 4321
|
||||
#define __PDP_ENDIAN 3412
|
||||
|
||||
/* This file defines `__BYTE_ORDER' for the particular machine. */
|
||||
#include <bits/endian.h>
|
||||
|
||||
/* Some machines may need to use a different endianness for floating point
|
||||
values. */
|
||||
#ifndef __FLOAT_WORD_ORDER
|
||||
# define __FLOAT_WORD_ORDER __BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#ifdef __USE_BSD
|
||||
# define LITTLE_ENDIAN __LITTLE_ENDIAN
|
||||
# define BIG_ENDIAN __BIG_ENDIAN
|
||||
# define PDP_ENDIAN __PDP_ENDIAN
|
||||
# define BYTE_ORDER __BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# define __LONG_LONG_PAIR(HI, LO) LO, HI
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define __LONG_LONG_PAIR(HI, LO) HI, LO
|
||||
#endif
|
||||
|
||||
#endif /* endian.h */
|
||||
/* Copyright (C) 1992, 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library 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.
|
||||
|
||||
The GNU C Library 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 the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _ENDIAN_H
|
||||
#define _ENDIAN_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* Definitions for byte order, according to significance of bytes,
|
||||
from low addresses to high addresses. The value is what you get by
|
||||
putting '4' in the most significant byte, '3' in the second most
|
||||
significant byte, '2' in the second least significant byte, and '1'
|
||||
in the least significant byte, and then writing down one digit for
|
||||
each byte, starting with the byte at the lowest address at the left,
|
||||
and proceeding to the byte with the highest address at the right. */
|
||||
|
||||
#define __LITTLE_ENDIAN 1234
|
||||
#define __BIG_ENDIAN 4321
|
||||
#define __PDP_ENDIAN 3412
|
||||
|
||||
/* This file defines `__BYTE_ORDER' for the particular machine. */
|
||||
#include <bits/endian.h>
|
||||
|
||||
/* Some machines may need to use a different endianness for floating point
|
||||
values. */
|
||||
#ifndef __FLOAT_WORD_ORDER
|
||||
# define __FLOAT_WORD_ORDER __BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#ifdef __USE_BSD
|
||||
# define LITTLE_ENDIAN __LITTLE_ENDIAN
|
||||
# define BIG_ENDIAN __BIG_ENDIAN
|
||||
# define PDP_ENDIAN __PDP_ENDIAN
|
||||
# define BYTE_ORDER __BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# define __LONG_LONG_PAIR(HI, LO) LO, HI
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define __LONG_LONG_PAIR(HI, LO) HI, LO
|
||||
#endif
|
||||
|
||||
#endif /* endian.h */
|
||||
|
|
|
@ -1 +1 @@
|
|||
#include <misc/sys/cdefs.h>
|
||||
#include <misc/sys/cdefs.h>
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||
#ifndef __DJ_sys_djtypes_h_
|
||||
#define __DJ_sys_djtypes_h_
|
||||
|
||||
#define __DJ_clock_t typedef int clock_t;
|
||||
#define __DJ_gid_t typedef int gid_t;
|
||||
#define __DJ_off_t typedef int off_t;
|
||||
#define __DJ_pid_t typedef int pid_t;
|
||||
#define __DJ_size_t typedef long unsigned int size_t;
|
||||
#define __DJ_ssize_t typedef int ssize_t;
|
||||
#define __DJ_time_t typedef unsigned int time_t;
|
||||
#define __DJ_uid_t typedef int uid_t;
|
||||
#define __DJ_va_list typedef void *va_list;
|
||||
#define __DJ_wchar_t typedef int wchar_t;
|
||||
|
||||
#endif
|
||||
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||
#ifndef __DJ_sys_djtypes_h_
|
||||
#define __DJ_sys_djtypes_h_
|
||||
|
||||
#define __DJ_clock_t typedef int clock_t;
|
||||
#define __DJ_gid_t typedef int gid_t;
|
||||
#define __DJ_off_t typedef int off_t;
|
||||
#define __DJ_pid_t typedef int pid_t;
|
||||
#define __DJ_size_t typedef long unsigned int size_t;
|
||||
#define __DJ_ssize_t typedef int ssize_t;
|
||||
#define __DJ_time_t typedef unsigned int time_t;
|
||||
#define __DJ_uid_t typedef int uid_t;
|
||||
#define __DJ_va_list typedef void *va_list;
|
||||
#define __DJ_wchar_t typedef int wchar_t;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,85 +1,85 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : openxdk.h
|
||||
// *
|
||||
// * note : Welcome To Heaven
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef OPENXDK_H
|
||||
#define OPENXDK_H
|
||||
|
||||
// ******************************************************************
|
||||
// * OpenXDK Version Number
|
||||
// ******************************************************************
|
||||
#define OPENXDK_VERSION "0.1.0-Pre1"
|
||||
|
||||
// ******************************************************************
|
||||
// * OpenXDK Full Title
|
||||
// ******************************************************************
|
||||
#define OPENXDK_TITLE "OpenXDK " OPENXDK_VERSION
|
||||
|
||||
// ******************************************************************
|
||||
// * Humor caustik with some of his favorite typedefs
|
||||
// ******************************************************************
|
||||
typedef signed int sint;
|
||||
typedef unsigned int uint;
|
||||
|
||||
typedef char int08;
|
||||
typedef short int16;
|
||||
typedef long int32;
|
||||
|
||||
typedef unsigned char uint08;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned long uint32;
|
||||
|
||||
typedef signed char sint08;
|
||||
typedef signed short sint16;
|
||||
typedef signed long sint32;
|
||||
|
||||
// ******************************************************************
|
||||
// * Humor Bigboy with some of his favorite typedefs :)
|
||||
// ******************************************************************
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
|
||||
// ******************************************************************
|
||||
// * XBox Kernel
|
||||
// ******************************************************************
|
||||
#include "xboxkrnl/xboxkrnl.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XHal
|
||||
// ******************************************************************
|
||||
#include "xhal/xhal.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XVGA
|
||||
// ******************************************************************
|
||||
#include "xvga/xvga.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XUSB (being removed...)
|
||||
// ******************************************************************
|
||||
//#include "xusb/xusb.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XINPUT (Gamepad Support)
|
||||
// ******************************************************************
|
||||
//#include "xinput/xinput.h"
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : openxdk.h
|
||||
// *
|
||||
// * note : Welcome To Heaven
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef OPENXDK_H
|
||||
#define OPENXDK_H
|
||||
|
||||
// ******************************************************************
|
||||
// * OpenXDK Version Number
|
||||
// ******************************************************************
|
||||
#define OPENXDK_VERSION "0.1.0-Pre1"
|
||||
|
||||
// ******************************************************************
|
||||
// * OpenXDK Full Title
|
||||
// ******************************************************************
|
||||
#define OPENXDK_TITLE "OpenXDK " OPENXDK_VERSION
|
||||
|
||||
// ******************************************************************
|
||||
// * Humor caustik with some of his favorite typedefs
|
||||
// ******************************************************************
|
||||
typedef signed int sint;
|
||||
typedef unsigned int uint;
|
||||
|
||||
typedef char int08;
|
||||
typedef short int16;
|
||||
typedef long int32;
|
||||
|
||||
typedef unsigned char uint08;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned long uint32;
|
||||
|
||||
typedef signed char sint08;
|
||||
typedef signed short sint16;
|
||||
typedef signed long sint32;
|
||||
|
||||
// ******************************************************************
|
||||
// * Humor Bigboy with some of his favorite typedefs :)
|
||||
// ******************************************************************
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
|
||||
// ******************************************************************
|
||||
// * XBox Kernel
|
||||
// ******************************************************************
|
||||
#include "xboxkrnl/xboxkrnl.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XHal
|
||||
// ******************************************************************
|
||||
#include "xhal/xhal.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XVGA
|
||||
// ******************************************************************
|
||||
#include "xvga/xvga.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XUSB (being removed...)
|
||||
// ******************************************************************
|
||||
//#include "xusb/xusb.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XINPUT (Gamepad Support)
|
||||
// ******************************************************************
|
||||
//#include "xinput/xinput.h"
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : dbg.h
|
||||
// *
|
||||
// * note : XBox Kernel *Debug* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_DBG_H
|
||||
#define XBOXKRNL_DBG_H
|
||||
|
||||
XBSYSAPI VOID *DbgBreakPoint;
|
||||
XBSYSAPI VOID *DbgBreakPointWithStatus;
|
||||
XBSYSAPI VOID *DbgLoadImageSymbols;
|
||||
XBSYSAPI VOID *DbgPrint;
|
||||
XBSYSAPI VOID *DbgPrompt;
|
||||
XBSYSAPI VOID *DbgUnLoadImageSymbols;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : dbg.h
|
||||
// *
|
||||
// * note : XBox Kernel *Debug* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_DBG_H
|
||||
#define XBOXKRNL_DBG_H
|
||||
|
||||
XBSYSAPI VOID *DbgBreakPoint;
|
||||
XBSYSAPI VOID *DbgBreakPointWithStatus;
|
||||
XBSYSAPI VOID *DbgLoadImageSymbols;
|
||||
XBSYSAPI VOID *DbgPrint;
|
||||
XBSYSAPI VOID *DbgPrompt;
|
||||
XBSYSAPI VOID *DbgUnLoadImageSymbols;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,96 +1,96 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ex.h
|
||||
// *
|
||||
// * note : XBox Kernel *Executive* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_EX_H
|
||||
#define XBOXKRNL_EX_H
|
||||
|
||||
XBSYSAPI VOID *ExAcquireReadWriteLockExclusive;
|
||||
XBSYSAPI VOID *ExAcquireReadWriteLockShared;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExAllocatePool
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Allocates pool memory
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(14) PVOID NTAPI ExAllocatePool
|
||||
(
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExAllocatePoolWithTag;
|
||||
XBSYSAPI VOID *ExEventObjectType;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExFreePool
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Deallocates a block of pool memory
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(17) PVOID NTAPI ExFreePool
|
||||
(
|
||||
IN PVOID P
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExInitializeReadWriteLock;
|
||||
XBSYSAPI VOID *ExInterlockedAddLargeInteger;
|
||||
XBSYSAPI VOID *ExInterlockedAddLargeStatistic;
|
||||
XBSYSAPI VOID *ExInterlockedCompareExchange64;
|
||||
XBSYSAPI VOID *ExMutantObjectType;
|
||||
XBSYSAPI VOID *ExQueryPoolBlockSize;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExQueryNonVolatileSetting
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(24) NTSTATUS NTAPI ExQueryNonVolatileSetting
|
||||
(
|
||||
IN DWORD ValueIndex,
|
||||
OUT DWORD *Type,
|
||||
OUT PUCHAR Value,
|
||||
IN SIZE_T ValueLength,
|
||||
OUT PSIZE_T ResultLength OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExReadWriteRefurbInfo;
|
||||
XBSYSAPI VOID *ExRaiseException;
|
||||
XBSYSAPI VOID *ExRaiseStatus;
|
||||
XBSYSAPI VOID *ExReleaseReadWriteLock;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExSaveNonVolatileSetting
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(29) NTSTATUS NTAPI ExSaveNonVolatileSetting
|
||||
(
|
||||
IN DWORD ValueIndex,
|
||||
OUT DWORD *Type,
|
||||
IN PUCHAR Value,
|
||||
IN SIZE_T ValueLength
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExSemaphoreObjectType;
|
||||
XBSYSAPI VOID *ExTimerObjectType;
|
||||
XBSYSAPI VOID *ExfInterlockedInsertHeadList;
|
||||
XBSYSAPI VOID *ExfInterlockedInsertTailList;
|
||||
XBSYSAPI VOID *ExfInterlockedRemoveHeadList;
|
||||
XBSYSAPI VOID *InterlockedCompareExchange;
|
||||
XBSYSAPI VOID *InterlockedDecrement;
|
||||
XBSYSAPI VOID *InterlockedIncrement;
|
||||
XBSYSAPI VOID *InterlockedExchange;
|
||||
XBSYSAPI VOID *InterlockedExchangeAdd;
|
||||
XBSYSAPI VOID *InterlockedFlushSList;
|
||||
XBSYSAPI VOID *InterlockedPopEntrySList;
|
||||
XBSYSAPI VOID *InterlockedPushEntrySList;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ex.h
|
||||
// *
|
||||
// * note : XBox Kernel *Executive* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_EX_H
|
||||
#define XBOXKRNL_EX_H
|
||||
|
||||
XBSYSAPI VOID *ExAcquireReadWriteLockExclusive;
|
||||
XBSYSAPI VOID *ExAcquireReadWriteLockShared;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExAllocatePool
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Allocates pool memory
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(14) PVOID NTAPI ExAllocatePool
|
||||
(
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExAllocatePoolWithTag;
|
||||
XBSYSAPI VOID *ExEventObjectType;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExFreePool
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Deallocates a block of pool memory
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(17) PVOID NTAPI ExFreePool
|
||||
(
|
||||
IN PVOID P
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExInitializeReadWriteLock;
|
||||
XBSYSAPI VOID *ExInterlockedAddLargeInteger;
|
||||
XBSYSAPI VOID *ExInterlockedAddLargeStatistic;
|
||||
XBSYSAPI VOID *ExInterlockedCompareExchange64;
|
||||
XBSYSAPI VOID *ExMutantObjectType;
|
||||
XBSYSAPI VOID *ExQueryPoolBlockSize;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExQueryNonVolatileSetting
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(24) NTSTATUS NTAPI ExQueryNonVolatileSetting
|
||||
(
|
||||
IN DWORD ValueIndex,
|
||||
OUT DWORD *Type,
|
||||
OUT PUCHAR Value,
|
||||
IN SIZE_T ValueLength,
|
||||
OUT PSIZE_T ResultLength OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExReadWriteRefurbInfo;
|
||||
XBSYSAPI VOID *ExRaiseException;
|
||||
XBSYSAPI VOID *ExRaiseStatus;
|
||||
XBSYSAPI VOID *ExReleaseReadWriteLock;
|
||||
|
||||
// ******************************************************************
|
||||
// * ExSaveNonVolatileSetting
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(29) NTSTATUS NTAPI ExSaveNonVolatileSetting
|
||||
(
|
||||
IN DWORD ValueIndex,
|
||||
OUT DWORD *Type,
|
||||
IN PUCHAR Value,
|
||||
IN SIZE_T ValueLength
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *ExSemaphoreObjectType;
|
||||
XBSYSAPI VOID *ExTimerObjectType;
|
||||
XBSYSAPI VOID *ExfInterlockedInsertHeadList;
|
||||
XBSYSAPI VOID *ExfInterlockedInsertTailList;
|
||||
XBSYSAPI VOID *ExfInterlockedRemoveHeadList;
|
||||
XBSYSAPI VOID *InterlockedCompareExchange;
|
||||
XBSYSAPI VOID *InterlockedDecrement;
|
||||
XBSYSAPI VOID *InterlockedIncrement;
|
||||
XBSYSAPI VOID *InterlockedExchange;
|
||||
XBSYSAPI VOID *InterlockedExchangeAdd;
|
||||
XBSYSAPI VOID *InterlockedFlushSList;
|
||||
XBSYSAPI VOID *InterlockedPopEntrySList;
|
||||
XBSYSAPI VOID *InterlockedPushEntrySList;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,148 +1,148 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : hal.h
|
||||
// *
|
||||
// * note : XBox Kernel *Hardware Abstraction Layer* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_HAL_H
|
||||
#define XBOXKRNL_HAL_H
|
||||
|
||||
XBSYSAPI VOID *HalReadSMCTrayState;
|
||||
XBSYSAPI VOID *HalClearSoftwareInterrupt;
|
||||
XBSYSAPI VOID *HalDisableSystemInterrupt;
|
||||
XBSYSAPI VOID *HalDiskCachePartitionCount;
|
||||
XBSYSAPI VOID *HalDiskModelNumber;
|
||||
XBSYSAPI VOID *HalDiskSerialNumber;
|
||||
XBSYSAPI VOID *HalEnableSystemInterrupt;
|
||||
XBSYSAPI VOID *HalGetInterruptVector;
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadSMBusValue
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(45) VOID NTAPI HalReadSMBusValue
|
||||
(
|
||||
ULONG BusNumber,
|
||||
ULONG SlotNumber,
|
||||
ULONG RegisterNumber,
|
||||
PVOID Buffer,
|
||||
ULONG Length,
|
||||
BOOLEAN WritePCISpace
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadWritePCISpace
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(46) VOID NTAPI HalReadWritePCISpace
|
||||
(
|
||||
IN ULONG BusNumber,
|
||||
IN ULONG SlotNumber,
|
||||
IN ULONG RegisterNumber,
|
||||
IN PVOID Buffer,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN WritePCISpace
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *HalRegisterShutdownNotification;
|
||||
XBSYSAPI VOID *HalRequestSoftwareInterrupt;
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReturnToFirmware
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Reboot / Shutdown / Etc
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(49) VOID DECLSPEC_NORETURN HalReturnToFirmware
|
||||
(
|
||||
RETURN_FIRMWARE Routine
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalWriteSMBusValue
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(50) ULONG NTAPI HalWriteSMBusValue
|
||||
(
|
||||
UCHAR Address,
|
||||
UCHAR Command,
|
||||
BOOLEAN WordFlag,
|
||||
ULONG Value
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalBootSMCVideoMode
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(356) DWORD HalBootSMCVideoMode;
|
||||
|
||||
XBSYSAPI VOID *HalIsResetOrShutdownPending;
|
||||
XBSYSAPI VOID *HalInitiateShutdown;
|
||||
XBSYSAPI VOID *HalEnableSecureTrayEject;
|
||||
XBSYSAPI VOID *HalWriteSMCScratchRegister;
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_UCHAR
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(329) VOID NTAPI READ_PORT_BUFFER_UCHAR
|
||||
(
|
||||
IN PUCHAR Port,
|
||||
IN PUCHAR Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_USHORT
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(330) VOID NTAPI READ_PORT_BUFFER_USHORT
|
||||
(
|
||||
IN PUSHORT Port,
|
||||
IN PUSHORT Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_ULONG
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(331) VOID NTAPI READ_PORT_BUFFER_ULONG
|
||||
(
|
||||
IN PULONG Port,
|
||||
IN PULONG Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_UCHAR
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(332) VOID NTAPI WRITE_PORT_BUFFER_UCHAR
|
||||
(
|
||||
IN PUCHAR Port,
|
||||
IN PUCHAR Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_USHORT
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(333) VOID NTAPI WRITE_PORT_BUFFER_USHORT
|
||||
(
|
||||
IN PUSHORT Port,
|
||||
IN PUSHORT Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_ULONG
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(334) VOID NTAPI WRITE_PORT_BUFFER_ULONG
|
||||
(
|
||||
IN PULONG Port,
|
||||
IN PULONG Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : hal.h
|
||||
// *
|
||||
// * note : XBox Kernel *Hardware Abstraction Layer* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_HAL_H
|
||||
#define XBOXKRNL_HAL_H
|
||||
|
||||
XBSYSAPI VOID *HalReadSMCTrayState;
|
||||
XBSYSAPI VOID *HalClearSoftwareInterrupt;
|
||||
XBSYSAPI VOID *HalDisableSystemInterrupt;
|
||||
XBSYSAPI VOID *HalDiskCachePartitionCount;
|
||||
XBSYSAPI VOID *HalDiskModelNumber;
|
||||
XBSYSAPI VOID *HalDiskSerialNumber;
|
||||
XBSYSAPI VOID *HalEnableSystemInterrupt;
|
||||
XBSYSAPI VOID *HalGetInterruptVector;
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadSMBusValue
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(45) VOID NTAPI HalReadSMBusValue
|
||||
(
|
||||
ULONG BusNumber,
|
||||
ULONG SlotNumber,
|
||||
ULONG RegisterNumber,
|
||||
PVOID Buffer,
|
||||
ULONG Length,
|
||||
BOOLEAN WritePCISpace
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadWritePCISpace
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(46) VOID NTAPI HalReadWritePCISpace
|
||||
(
|
||||
IN ULONG BusNumber,
|
||||
IN ULONG SlotNumber,
|
||||
IN ULONG RegisterNumber,
|
||||
IN PVOID Buffer,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN WritePCISpace
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *HalRegisterShutdownNotification;
|
||||
XBSYSAPI VOID *HalRequestSoftwareInterrupt;
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReturnToFirmware
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Reboot / Shutdown / Etc
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(49) VOID DECLSPEC_NORETURN HalReturnToFirmware
|
||||
(
|
||||
RETURN_FIRMWARE Routine
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalWriteSMBusValue
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(50) ULONG NTAPI HalWriteSMBusValue
|
||||
(
|
||||
UCHAR Address,
|
||||
UCHAR Command,
|
||||
BOOLEAN WordFlag,
|
||||
ULONG Value
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalBootSMCVideoMode
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(356) DWORD HalBootSMCVideoMode;
|
||||
|
||||
XBSYSAPI VOID *HalIsResetOrShutdownPending;
|
||||
XBSYSAPI VOID *HalInitiateShutdown;
|
||||
XBSYSAPI VOID *HalEnableSecureTrayEject;
|
||||
XBSYSAPI VOID *HalWriteSMCScratchRegister;
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_UCHAR
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(329) VOID NTAPI READ_PORT_BUFFER_UCHAR
|
||||
(
|
||||
IN PUCHAR Port,
|
||||
IN PUCHAR Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_USHORT
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(330) VOID NTAPI READ_PORT_BUFFER_USHORT
|
||||
(
|
||||
IN PUSHORT Port,
|
||||
IN PUSHORT Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_ULONG
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(331) VOID NTAPI READ_PORT_BUFFER_ULONG
|
||||
(
|
||||
IN PULONG Port,
|
||||
IN PULONG Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_UCHAR
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(332) VOID NTAPI WRITE_PORT_BUFFER_UCHAR
|
||||
(
|
||||
IN PUCHAR Port,
|
||||
IN PUCHAR Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_USHORT
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(333) VOID NTAPI WRITE_PORT_BUFFER_USHORT
|
||||
(
|
||||
IN PUSHORT Port,
|
||||
IN PUSHORT Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_ULONG
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(334) VOID NTAPI WRITE_PORT_BUFFER_ULONG
|
||||
(
|
||||
IN PULONG Port,
|
||||
IN PULONG Buffer,
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,83 +1,83 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : io.h
|
||||
// *
|
||||
// * note : XBox Kernel *I/O Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_IO_H
|
||||
#define XBOXKRNL_IO_H
|
||||
|
||||
XBSYSAPI VOID *IoAllocateIrp;
|
||||
XBSYSAPI VOID *IoBuildAsynchronousFsdRequest;
|
||||
XBSYSAPI VOID *IoBuildDeviceIoControlRequest;
|
||||
XBSYSAPI VOID *IoBuildSynchronousFsdRequest;
|
||||
XBSYSAPI VOID *IoCheckShareAccess;
|
||||
XBSYSAPI VOID *IoCompletionObjectType;
|
||||
XBSYSAPI VOID *IoCreateDevice;
|
||||
|
||||
// ******************************************************************
|
||||
// * IoCreateFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(66) NTSTATUS NTAPI IoCreateFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PLARGE_INTEGER AllocationSize,
|
||||
IN ULONG FileAttributes,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG Disposition,
|
||||
IN ULONG CreateOptions,
|
||||
IN ULONG Options
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * IoCreateSymbolicLink
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(67) NTSTATUS NTAPI IoCreateSymbolicLink
|
||||
(
|
||||
IN PSTRING SymbolicLinkName,
|
||||
IN PSTRING DeviceName
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *IoDeleteDevice;
|
||||
|
||||
// ******************************************************************
|
||||
// * IoDeleteSymbolicLink
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(69) NTSTATUS NTAPI IoDeleteSymbolicLink
|
||||
(
|
||||
IN PSTRING SymbolicLinkName
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *IoDeviceObjectType;
|
||||
XBSYSAPI VOID *IoFileObjectType;
|
||||
XBSYSAPI VOID *IoFreeIrp;
|
||||
XBSYSAPI VOID *IoInitializeIrp;
|
||||
XBSYSAPI VOID *IoInvalidDeviceRequest;
|
||||
XBSYSAPI VOID *IoQueryFileInformation;
|
||||
XBSYSAPI VOID *IoQueryVolumeInformation;
|
||||
XBSYSAPI VOID *IoQueueThreadIrp;
|
||||
XBSYSAPI VOID *IoRemoveShareAccess;
|
||||
XBSYSAPI VOID *IoSetIoCompletion;
|
||||
XBSYSAPI VOID *IoSetShareAccess;
|
||||
XBSYSAPI VOID *IoStartNextPacket;
|
||||
XBSYSAPI VOID *IoStartNextPacketByKey;
|
||||
XBSYSAPI VOID *IoStartPacket;
|
||||
XBSYSAPI VOID *IoSynchronousDeviceIoControlRequest;
|
||||
XBSYSAPI VOID *IoSynchronousFsdRequest;
|
||||
XBSYSAPI VOID *IofCallDriver;
|
||||
XBSYSAPI VOID *IofCompleteRequest;
|
||||
XBSYSAPI VOID *IoDismountVolume;
|
||||
XBSYSAPI VOID *IoDismountVolumeByName;
|
||||
XBSYSAPI VOID *IoMarkIrpMustComplete;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : io.h
|
||||
// *
|
||||
// * note : XBox Kernel *I/O Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_IO_H
|
||||
#define XBOXKRNL_IO_H
|
||||
|
||||
XBSYSAPI VOID *IoAllocateIrp;
|
||||
XBSYSAPI VOID *IoBuildAsynchronousFsdRequest;
|
||||
XBSYSAPI VOID *IoBuildDeviceIoControlRequest;
|
||||
XBSYSAPI VOID *IoBuildSynchronousFsdRequest;
|
||||
XBSYSAPI VOID *IoCheckShareAccess;
|
||||
XBSYSAPI VOID *IoCompletionObjectType;
|
||||
XBSYSAPI VOID *IoCreateDevice;
|
||||
|
||||
// ******************************************************************
|
||||
// * IoCreateFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(66) NTSTATUS NTAPI IoCreateFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PLARGE_INTEGER AllocationSize,
|
||||
IN ULONG FileAttributes,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG Disposition,
|
||||
IN ULONG CreateOptions,
|
||||
IN ULONG Options
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * IoCreateSymbolicLink
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(67) NTSTATUS NTAPI IoCreateSymbolicLink
|
||||
(
|
||||
IN PSTRING SymbolicLinkName,
|
||||
IN PSTRING DeviceName
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *IoDeleteDevice;
|
||||
|
||||
// ******************************************************************
|
||||
// * IoDeleteSymbolicLink
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(69) NTSTATUS NTAPI IoDeleteSymbolicLink
|
||||
(
|
||||
IN PSTRING SymbolicLinkName
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *IoDeviceObjectType;
|
||||
XBSYSAPI VOID *IoFileObjectType;
|
||||
XBSYSAPI VOID *IoFreeIrp;
|
||||
XBSYSAPI VOID *IoInitializeIrp;
|
||||
XBSYSAPI VOID *IoInvalidDeviceRequest;
|
||||
XBSYSAPI VOID *IoQueryFileInformation;
|
||||
XBSYSAPI VOID *IoQueryVolumeInformation;
|
||||
XBSYSAPI VOID *IoQueueThreadIrp;
|
||||
XBSYSAPI VOID *IoRemoveShareAccess;
|
||||
XBSYSAPI VOID *IoSetIoCompletion;
|
||||
XBSYSAPI VOID *IoSetShareAccess;
|
||||
XBSYSAPI VOID *IoStartNextPacket;
|
||||
XBSYSAPI VOID *IoStartNextPacketByKey;
|
||||
XBSYSAPI VOID *IoStartPacket;
|
||||
XBSYSAPI VOID *IoSynchronousDeviceIoControlRequest;
|
||||
XBSYSAPI VOID *IoSynchronousFsdRequest;
|
||||
XBSYSAPI VOID *IofCallDriver;
|
||||
XBSYSAPI VOID *IofCompleteRequest;
|
||||
XBSYSAPI VOID *IoDismountVolume;
|
||||
XBSYSAPI VOID *IoDismountVolumeByName;
|
||||
XBSYSAPI VOID *IoMarkIrpMustComplete;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,165 +1,165 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : kernel.h
|
||||
// *
|
||||
// * note : XBox Kernel Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef KERNEL_H
|
||||
#define KERNEL_H
|
||||
|
||||
XBSYSAPI VOID *KeAlertResumeThread;
|
||||
XBSYSAPI VOID *KeAlertThread;
|
||||
XBSYSAPI VOID *KeBoostPriorityThread;
|
||||
XBSYSAPI VOID *KeBugCheck;
|
||||
XBSYSAPI VOID *KeBugCheckEx;
|
||||
XBSYSAPI VOID *KeCancelTimer;
|
||||
XBSYSAPI VOID *KeConnectInterrupt;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeDelayExecutionThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(99) NTSTATUS NTAPI KeDelayExecutionThread
|
||||
(
|
||||
IN KPROCESSOR_MODE WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Interval
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeDisconnectInterrupt;
|
||||
XBSYSAPI VOID *KeEnterCriticalRegion;
|
||||
XBSYSAPI VOID *KeGetCurrentIrql;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeGetCurrentThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI VOID *KeGetCurrentThread;
|
||||
|
||||
XBSYSAPI VOID *KeInitializeApc;
|
||||
XBSYSAPI VOID *KeInitializeDeviceQueue;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeInitializeDpc
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(107) VOID NTAPI KeInitializeDpc
|
||||
(
|
||||
KDPC *Dpc,
|
||||
PKDEFERRED_ROUTINE DeferredRoutine,
|
||||
PVOID DeferredContext
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeInitializeEvent;
|
||||
XBSYSAPI VOID *KeInitializeInterrupt;
|
||||
XBSYSAPI VOID *KeInitializeMutant;
|
||||
XBSYSAPI VOID *KeInitializeQueue;
|
||||
XBSYSAPI VOID *KeInitializeSemaphore;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeInitializeTimerEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(113) VOID NTAPI KeInitializeTimerEx
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN TIMER_TYPE Type
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeInsertByKeyDeviceQueue;
|
||||
XBSYSAPI VOID *KeInsertDeviceQueue;
|
||||
XBSYSAPI VOID *KeInsertHeadQueue;
|
||||
XBSYSAPI VOID *KeInsertQueue;
|
||||
XBSYSAPI VOID *KeInsertQueueApc;
|
||||
XBSYSAPI VOID *KeInsertQueueDpc;
|
||||
XBSYSAPI VOID *KeInterruptTime;
|
||||
XBSYSAPI VOID *KeIsExecutingDpc;
|
||||
XBSYSAPI VOID *KeLeaveCriticalRegion;
|
||||
XBSYSAPI VOID *KePulseEvent;
|
||||
XBSYSAPI VOID *KeQueryBasePriorityThread;
|
||||
XBSYSAPI VOID *KeQueryInterruptTime;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeQueryPerformanceCounter
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(126) ULONGLONG NTAPI KeQueryPerformanceCounter();
|
||||
|
||||
// ******************************************************************
|
||||
// * KeQueryPerformanceFrequency
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(127) ULONGLONG NTAPI KeQueryPerformanceFrequency();
|
||||
|
||||
// ******************************************************************
|
||||
// * KeQuerySystemTime
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(128) VOID NTAPI KeQuerySystemTime
|
||||
(
|
||||
PLARGE_INTEGER CurrentTime
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeRaiseIrqlToDpcLevel;
|
||||
XBSYSAPI VOID *KeRaiseIrqlToSynchLevel;
|
||||
XBSYSAPI VOID *KeReleaseMutant;
|
||||
XBSYSAPI VOID *KeReleaseSemaphore;
|
||||
XBSYSAPI VOID *KeRemoveByKeyDeviceQueue;
|
||||
XBSYSAPI VOID *KeRemoveDeviceQueue;
|
||||
XBSYSAPI VOID *KeRemoveEntryDeviceQueue;
|
||||
XBSYSAPI VOID *KeRemoveQueue;
|
||||
XBSYSAPI VOID *KeRemoveQueueDpc;
|
||||
XBSYSAPI VOID *KeResetEvent;
|
||||
XBSYSAPI VOID *KeRestoreFloatingPointState;
|
||||
XBSYSAPI VOID *KeResumeThread;
|
||||
XBSYSAPI VOID *KeRundownQueue;
|
||||
XBSYSAPI VOID *KeSaveFloatingPointState;
|
||||
|
||||
//XBSYSAPI VOID *KeSetBasePriorityThread;
|
||||
XBSYSAPI EXPORTNUM(143) BOOLEAN NTAPI KeSetBasePriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN PVOID Priority
|
||||
);
|
||||
|
||||
|
||||
|
||||
XBSYSAPI VOID *KeSetDisableBoostThread;
|
||||
XBSYSAPI VOID *KeSetEvent;
|
||||
XBSYSAPI VOID *KeSetEventBoostPriority;
|
||||
XBSYSAPI VOID *KeSetPriorityProcess;
|
||||
|
||||
//XBSYSAPI VOID *KeSetPriorityThread;
|
||||
XBSYSAPI EXPORTNUM(148) BOOLEAN NTAPI KeSetPriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN PVOID Priority
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * KeSetTimer
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(149) BOOLEAN NTAPI KeSetTimer
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN LARGE_INTEGER DueTime,
|
||||
IN PKDPC Dpc OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeSetTimerEx;
|
||||
XBSYSAPI VOID *KeStallExecutionProcessor;
|
||||
XBSYSAPI VOID *KeSuspendThread;
|
||||
XBSYSAPI VOID *KeSynchronizeExecution;
|
||||
XBSYSAPI VOID *KeSystemTime;
|
||||
XBSYSAPI VOID *KeTestAlertThread;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeTickCount
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(156) volatile DWORD KeTickCount;
|
||||
|
||||
XBSYSAPI VOID *KeTimeIncrement;
|
||||
XBSYSAPI VOID *KeWaitForMultipleObjects;
|
||||
XBSYSAPI VOID *KeWaitForSingleObject;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : kernel.h
|
||||
// *
|
||||
// * note : XBox Kernel Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef KERNEL_H
|
||||
#define KERNEL_H
|
||||
|
||||
XBSYSAPI VOID *KeAlertResumeThread;
|
||||
XBSYSAPI VOID *KeAlertThread;
|
||||
XBSYSAPI VOID *KeBoostPriorityThread;
|
||||
XBSYSAPI VOID *KeBugCheck;
|
||||
XBSYSAPI VOID *KeBugCheckEx;
|
||||
XBSYSAPI VOID *KeCancelTimer;
|
||||
XBSYSAPI VOID *KeConnectInterrupt;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeDelayExecutionThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(99) NTSTATUS NTAPI KeDelayExecutionThread
|
||||
(
|
||||
IN KPROCESSOR_MODE WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Interval
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeDisconnectInterrupt;
|
||||
XBSYSAPI VOID *KeEnterCriticalRegion;
|
||||
XBSYSAPI VOID *KeGetCurrentIrql;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeGetCurrentThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI VOID *KeGetCurrentThread;
|
||||
|
||||
XBSYSAPI VOID *KeInitializeApc;
|
||||
XBSYSAPI VOID *KeInitializeDeviceQueue;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeInitializeDpc
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(107) VOID NTAPI KeInitializeDpc
|
||||
(
|
||||
KDPC *Dpc,
|
||||
PKDEFERRED_ROUTINE DeferredRoutine,
|
||||
PVOID DeferredContext
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeInitializeEvent;
|
||||
XBSYSAPI VOID *KeInitializeInterrupt;
|
||||
XBSYSAPI VOID *KeInitializeMutant;
|
||||
XBSYSAPI VOID *KeInitializeQueue;
|
||||
XBSYSAPI VOID *KeInitializeSemaphore;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeInitializeTimerEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(113) VOID NTAPI KeInitializeTimerEx
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN TIMER_TYPE Type
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeInsertByKeyDeviceQueue;
|
||||
XBSYSAPI VOID *KeInsertDeviceQueue;
|
||||
XBSYSAPI VOID *KeInsertHeadQueue;
|
||||
XBSYSAPI VOID *KeInsertQueue;
|
||||
XBSYSAPI VOID *KeInsertQueueApc;
|
||||
XBSYSAPI VOID *KeInsertQueueDpc;
|
||||
XBSYSAPI VOID *KeInterruptTime;
|
||||
XBSYSAPI VOID *KeIsExecutingDpc;
|
||||
XBSYSAPI VOID *KeLeaveCriticalRegion;
|
||||
XBSYSAPI VOID *KePulseEvent;
|
||||
XBSYSAPI VOID *KeQueryBasePriorityThread;
|
||||
XBSYSAPI VOID *KeQueryInterruptTime;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeQueryPerformanceCounter
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(126) ULONGLONG NTAPI KeQueryPerformanceCounter();
|
||||
|
||||
// ******************************************************************
|
||||
// * KeQueryPerformanceFrequency
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(127) ULONGLONG NTAPI KeQueryPerformanceFrequency();
|
||||
|
||||
// ******************************************************************
|
||||
// * KeQuerySystemTime
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(128) VOID NTAPI KeQuerySystemTime
|
||||
(
|
||||
PLARGE_INTEGER CurrentTime
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeRaiseIrqlToDpcLevel;
|
||||
XBSYSAPI VOID *KeRaiseIrqlToSynchLevel;
|
||||
XBSYSAPI VOID *KeReleaseMutant;
|
||||
XBSYSAPI VOID *KeReleaseSemaphore;
|
||||
XBSYSAPI VOID *KeRemoveByKeyDeviceQueue;
|
||||
XBSYSAPI VOID *KeRemoveDeviceQueue;
|
||||
XBSYSAPI VOID *KeRemoveEntryDeviceQueue;
|
||||
XBSYSAPI VOID *KeRemoveQueue;
|
||||
XBSYSAPI VOID *KeRemoveQueueDpc;
|
||||
XBSYSAPI VOID *KeResetEvent;
|
||||
XBSYSAPI VOID *KeRestoreFloatingPointState;
|
||||
XBSYSAPI VOID *KeResumeThread;
|
||||
XBSYSAPI VOID *KeRundownQueue;
|
||||
XBSYSAPI VOID *KeSaveFloatingPointState;
|
||||
|
||||
//XBSYSAPI VOID *KeSetBasePriorityThread;
|
||||
XBSYSAPI EXPORTNUM(143) BOOLEAN NTAPI KeSetBasePriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN PVOID Priority
|
||||
);
|
||||
|
||||
|
||||
|
||||
XBSYSAPI VOID *KeSetDisableBoostThread;
|
||||
XBSYSAPI VOID *KeSetEvent;
|
||||
XBSYSAPI VOID *KeSetEventBoostPriority;
|
||||
XBSYSAPI VOID *KeSetPriorityProcess;
|
||||
|
||||
//XBSYSAPI VOID *KeSetPriorityThread;
|
||||
XBSYSAPI EXPORTNUM(148) BOOLEAN NTAPI KeSetPriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN PVOID Priority
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * KeSetTimer
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(149) BOOLEAN NTAPI KeSetTimer
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN LARGE_INTEGER DueTime,
|
||||
IN PKDPC Dpc OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeSetTimerEx;
|
||||
XBSYSAPI VOID *KeStallExecutionProcessor;
|
||||
XBSYSAPI VOID *KeSuspendThread;
|
||||
XBSYSAPI VOID *KeSynchronizeExecution;
|
||||
XBSYSAPI VOID *KeSystemTime;
|
||||
XBSYSAPI VOID *KeTestAlertThread;
|
||||
|
||||
// ******************************************************************
|
||||
// * KeTickCount
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(156) volatile DWORD KeTickCount;
|
||||
|
||||
XBSYSAPI VOID *KeTimeIncrement;
|
||||
XBSYSAPI VOID *KeWaitForMultipleObjects;
|
||||
XBSYSAPI VOID *KeWaitForSingleObject;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,146 +1,146 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : mm.h
|
||||
// *
|
||||
// * note : XBox Kernel *Memory Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_MM_H
|
||||
#define XBOXKRNL_MM_H
|
||||
|
||||
XBSYSAPI VOID *MmGlobalData;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateContiguousMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Allocates a range of physically contiguous, cache-aligned
|
||||
// * memory from nonpaged pool (main pool on xbox).
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(165) PVOID NTAPI MmAllocateContiguousMemory
|
||||
(
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateContiguousMemoryEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(166) PVOID NTAPI MmAllocateContiguousMemoryEx
|
||||
(
|
||||
IN ULONG NumberOfBytes,
|
||||
IN PHYSICAL_ADDRESS LowestAcceptableAddress,
|
||||
IN PHYSICAL_ADDRESS HighestAcceptableAddress,
|
||||
IN ULONG Alignment OPTIONAL,
|
||||
IN ULONG ProtectionType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateSystemMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(167) PVOID NTAPI MmAllocateSystemMemory
|
||||
(
|
||||
ULONG NumberOfBytes,
|
||||
ULONG Protect
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmClaimGpuInstanceMemory;
|
||||
XBSYSAPI VOID *MmCreateKernelStack;
|
||||
XBSYSAPI VOID *MmDeleteKernelStack;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmFreeContiguousMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(171) VOID NTAPI MmFreeContiguousMemory
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmFreeSystemMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(172) NTSTATUS NTAPI MmFreeSystemMemory
|
||||
(
|
||||
PVOID BaseAddress,
|
||||
ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmGetPhysicalAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(173) PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmIsAddressValid;
|
||||
|
||||
//XBSYSAPI VOID *MmLockUnlockBufferPages;
|
||||
XBSYSAPI EXPORTNUM(175) PHYSICAL_ADDRESS NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
|
||||
XBSYSAPI VOID *MmLockUnlockPhysicalPage;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmMapIoSpace
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(177) PVOID NTAPI MmMapIoSpace
|
||||
(
|
||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmPersistContiguousMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(178) VOID NTAPI MmPersistContiguousMemory
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN BOOLEAN Persist
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmQueryAddressProtect;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmQueryAllocationSize
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(180) ULONG NTAPI MmQueryAllocationSize
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmQueryStatistics
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(181) NTSTATUS NTAPI MmQueryStatistics
|
||||
(
|
||||
OUT PMM_STATISTICS MemoryStatistics
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmSetAddressProtect
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(182) VOID NTAPI MmSetAddressProtect
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG NewProtect
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmUnmapIoSpace;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : mm.h
|
||||
// *
|
||||
// * note : XBox Kernel *Memory Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_MM_H
|
||||
#define XBOXKRNL_MM_H
|
||||
|
||||
XBSYSAPI VOID *MmGlobalData;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateContiguousMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Allocates a range of physically contiguous, cache-aligned
|
||||
// * memory from nonpaged pool (main pool on xbox).
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(165) PVOID NTAPI MmAllocateContiguousMemory
|
||||
(
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateContiguousMemoryEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(166) PVOID NTAPI MmAllocateContiguousMemoryEx
|
||||
(
|
||||
IN ULONG NumberOfBytes,
|
||||
IN PHYSICAL_ADDRESS LowestAcceptableAddress,
|
||||
IN PHYSICAL_ADDRESS HighestAcceptableAddress,
|
||||
IN ULONG Alignment OPTIONAL,
|
||||
IN ULONG ProtectionType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateSystemMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(167) PVOID NTAPI MmAllocateSystemMemory
|
||||
(
|
||||
ULONG NumberOfBytes,
|
||||
ULONG Protect
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmClaimGpuInstanceMemory;
|
||||
XBSYSAPI VOID *MmCreateKernelStack;
|
||||
XBSYSAPI VOID *MmDeleteKernelStack;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmFreeContiguousMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(171) VOID NTAPI MmFreeContiguousMemory
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmFreeSystemMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(172) NTSTATUS NTAPI MmFreeSystemMemory
|
||||
(
|
||||
PVOID BaseAddress,
|
||||
ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmGetPhysicalAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(173) PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmIsAddressValid;
|
||||
|
||||
//XBSYSAPI VOID *MmLockUnlockBufferPages;
|
||||
XBSYSAPI EXPORTNUM(175) PHYSICAL_ADDRESS NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
|
||||
XBSYSAPI VOID *MmLockUnlockPhysicalPage;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmMapIoSpace
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(177) PVOID NTAPI MmMapIoSpace
|
||||
(
|
||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmPersistContiguousMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(178) VOID NTAPI MmPersistContiguousMemory
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN BOOLEAN Persist
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmQueryAddressProtect;
|
||||
|
||||
// ******************************************************************
|
||||
// * MmQueryAllocationSize
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(180) ULONG NTAPI MmQueryAllocationSize
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmQueryStatistics
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(181) NTSTATUS NTAPI MmQueryStatistics
|
||||
(
|
||||
OUT PMM_STATISTICS MemoryStatistics
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmSetAddressProtect
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(182) VOID NTAPI MmSetAddressProtect
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG NewProtect
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *MmUnmapIoSpace;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,374 +1,374 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : nt.h
|
||||
// *
|
||||
// * note : XBox Kernel *NT* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_NT_H
|
||||
#define XBOXKRNL_NT_H
|
||||
|
||||
// ******************************************************************
|
||||
// * NtAllocateVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(184) NTSTATUS NTAPI NtAllocateVirtualMemory
|
||||
(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN ULONG ZeroBits,
|
||||
IN OUT PULONG AllocationSize,
|
||||
IN DWORD AllocationType,
|
||||
IN DWORD Protect
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCancelTimer;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtClearEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(186) NTSTATUS NTAPI NtClearEvent
|
||||
(
|
||||
IN HANDLE EventHandle
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtClose
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Closes an object handle
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(187) NTSTATUS NTAPI NtClose
|
||||
(
|
||||
IN HANDLE Handle
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCreateDirectoryObject;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(189) NTSTATUS NTAPI NtCreateEvent
|
||||
(
|
||||
OUT PHANDLE EventHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN EVENT_TYPE EventType,
|
||||
IN BOOLEAN InitialState
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Causes a new file or directory to be created, or opens and
|
||||
// * existing file, device, directory, or volume, giving the caller
|
||||
// * a handle for the file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(190) NTSTATUS NTAPI NtCreateFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PLARGE_INTEGER AllocationSize OPTIONAL,
|
||||
IN ULONG FileAttributes,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG CreateDisposition,
|
||||
IN ULONG CreateOptions
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCreateIoCompletion;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateMutant
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(192) NTSTATUS NTAPI NtCreateMutant
|
||||
(
|
||||
OUT PHANDLE MutantHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN BOOLEAN InitialOwner
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCreateSemaphore;
|
||||
XBSYSAPI VOID *NtCreateTimer;
|
||||
XBSYSAPI VOID *NtDeleteFile;
|
||||
XBSYSAPI VOID *NtDeviceIoControlFile;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtDuplicateObject
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(197) NTSTATUS NTAPI NtDuplicateObject
|
||||
(
|
||||
PVOID SourceHandle,
|
||||
PVOID *TargetHandle,
|
||||
DWORD Options
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtFlushBuffersFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(198) NTSTATUS NTAPI NtFlushBuffersFile
|
||||
(
|
||||
PVOID FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtFreeVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(199) NTSTATUS NTAPI NtFreeVirtualMemory
|
||||
(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN OUT PULONG FreeSize,
|
||||
IN ULONG FreeType
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtFsControlFile;
|
||||
XBSYSAPI VOID *NtOpenDirectoryObject;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtOpenFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(202) NTSTATUS NTAPI NtOpenFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG OpenOptions
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtOpenSymbolicLinkObject;
|
||||
XBSYSAPI VOID *NtProtectVirtualMemory;
|
||||
XBSYSAPI VOID *NtPulseEvent;
|
||||
XBSYSAPI VOID *NtQueueApcThread;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryDirectoryFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(207) NTSTATUS NTAPI NtQueryDirectoryFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
IN PVOID ApcRoutine, // Todo: define this routine's prototype
|
||||
IN PVOID ApcContext,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT FILE_DIRECTORY_INFORMATION *FileInformation,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInformationClass,
|
||||
IN PSTRING FileMask,
|
||||
IN BOOLEAN RestartScan
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtQueryDirectoryObject;
|
||||
XBSYSAPI VOID *NtQueryEvent;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryFullAttributesFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(210) NTSTATUS NTAPI NtQueryFullAttributesFile
|
||||
(
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PVOID Attributes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryInformationFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Return various kinds of information about a given file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(211) NTSTATUS NTAPI NtQueryInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PVOID FileInformation,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInfo
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtQueryIoCompletion;
|
||||
XBSYSAPI VOID *NtQueryMutant;
|
||||
XBSYSAPI VOID *NtQuerySemaphore;
|
||||
XBSYSAPI VOID *NtQuerySymbolicLinkObject;
|
||||
XBSYSAPI VOID *NtQueryTimer;
|
||||
XBSYSAPI VOID *NtQueryVirtualMemory;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryVolumeInformationFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(218) NTSTATUS NTAPI NtQueryVolumeInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PFILE_FS_SIZE_INFORMATION FileInformation,
|
||||
IN ULONG Length,
|
||||
IN FS_INFORMATION_CLASS FileInformationClass
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtReadFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Read data from an opened file.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(219) NTSTATUS NTAPI NtReadFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
IN HANDLE Event OPTIONAL,
|
||||
IN PVOID ApcRoutine OPTIONAL,
|
||||
IN PVOID ApcContext,
|
||||
OUT PVOID IoStatusBlock,
|
||||
OUT PVOID Buffer,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtReadFileScatter;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtReleaseMutant
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(221) NTSTATUS NTAPI NtReleaseMutant
|
||||
(
|
||||
IN HANDLE MutantHandle,
|
||||
OUT PLONG PreviousCount
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtReleaseSemaphore;
|
||||
XBSYSAPI VOID *NtRemoveIoCompletion;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtResumeThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(224) NTSTATUS NTAPI NtResumeThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
OUT PULONG PreviousSuspendCount
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSetEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(225) NTSTATUS NTAPI NtSetEvent
|
||||
(
|
||||
IN HANDLE EventHandle,
|
||||
OUT PLONG PreviousState
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSetInformationFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Changes various kinds of information about a given file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(226) NTSTATUS NTAPI NtSetInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
OUT PVOID IoStatusBlock,
|
||||
IN PVOID FileInformation,
|
||||
IN ULONG Length,
|
||||
IN ULONG FileInformationClass
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtSetIoCompletion;
|
||||
XBSYSAPI VOID *NtSetSystemTime;
|
||||
XBSYSAPI VOID *NtSetTimerEx;
|
||||
XBSYSAPI VOID *NtSignalAndWaitForSingleObjectEx;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSuspendThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(231) NTSTATUS NTAPI NtSuspendThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
OUT PULONG PreviousSuspendCount OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtUserIoApcDispatcher
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(232) VOID NTAPI NtUserIoApcDispatcher
|
||||
(
|
||||
PVOID ApcContext,
|
||||
PIO_STATUS_BLOCK IoStatusBlock,
|
||||
ULONG Reserved
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForSingleObject
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Put the current thread into a wait state until the given
|
||||
// * dispatcher object is set to a signaled state or (optionally)
|
||||
// * until the wait times out.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(233) NTSTATUS NTAPI NtWaitForSingleObject
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PVOID Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForSingleObjectEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(234) NTSTATUS NTAPI NtWaitForSingleObjectEx
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN CHAR WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForMultipleObjectsEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(235) NTSTATUS NTAPI NtWaitForMultipleObjectsEx
|
||||
(
|
||||
IN ULONG Count,
|
||||
IN HANDLE *Handles,
|
||||
IN WAIT_TYPE WaitType,
|
||||
IN CHAR WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWriteFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Write data to an opened file.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(236) NTSTATUS NTAPI NtWriteFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
IN PVOID Event,
|
||||
IN PVOID ApcRoutine,
|
||||
IN PVOID ApcContext,
|
||||
OUT PVOID IoStatusBlock,
|
||||
IN PVOID Buffer,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtWriteFileGather;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtYieldExecution
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(238) VOID NTAPI NtYieldExecution();
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : nt.h
|
||||
// *
|
||||
// * note : XBox Kernel *NT* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_NT_H
|
||||
#define XBOXKRNL_NT_H
|
||||
|
||||
// ******************************************************************
|
||||
// * NtAllocateVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(184) NTSTATUS NTAPI NtAllocateVirtualMemory
|
||||
(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN ULONG ZeroBits,
|
||||
IN OUT PULONG AllocationSize,
|
||||
IN DWORD AllocationType,
|
||||
IN DWORD Protect
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCancelTimer;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtClearEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(186) NTSTATUS NTAPI NtClearEvent
|
||||
(
|
||||
IN HANDLE EventHandle
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtClose
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Closes an object handle
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(187) NTSTATUS NTAPI NtClose
|
||||
(
|
||||
IN HANDLE Handle
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCreateDirectoryObject;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(189) NTSTATUS NTAPI NtCreateEvent
|
||||
(
|
||||
OUT PHANDLE EventHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN EVENT_TYPE EventType,
|
||||
IN BOOLEAN InitialState
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Causes a new file or directory to be created, or opens and
|
||||
// * existing file, device, directory, or volume, giving the caller
|
||||
// * a handle for the file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(190) NTSTATUS NTAPI NtCreateFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PLARGE_INTEGER AllocationSize OPTIONAL,
|
||||
IN ULONG FileAttributes,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG CreateDisposition,
|
||||
IN ULONG CreateOptions
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCreateIoCompletion;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateMutant
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(192) NTSTATUS NTAPI NtCreateMutant
|
||||
(
|
||||
OUT PHANDLE MutantHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN BOOLEAN InitialOwner
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtCreateSemaphore;
|
||||
XBSYSAPI VOID *NtCreateTimer;
|
||||
XBSYSAPI VOID *NtDeleteFile;
|
||||
XBSYSAPI VOID *NtDeviceIoControlFile;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtDuplicateObject
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(197) NTSTATUS NTAPI NtDuplicateObject
|
||||
(
|
||||
PVOID SourceHandle,
|
||||
PVOID *TargetHandle,
|
||||
DWORD Options
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtFlushBuffersFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(198) NTSTATUS NTAPI NtFlushBuffersFile
|
||||
(
|
||||
PVOID FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtFreeVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(199) NTSTATUS NTAPI NtFreeVirtualMemory
|
||||
(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN OUT PULONG FreeSize,
|
||||
IN ULONG FreeType
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtFsControlFile;
|
||||
XBSYSAPI VOID *NtOpenDirectoryObject;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtOpenFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(202) NTSTATUS NTAPI NtOpenFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG OpenOptions
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtOpenSymbolicLinkObject;
|
||||
XBSYSAPI VOID *NtProtectVirtualMemory;
|
||||
XBSYSAPI VOID *NtPulseEvent;
|
||||
XBSYSAPI VOID *NtQueueApcThread;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryDirectoryFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(207) NTSTATUS NTAPI NtQueryDirectoryFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
IN PVOID ApcRoutine, // Todo: define this routine's prototype
|
||||
IN PVOID ApcContext,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT FILE_DIRECTORY_INFORMATION *FileInformation,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInformationClass,
|
||||
IN PSTRING FileMask,
|
||||
IN BOOLEAN RestartScan
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtQueryDirectoryObject;
|
||||
XBSYSAPI VOID *NtQueryEvent;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryFullAttributesFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(210) NTSTATUS NTAPI NtQueryFullAttributesFile
|
||||
(
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PVOID Attributes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryInformationFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Return various kinds of information about a given file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(211) NTSTATUS NTAPI NtQueryInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PVOID FileInformation,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInfo
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtQueryIoCompletion;
|
||||
XBSYSAPI VOID *NtQueryMutant;
|
||||
XBSYSAPI VOID *NtQuerySemaphore;
|
||||
XBSYSAPI VOID *NtQuerySymbolicLinkObject;
|
||||
XBSYSAPI VOID *NtQueryTimer;
|
||||
XBSYSAPI VOID *NtQueryVirtualMemory;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryVolumeInformationFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(218) NTSTATUS NTAPI NtQueryVolumeInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PFILE_FS_SIZE_INFORMATION FileInformation,
|
||||
IN ULONG Length,
|
||||
IN FS_INFORMATION_CLASS FileInformationClass
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtReadFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Read data from an opened file.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(219) NTSTATUS NTAPI NtReadFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
IN HANDLE Event OPTIONAL,
|
||||
IN PVOID ApcRoutine OPTIONAL,
|
||||
IN PVOID ApcContext,
|
||||
OUT PVOID IoStatusBlock,
|
||||
OUT PVOID Buffer,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtReadFileScatter;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtReleaseMutant
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(221) NTSTATUS NTAPI NtReleaseMutant
|
||||
(
|
||||
IN HANDLE MutantHandle,
|
||||
OUT PLONG PreviousCount
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtReleaseSemaphore;
|
||||
XBSYSAPI VOID *NtRemoveIoCompletion;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtResumeThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(224) NTSTATUS NTAPI NtResumeThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
OUT PULONG PreviousSuspendCount
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSetEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(225) NTSTATUS NTAPI NtSetEvent
|
||||
(
|
||||
IN HANDLE EventHandle,
|
||||
OUT PLONG PreviousState
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSetInformationFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Changes various kinds of information about a given file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(226) NTSTATUS NTAPI NtSetInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
OUT PVOID IoStatusBlock,
|
||||
IN PVOID FileInformation,
|
||||
IN ULONG Length,
|
||||
IN ULONG FileInformationClass
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtSetIoCompletion;
|
||||
XBSYSAPI VOID *NtSetSystemTime;
|
||||
XBSYSAPI VOID *NtSetTimerEx;
|
||||
XBSYSAPI VOID *NtSignalAndWaitForSingleObjectEx;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSuspendThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(231) NTSTATUS NTAPI NtSuspendThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
OUT PULONG PreviousSuspendCount OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtUserIoApcDispatcher
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(232) VOID NTAPI NtUserIoApcDispatcher
|
||||
(
|
||||
PVOID ApcContext,
|
||||
PIO_STATUS_BLOCK IoStatusBlock,
|
||||
ULONG Reserved
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForSingleObject
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Put the current thread into a wait state until the given
|
||||
// * dispatcher object is set to a signaled state or (optionally)
|
||||
// * until the wait times out.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(233) NTSTATUS NTAPI NtWaitForSingleObject
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PVOID Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForSingleObjectEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(234) NTSTATUS NTAPI NtWaitForSingleObjectEx
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN CHAR WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForMultipleObjectsEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(235) NTSTATUS NTAPI NtWaitForMultipleObjectsEx
|
||||
(
|
||||
IN ULONG Count,
|
||||
IN HANDLE *Handles,
|
||||
IN WAIT_TYPE WaitType,
|
||||
IN CHAR WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWriteFile
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Write data to an opened file.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(236) NTSTATUS NTAPI NtWriteFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
IN PVOID Event,
|
||||
IN PVOID ApcRoutine,
|
||||
IN PVOID ApcContext,
|
||||
OUT PVOID IoStatusBlock,
|
||||
IN PVOID Buffer,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *NtWriteFileGather;
|
||||
|
||||
// ******************************************************************
|
||||
// * NtYieldExecution
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(238) VOID NTAPI NtYieldExecution();
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,40 +1,40 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ob.h
|
||||
// *
|
||||
// * note : XBox Kernel *Object Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_OB_H
|
||||
#define XBOXKRNL_OB_H
|
||||
|
||||
XBSYSAPI VOID *ObCreateObject;
|
||||
XBSYSAPI VOID *ObDirectoryObjectType;
|
||||
XBSYSAPI VOID *ObInsertObject;
|
||||
XBSYSAPI VOID *ObMakeTemporaryObject;
|
||||
XBSYSAPI VOID *ObOpenObjectByName;
|
||||
XBSYSAPI VOID *ObOpenObjectByPointer;
|
||||
XBSYSAPI VOID *ObpObjectHandleTable;
|
||||
|
||||
|
||||
//XBSYSAPI VOID *ObReferenceObjectByHandle;
|
||||
XBSYSAPI EXPORTNUM(246) BOOLEAN NTAPI ObReferenceObjectByHandle
|
||||
( unsigned int a,
|
||||
unsigned int b,
|
||||
unsigned int c
|
||||
);
|
||||
|
||||
|
||||
XBSYSAPI VOID *ObReferenceObjectByName;
|
||||
XBSYSAPI VOID *ObReferenceObjectByPointer;
|
||||
XBSYSAPI VOID *ObSymbolicLinkObjectType;
|
||||
XBSYSAPI VOID *ObfDereferenceObject;
|
||||
XBSYSAPI VOID *ObfReferenceObject;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ob.h
|
||||
// *
|
||||
// * note : XBox Kernel *Object Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_OB_H
|
||||
#define XBOXKRNL_OB_H
|
||||
|
||||
XBSYSAPI VOID *ObCreateObject;
|
||||
XBSYSAPI VOID *ObDirectoryObjectType;
|
||||
XBSYSAPI VOID *ObInsertObject;
|
||||
XBSYSAPI VOID *ObMakeTemporaryObject;
|
||||
XBSYSAPI VOID *ObOpenObjectByName;
|
||||
XBSYSAPI VOID *ObOpenObjectByPointer;
|
||||
XBSYSAPI VOID *ObpObjectHandleTable;
|
||||
|
||||
|
||||
//XBSYSAPI VOID *ObReferenceObjectByHandle;
|
||||
XBSYSAPI EXPORTNUM(246) BOOLEAN NTAPI ObReferenceObjectByHandle
|
||||
( unsigned int a,
|
||||
unsigned int b,
|
||||
unsigned int c
|
||||
);
|
||||
|
||||
|
||||
XBSYSAPI VOID *ObReferenceObjectByName;
|
||||
XBSYSAPI VOID *ObReferenceObjectByPointer;
|
||||
XBSYSAPI VOID *ObSymbolicLinkObjectType;
|
||||
XBSYSAPI VOID *ObfDereferenceObject;
|
||||
XBSYSAPI VOID *ObfReferenceObject;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,58 +1,58 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ps.h
|
||||
// *
|
||||
// * note : XBox Kernel *Process Structure* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_PS_H
|
||||
#define XBOXKRNL_PS_H
|
||||
|
||||
//XBSYSAPI VOID *PsCreateSystemThread;
|
||||
|
||||
XBSYSAPI EXPORTNUM(254) NTSTATUS NTAPI PsCreateSystemThread
|
||||
(
|
||||
PULONG lpThreadAttributes, // SD
|
||||
DWORD dwStackSize, // initial stack size
|
||||
PKSTART_ROUTINE lpStartAddress, // thread function
|
||||
VOID* lpParameter, // thread argument
|
||||
DWORD dwCreationFlags, // creation option
|
||||
DWORD* lpThreadId // thread identifier
|
||||
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * PsCreateSystemThreadEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(255) NTSTATUS NTAPI PsCreateSystemThreadEx
|
||||
(
|
||||
OUT PHANDLE ThreadHandle,
|
||||
IN ULONG ThreadExtraSize,
|
||||
IN ULONG KernelStackSize,
|
||||
IN ULONG TlsDataSize,
|
||||
OUT PULONG ThreadId OPTIONAL,
|
||||
IN PVOID StartContext1,
|
||||
IN PVOID StartContext2,
|
||||
IN BOOLEAN CreateSuspended,
|
||||
IN BOOLEAN DebugStack,
|
||||
IN PKSTART_ROUTINE StartRoutine
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *PsQueryStatistics;
|
||||
XBSYSAPI VOID *PsSetCreateThreadNotifyRoutine;
|
||||
|
||||
// ******************************************************************
|
||||
// * PsTerminateSystemThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(258) VOID NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus);
|
||||
|
||||
//XBSYSAPI VOID *PsThreadObjectType;
|
||||
XBSYSAPI EXPORTNUM(259) volatile DWORD PsThreadObjectType;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ps.h
|
||||
// *
|
||||
// * note : XBox Kernel *Process Structure* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_PS_H
|
||||
#define XBOXKRNL_PS_H
|
||||
|
||||
//XBSYSAPI VOID *PsCreateSystemThread;
|
||||
|
||||
XBSYSAPI EXPORTNUM(254) NTSTATUS NTAPI PsCreateSystemThread
|
||||
(
|
||||
PULONG lpThreadAttributes, // SD
|
||||
DWORD dwStackSize, // initial stack size
|
||||
PKSTART_ROUTINE lpStartAddress, // thread function
|
||||
VOID* lpParameter, // thread argument
|
||||
DWORD dwCreationFlags, // creation option
|
||||
DWORD* lpThreadId // thread identifier
|
||||
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * PsCreateSystemThreadEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(255) NTSTATUS NTAPI PsCreateSystemThreadEx
|
||||
(
|
||||
OUT PHANDLE ThreadHandle,
|
||||
IN ULONG ThreadExtraSize,
|
||||
IN ULONG KernelStackSize,
|
||||
IN ULONG TlsDataSize,
|
||||
OUT PULONG ThreadId OPTIONAL,
|
||||
IN PVOID StartContext1,
|
||||
IN PVOID StartContext2,
|
||||
IN BOOLEAN CreateSuspended,
|
||||
IN BOOLEAN DebugStack,
|
||||
IN PKSTART_ROUTINE StartRoutine
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *PsQueryStatistics;
|
||||
XBSYSAPI VOID *PsSetCreateThreadNotifyRoutine;
|
||||
|
||||
// ******************************************************************
|
||||
// * PsTerminateSystemThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(258) VOID NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus);
|
||||
|
||||
//XBSYSAPI VOID *PsThreadObjectType;
|
||||
XBSYSAPI EXPORTNUM(259) volatile DWORD PsThreadObjectType;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,236 +1,236 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ps.h
|
||||
// *
|
||||
// * note : XBox Kernel *Run-time Library* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_RTL_H
|
||||
#define XBOXKRNL_RTL_H
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlAnsiStringToUnicodeString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(260) NTSTATUS NTAPI RtlAnsiStringToUnicodeString
|
||||
(
|
||||
PUNICODE_STRING DestinationString,
|
||||
PSTRING SourceString,
|
||||
UCHAR AllocateDestinationString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlAppendStringToString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(261) NTSTATUS NTAPI RtlAppendStringToString
|
||||
(
|
||||
IN PSTRING Destination,
|
||||
IN PSTRING Source
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlAppendUnicodeStringToString;
|
||||
XBSYSAPI VOID *RtlAppendUnicodeToString;
|
||||
XBSYSAPI VOID *RtlAssert;
|
||||
XBSYSAPI VOID *RtlCaptureContext;
|
||||
XBSYSAPI VOID *RtlCaptureStackBackTrace;
|
||||
XBSYSAPI VOID *RtlCharToInteger;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlCompareMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * compare block of memory, return number of equivalent bytes.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(268) SIZE_T NTAPI RtlCompareMemory
|
||||
(
|
||||
IN CONST VOID *Source1,
|
||||
IN CONST VOID *Source2,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlCompareMemoryUlong;
|
||||
XBSYSAPI VOID *RtlCompareString;
|
||||
XBSYSAPI VOID *RtlCompareUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlCopyString
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Copy Source to Destination
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(272) VOID NTAPI RtlCopyString
|
||||
(
|
||||
IN OUT PVOID Destination, // TODO: should be STRING
|
||||
IN PVOID Source OPTIONAL // TODO: should be STRING
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlCopyUnicodeString;
|
||||
XBSYSAPI VOID *RtlCreateUnicodeString;
|
||||
XBSYSAPI VOID *RtlDowncaseUnicodeChar;
|
||||
XBSYSAPI VOID *RtlDowncaseUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlEnterCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(277) VOID NTAPI RtlEnterCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlEnterCriticalSectionAndRegion;
|
||||
XBSYSAPI VOID *RtlEqualString;
|
||||
XBSYSAPI VOID *RtlEqualUnicodeString;
|
||||
XBSYSAPI VOID *RtlExtendedIntegerMultiply;
|
||||
XBSYSAPI VOID *RtlExtendedLargeIntegerDivide;
|
||||
XBSYSAPI VOID *RtlExtendedMagicDivide;
|
||||
XBSYSAPI VOID *RtlFillMemory;
|
||||
XBSYSAPI VOID *RtlFillMemoryUlong;
|
||||
XBSYSAPI VOID *RtlFreeAnsiString;
|
||||
XBSYSAPI VOID *RtlFreeUnicodeString;
|
||||
XBSYSAPI VOID *RtlGetCallersAddress;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlInitAnsiString
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Initialize a counted ANSI string.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(289) VOID NTAPI RtlInitAnsiString
|
||||
(
|
||||
IN OUT PANSI_STRING DestinationString,
|
||||
IN PCSZ SourceString
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlInitUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlInitializeCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(291) VOID NTAPI RtlInitializeCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlIntegerToChar;
|
||||
XBSYSAPI VOID *RtlIntegerToUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlLeaveCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(294) VOID NTAPI RtlLeaveCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlLeaveCriticalSectionAndRegion;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlLowerChar
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(296) CHAR NTAPI RtlLowerChar(CHAR Character);
|
||||
|
||||
XBSYSAPI VOID *RtlMapGenericMask;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlMoveMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Move memory either forward or backward, aligned or unaligned,
|
||||
// * in 4-byte blocks, followed by any remaining blocks.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(298) VOID NTAPI RtlMoveMemory
|
||||
(
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN CONST VOID UNALIGNED *Source,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlMultiByteToUnicodeN;
|
||||
XBSYSAPI VOID *RtlMultiByteToUnicodeSize;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlNtStatusToDosError
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(301) ULONG NTAPI RtlNtStatusToDosError
|
||||
(
|
||||
IN NTSTATUS Status
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlRaiseException;
|
||||
XBSYSAPI VOID *RtlRaiseStatus;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTimeFieldsToTime
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(304) BOOLEAN NTAPI RtlTimeFieldsToTime
|
||||
(
|
||||
IN PTIME_FIELDS TimeFields,
|
||||
OUT PLARGE_INTEGER Time
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTimeToTimeFields
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(305) VOID NTAPI RtlTimeToTimeFields
|
||||
(
|
||||
IN PLARGE_INTEGER Time,
|
||||
OUT PTIME_FIELDS TimeFields
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTryEnterCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(306) BOOLEAN NTAPI RtlTryEnterCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlUlongByteSwap;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlUnicodeStringToAnsiString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(308) NTSTATUS NTAPI RtlUnicodeStringToAnsiString
|
||||
(
|
||||
IN OUT PSTRING DestinationString,
|
||||
IN PUNICODE_STRING SourceString,
|
||||
IN BOOLEAN AllocateDestinationString
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlUnicodeStringToInteger;
|
||||
XBSYSAPI VOID *RtlUnicodeToMultiByteN;
|
||||
XBSYSAPI VOID *RtlUnicodeToMultiByteSize;
|
||||
XBSYSAPI VOID *RtlUnwind;
|
||||
XBSYSAPI VOID *RtlUpcaseUnicodeChar;
|
||||
XBSYSAPI VOID *RtlUpcaseUnicodeString;
|
||||
XBSYSAPI VOID *RtlUpcaseUnicodeToMultiByteN;
|
||||
XBSYSAPI VOID *RtlUpperChar;
|
||||
XBSYSAPI VOID *RtlUpperString;
|
||||
XBSYSAPI VOID *RtlUshortByteSwap;
|
||||
XBSYSAPI VOID *RtlWalkFrameChain;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlZeroMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Fill a block of memory with zeros.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(320) VOID NTAPI RtlZeroMemory
|
||||
(
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlRip;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ps.h
|
||||
// *
|
||||
// * note : XBox Kernel *Run-time Library* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_RTL_H
|
||||
#define XBOXKRNL_RTL_H
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlAnsiStringToUnicodeString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(260) NTSTATUS NTAPI RtlAnsiStringToUnicodeString
|
||||
(
|
||||
PUNICODE_STRING DestinationString,
|
||||
PSTRING SourceString,
|
||||
UCHAR AllocateDestinationString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlAppendStringToString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(261) NTSTATUS NTAPI RtlAppendStringToString
|
||||
(
|
||||
IN PSTRING Destination,
|
||||
IN PSTRING Source
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlAppendUnicodeStringToString;
|
||||
XBSYSAPI VOID *RtlAppendUnicodeToString;
|
||||
XBSYSAPI VOID *RtlAssert;
|
||||
XBSYSAPI VOID *RtlCaptureContext;
|
||||
XBSYSAPI VOID *RtlCaptureStackBackTrace;
|
||||
XBSYSAPI VOID *RtlCharToInteger;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlCompareMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * compare block of memory, return number of equivalent bytes.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(268) SIZE_T NTAPI RtlCompareMemory
|
||||
(
|
||||
IN CONST VOID *Source1,
|
||||
IN CONST VOID *Source2,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlCompareMemoryUlong;
|
||||
XBSYSAPI VOID *RtlCompareString;
|
||||
XBSYSAPI VOID *RtlCompareUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlCopyString
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Copy Source to Destination
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(272) VOID NTAPI RtlCopyString
|
||||
(
|
||||
IN OUT PVOID Destination, // TODO: should be STRING
|
||||
IN PVOID Source OPTIONAL // TODO: should be STRING
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlCopyUnicodeString;
|
||||
XBSYSAPI VOID *RtlCreateUnicodeString;
|
||||
XBSYSAPI VOID *RtlDowncaseUnicodeChar;
|
||||
XBSYSAPI VOID *RtlDowncaseUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlEnterCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(277) VOID NTAPI RtlEnterCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlEnterCriticalSectionAndRegion;
|
||||
XBSYSAPI VOID *RtlEqualString;
|
||||
XBSYSAPI VOID *RtlEqualUnicodeString;
|
||||
XBSYSAPI VOID *RtlExtendedIntegerMultiply;
|
||||
XBSYSAPI VOID *RtlExtendedLargeIntegerDivide;
|
||||
XBSYSAPI VOID *RtlExtendedMagicDivide;
|
||||
XBSYSAPI VOID *RtlFillMemory;
|
||||
XBSYSAPI VOID *RtlFillMemoryUlong;
|
||||
XBSYSAPI VOID *RtlFreeAnsiString;
|
||||
XBSYSAPI VOID *RtlFreeUnicodeString;
|
||||
XBSYSAPI VOID *RtlGetCallersAddress;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlInitAnsiString
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Initialize a counted ANSI string.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(289) VOID NTAPI RtlInitAnsiString
|
||||
(
|
||||
IN OUT PANSI_STRING DestinationString,
|
||||
IN PCSZ SourceString
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlInitUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlInitializeCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(291) VOID NTAPI RtlInitializeCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlIntegerToChar;
|
||||
XBSYSAPI VOID *RtlIntegerToUnicodeString;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlLeaveCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(294) VOID NTAPI RtlLeaveCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlLeaveCriticalSectionAndRegion;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlLowerChar
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(296) CHAR NTAPI RtlLowerChar(CHAR Character);
|
||||
|
||||
XBSYSAPI VOID *RtlMapGenericMask;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlMoveMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Move memory either forward or backward, aligned or unaligned,
|
||||
// * in 4-byte blocks, followed by any remaining blocks.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(298) VOID NTAPI RtlMoveMemory
|
||||
(
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN CONST VOID UNALIGNED *Source,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlMultiByteToUnicodeN;
|
||||
XBSYSAPI VOID *RtlMultiByteToUnicodeSize;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlNtStatusToDosError
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(301) ULONG NTAPI RtlNtStatusToDosError
|
||||
(
|
||||
IN NTSTATUS Status
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlRaiseException;
|
||||
XBSYSAPI VOID *RtlRaiseStatus;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTimeFieldsToTime
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(304) BOOLEAN NTAPI RtlTimeFieldsToTime
|
||||
(
|
||||
IN PTIME_FIELDS TimeFields,
|
||||
OUT PLARGE_INTEGER Time
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTimeToTimeFields
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(305) VOID NTAPI RtlTimeToTimeFields
|
||||
(
|
||||
IN PLARGE_INTEGER Time,
|
||||
OUT PTIME_FIELDS TimeFields
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTryEnterCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(306) BOOLEAN NTAPI RtlTryEnterCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlUlongByteSwap;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlUnicodeStringToAnsiString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(308) NTSTATUS NTAPI RtlUnicodeStringToAnsiString
|
||||
(
|
||||
IN OUT PSTRING DestinationString,
|
||||
IN PUNICODE_STRING SourceString,
|
||||
IN BOOLEAN AllocateDestinationString
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlUnicodeStringToInteger;
|
||||
XBSYSAPI VOID *RtlUnicodeToMultiByteN;
|
||||
XBSYSAPI VOID *RtlUnicodeToMultiByteSize;
|
||||
XBSYSAPI VOID *RtlUnwind;
|
||||
XBSYSAPI VOID *RtlUpcaseUnicodeChar;
|
||||
XBSYSAPI VOID *RtlUpcaseUnicodeString;
|
||||
XBSYSAPI VOID *RtlUpcaseUnicodeToMultiByteN;
|
||||
XBSYSAPI VOID *RtlUpperChar;
|
||||
XBSYSAPI VOID *RtlUpperString;
|
||||
XBSYSAPI VOID *RtlUshortByteSwap;
|
||||
XBSYSAPI VOID *RtlWalkFrameChain;
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlZeroMemory
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Fill a block of memory with zeros.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(320) VOID NTAPI RtlZeroMemory
|
||||
(
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *RtlRip;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,141 +1,141 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xbox.h
|
||||
// *
|
||||
// * note : XBox Kernel Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOX_H
|
||||
#define XBOX_H
|
||||
|
||||
// ******************************************************************
|
||||
// * AvGetSavedDataAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(1) PVOID NTAPI AvGetSavedDataAddress();
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSendTVEncoderOption
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(2) VOID NTAPI AvSendTVEncoderOption
|
||||
(
|
||||
IN PVOID RegisterBase,
|
||||
IN ULONG Option,
|
||||
IN ULONG Param,
|
||||
OUT ULONG *Result
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetDisplayMode
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(4) ULONG NTAPI AvSetDisplayMode
|
||||
(
|
||||
IN PVOID RegisterBase,
|
||||
IN ULONG Step,
|
||||
IN ULONG Mode,
|
||||
IN ULONG Format,
|
||||
IN ULONG Pitch,
|
||||
IN ULONG FrameBuffer
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetSavedDataAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(4) VOID NTAPI AvSetSavedDataAddress
|
||||
(
|
||||
IN PVOID Address
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *FscGetCacheSize;
|
||||
XBSYSAPI VOID *FscInvalidateIdleBlocks;
|
||||
|
||||
// ******************************************************************
|
||||
// * FscSetCacheSize
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(37) LONG NTAPI FscSetCacheSize(ULONG uCachePages);
|
||||
|
||||
XBSYSAPI VOID *KdDebuggerEnabled;
|
||||
XBSYSAPI VOID *KdDebuggerNotPresent;
|
||||
XBSYSAPI VOID *KfRaiseIrql;
|
||||
XBSYSAPI VOID *KfLowerIrql;
|
||||
XBSYSAPI VOID *KiBugCheckData;
|
||||
XBSYSAPI VOID *KiUnlockDispatcherDatabase;
|
||||
|
||||
// ******************************************************************
|
||||
// * LaunchDataPage (actually a pointer)
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(164) PLAUNCH_DATA_PAGE LaunchDataPage;
|
||||
|
||||
XBSYSAPI VOID *PhyGetLinkState;
|
||||
XBSYSAPI VOID *PhyInitialize;
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxEEPROMKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(321) UCHAR XboxEEPROMKey[16];
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxHardwareInfo
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(322) XBOX_HARDWARE_INFO XboxHardwareInfo;
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxHDKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(323) UCHAR XboxHDKey[16];
|
||||
|
||||
XBSYSAPI VOID *XboxKrnlVersion;
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxSignatureKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(325) BYTE XboxSignatureKey[16];
|
||||
|
||||
XBSYSAPI VOID *XeImageFileName;
|
||||
XBSYSAPI VOID *XeLoadSection;
|
||||
XBSYSAPI VOID *XeUnloadSection;
|
||||
|
||||
// ******************************************************************
|
||||
// * XcSHAInit
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(335) VOID NTAPI XcSHAInit(UCHAR *pbSHAContext);
|
||||
|
||||
// ******************************************************************
|
||||
// * XcSHAUpdate
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(336) VOID NTAPI XcSHAUpdate(UCHAR *pbSHAContext, UCHAR *pbInput, ULONG dwInputLength);
|
||||
|
||||
// ******************************************************************
|
||||
// * XcSHAFinal
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(337) VOID NTAPI XcSHAFinal(UCHAR *pbSHAContext, UCHAR *pbDigest);
|
||||
|
||||
XBSYSAPI VOID *XcRC4Key;
|
||||
XBSYSAPI VOID *XcRC4Crypt;
|
||||
XBSYSAPI VOID *XcHMAC;
|
||||
XBSYSAPI VOID *XcPKEncPublic;
|
||||
XBSYSAPI VOID *XcPKDecPrivate;
|
||||
XBSYSAPI VOID *XcPKGetKeyLen;
|
||||
XBSYSAPI VOID *XcVerifyPKCS1Signature;
|
||||
XBSYSAPI VOID *XcModExp;
|
||||
XBSYSAPI VOID *XcDESKeyParity;
|
||||
XBSYSAPI VOID *XcKeyTable;
|
||||
XBSYSAPI VOID *XcBlockCrypt;
|
||||
XBSYSAPI VOID *XcBlockCryptCBC;
|
||||
XBSYSAPI VOID *XcCryptService;
|
||||
XBSYSAPI VOID *XcUpdateCrypto;
|
||||
XBSYSAPI VOID *XboxLANKey;
|
||||
XBSYSAPI VOID *XboxAlternateSignatureKeys;
|
||||
XBSYSAPI VOID *XePublicKeyData;
|
||||
XBSYSAPI VOID *IdexChannelObject;
|
||||
XBSYSAPI VOID *xsnprintf; // prefixed with "x" to avoid xlibc collisions
|
||||
XBSYSAPI VOID *xsprintf; // ""
|
||||
XBSYSAPI VOID *xvsnprintf; // ""
|
||||
XBSYSAPI VOID *xvsprintf; // ""
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xbox.h
|
||||
// *
|
||||
// * note : XBox Kernel Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOX_H
|
||||
#define XBOX_H
|
||||
|
||||
// ******************************************************************
|
||||
// * AvGetSavedDataAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(1) PVOID NTAPI AvGetSavedDataAddress();
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSendTVEncoderOption
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(2) VOID NTAPI AvSendTVEncoderOption
|
||||
(
|
||||
IN PVOID RegisterBase,
|
||||
IN ULONG Option,
|
||||
IN ULONG Param,
|
||||
OUT ULONG *Result
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetDisplayMode
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(4) ULONG NTAPI AvSetDisplayMode
|
||||
(
|
||||
IN PVOID RegisterBase,
|
||||
IN ULONG Step,
|
||||
IN ULONG Mode,
|
||||
IN ULONG Format,
|
||||
IN ULONG Pitch,
|
||||
IN ULONG FrameBuffer
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetSavedDataAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(4) VOID NTAPI AvSetSavedDataAddress
|
||||
(
|
||||
IN PVOID Address
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *FscGetCacheSize;
|
||||
XBSYSAPI VOID *FscInvalidateIdleBlocks;
|
||||
|
||||
// ******************************************************************
|
||||
// * FscSetCacheSize
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(37) LONG NTAPI FscSetCacheSize(ULONG uCachePages);
|
||||
|
||||
XBSYSAPI VOID *KdDebuggerEnabled;
|
||||
XBSYSAPI VOID *KdDebuggerNotPresent;
|
||||
XBSYSAPI VOID *KfRaiseIrql;
|
||||
XBSYSAPI VOID *KfLowerIrql;
|
||||
XBSYSAPI VOID *KiBugCheckData;
|
||||
XBSYSAPI VOID *KiUnlockDispatcherDatabase;
|
||||
|
||||
// ******************************************************************
|
||||
// * LaunchDataPage (actually a pointer)
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(164) PLAUNCH_DATA_PAGE LaunchDataPage;
|
||||
|
||||
XBSYSAPI VOID *PhyGetLinkState;
|
||||
XBSYSAPI VOID *PhyInitialize;
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxEEPROMKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(321) UCHAR XboxEEPROMKey[16];
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxHardwareInfo
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(322) XBOX_HARDWARE_INFO XboxHardwareInfo;
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxHDKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(323) UCHAR XboxHDKey[16];
|
||||
|
||||
XBSYSAPI VOID *XboxKrnlVersion;
|
||||
|
||||
// ******************************************************************
|
||||
// * XboxSignatureKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(325) BYTE XboxSignatureKey[16];
|
||||
|
||||
XBSYSAPI VOID *XeImageFileName;
|
||||
XBSYSAPI VOID *XeLoadSection;
|
||||
XBSYSAPI VOID *XeUnloadSection;
|
||||
|
||||
// ******************************************************************
|
||||
// * XcSHAInit
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(335) VOID NTAPI XcSHAInit(UCHAR *pbSHAContext);
|
||||
|
||||
// ******************************************************************
|
||||
// * XcSHAUpdate
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(336) VOID NTAPI XcSHAUpdate(UCHAR *pbSHAContext, UCHAR *pbInput, ULONG dwInputLength);
|
||||
|
||||
// ******************************************************************
|
||||
// * XcSHAFinal
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(337) VOID NTAPI XcSHAFinal(UCHAR *pbSHAContext, UCHAR *pbDigest);
|
||||
|
||||
XBSYSAPI VOID *XcRC4Key;
|
||||
XBSYSAPI VOID *XcRC4Crypt;
|
||||
XBSYSAPI VOID *XcHMAC;
|
||||
XBSYSAPI VOID *XcPKEncPublic;
|
||||
XBSYSAPI VOID *XcPKDecPrivate;
|
||||
XBSYSAPI VOID *XcPKGetKeyLen;
|
||||
XBSYSAPI VOID *XcVerifyPKCS1Signature;
|
||||
XBSYSAPI VOID *XcModExp;
|
||||
XBSYSAPI VOID *XcDESKeyParity;
|
||||
XBSYSAPI VOID *XcKeyTable;
|
||||
XBSYSAPI VOID *XcBlockCrypt;
|
||||
XBSYSAPI VOID *XcBlockCryptCBC;
|
||||
XBSYSAPI VOID *XcCryptService;
|
||||
XBSYSAPI VOID *XcUpdateCrypto;
|
||||
XBSYSAPI VOID *XboxLANKey;
|
||||
XBSYSAPI VOID *XboxAlternateSignatureKeys;
|
||||
XBSYSAPI VOID *XePublicKeyData;
|
||||
XBSYSAPI VOID *IdexChannelObject;
|
||||
XBSYSAPI VOID *xsnprintf; // prefixed with "x" to avoid xlibc collisions
|
||||
XBSYSAPI VOID *xsprintf; // ""
|
||||
XBSYSAPI VOID *xvsnprintf; // ""
|
||||
XBSYSAPI VOID *xvsprintf; // ""
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,58 +1,58 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : bitmap.h
|
||||
// *
|
||||
// * note : Simple 2D Bitmap library
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef XBITMAP_H
|
||||
#define XBITMAP_H
|
||||
|
||||
#include "openxdk.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
//you shouldn't need to mess with this if you use the functions in this lib,
|
||||
//but feel free to :)
|
||||
//data = the raw 32-bit bitmap data
|
||||
//w = width in pixels
|
||||
//h = height in pixels
|
||||
//pitch = memory distance between rows, in pixels (you don't need to care)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 *data;
|
||||
int w, h;
|
||||
int pitch; // pitch is in pixels, not bytes as many libs do
|
||||
// will in most cases be same as w
|
||||
} Bitmap;
|
||||
|
||||
|
||||
//creates a 32-bit bitmap, sized WxH
|
||||
Bitmap *create_bitmap(int w, int h);
|
||||
|
||||
//gets the screen bitmap, so you can draw to it easily
|
||||
//you have to have inited VGA before calling this
|
||||
//also currently UNTESTED, but should work :D
|
||||
Bitmap *get_screen_bitmap();
|
||||
|
||||
//destroys a bitmap
|
||||
void destroy_bitmap(Bitmap *bmp);
|
||||
|
||||
//image loaders
|
||||
Bitmap *load_tga(char *filename);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : bitmap.h
|
||||
// *
|
||||
// * note : Simple 2D Bitmap library
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef XBITMAP_H
|
||||
#define XBITMAP_H
|
||||
|
||||
#include "openxdk.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
//you shouldn't need to mess with this if you use the functions in this lib,
|
||||
//but feel free to :)
|
||||
//data = the raw 32-bit bitmap data
|
||||
//w = width in pixels
|
||||
//h = height in pixels
|
||||
//pitch = memory distance between rows, in pixels (you don't need to care)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 *data;
|
||||
int w, h;
|
||||
int pitch; // pitch is in pixels, not bytes as many libs do
|
||||
// will in most cases be same as w
|
||||
} Bitmap;
|
||||
|
||||
|
||||
//creates a 32-bit bitmap, sized WxH
|
||||
Bitmap *create_bitmap(int w, int h);
|
||||
|
||||
//gets the screen bitmap, so you can draw to it easily
|
||||
//you have to have inited VGA before calling this
|
||||
//also currently UNTESTED, but should work :D
|
||||
Bitmap *get_screen_bitmap();
|
||||
|
||||
//destroys a bitmap
|
||||
void destroy_bitmap(Bitmap *bmp);
|
||||
|
||||
//image loaders
|
||||
Bitmap *load_tga(char *filename);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,62 +1,62 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : blit.c
|
||||
// *
|
||||
// * note : blitter with clipping, uses any one of the blitters from
|
||||
// * blitters.h per scanline
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef XBLIT_H
|
||||
#define XBLIT_H
|
||||
|
||||
#include <openxdk.h>
|
||||
#include "xgfx2d/bitmap.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
// INSTRUCTIONS
|
||||
// ************
|
||||
// pass in a blitter from blitters.h
|
||||
// dx,dy = destination x,y
|
||||
// sx,sy = source x,y
|
||||
// sw,sh = width and height of the copy
|
||||
// blitter = copying method, check blitters.h
|
||||
// parameter = if a blitter method needs a parameter pass it here,
|
||||
// else pass 0
|
||||
// Sample:
|
||||
// blit(source,dest,10,10,0,0,20,20,alphavalue_blit,128)
|
||||
// will blit the topleft 20x20 of source to 10,10 in dest,
|
||||
// blended ~50% (128/255)
|
||||
void blit(Bitmap *dest, Bitmap *src,
|
||||
int dx, int dy,
|
||||
int sx, int sy, int sw, int sh,
|
||||
void (*blitter)(uint32*,uint32*,int,int),
|
||||
int parameter);
|
||||
|
||||
// just copies entire source bitmap to 0,0 of dest
|
||||
void full_blit(Bitmap *dest, Bitmap *src,
|
||||
void (*blitter)(uint32*,uint32*,int,int),
|
||||
int parameter);
|
||||
|
||||
// shortcut to copy entire source bitmap to a coordinate in dest
|
||||
// use for simple sprites
|
||||
void blit_at(Bitmap *dest, Bitmap *src,
|
||||
int x, int y,
|
||||
void (*blitter)(uint32*,uint32*,int,int),
|
||||
int parameter);
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : blit.c
|
||||
// *
|
||||
// * note : blitter with clipping, uses any one of the blitters from
|
||||
// * blitters.h per scanline
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef XBLIT_H
|
||||
#define XBLIT_H
|
||||
|
||||
#include <openxdk.h>
|
||||
#include "xgfx2d/bitmap.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
// INSTRUCTIONS
|
||||
// ************
|
||||
// pass in a blitter from blitters.h
|
||||
// dx,dy = destination x,y
|
||||
// sx,sy = source x,y
|
||||
// sw,sh = width and height of the copy
|
||||
// blitter = copying method, check blitters.h
|
||||
// parameter = if a blitter method needs a parameter pass it here,
|
||||
// else pass 0
|
||||
// Sample:
|
||||
// blit(source,dest,10,10,0,0,20,20,alphavalue_blit,128)
|
||||
// will blit the topleft 20x20 of source to 10,10 in dest,
|
||||
// blended ~50% (128/255)
|
||||
void blit(Bitmap *dest, Bitmap *src,
|
||||
int dx, int dy,
|
||||
int sx, int sy, int sw, int sh,
|
||||
void (*blitter)(uint32*,uint32*,int,int),
|
||||
int parameter);
|
||||
|
||||
// just copies entire source bitmap to 0,0 of dest
|
||||
void full_blit(Bitmap *dest, Bitmap *src,
|
||||
void (*blitter)(uint32*,uint32*,int,int),
|
||||
int parameter);
|
||||
|
||||
// shortcut to copy entire source bitmap to a coordinate in dest
|
||||
// use for simple sprites
|
||||
void blit_at(Bitmap *dest, Bitmap *src,
|
||||
int x, int y,
|
||||
void (*blitter)(uint32*,uint32*,int,int),
|
||||
int parameter);
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,51 +1,51 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : blitters.h
|
||||
// *
|
||||
// * note : A bunch of fast MMX blitters of various kinds
|
||||
// * Alpha blending, additive blending, you name it
|
||||
// * Many non-ASM substitutes needs writing if we're gonna
|
||||
// * support GNU C
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef XBLITTERS_H
|
||||
#define XBLITTERS_H
|
||||
|
||||
#include <openxdk.h>
|
||||
#include "xgfx2d/bitmap.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define DECLARE_BLITTER(name,parameter) \
|
||||
void name (uint32 *s, uint32 *d, int len, int parameter)
|
||||
|
||||
|
||||
//you're supposed to pass these ones into blit, check blit.h
|
||||
|
||||
DECLARE_BLITTER(normal_blit,none); //just a straight blit
|
||||
DECLARE_BLITTER(sprite_blit,none); //ignores 0xFF00FF
|
||||
DECLARE_BLITTER(additive_blit,none); //adds images together
|
||||
DECLARE_BLITTER(additive_alpha_blit,alpha); //adds image multiplied with alpha to the other one
|
||||
DECLARE_BLITTER(alpha_blit,none); //alpha from image! yes, a true alpha blender
|
||||
DECLARE_BLITTER(alphavalue_blit,alpha); //1 alpha value for the entire image
|
||||
DECLARE_BLITTER(alphavalue_sprite_blit,none); //1 alpha value for the entire image, ignores black
|
||||
DECLARE_BLITTER(alphavalue50_blit,none); //50% alpha value for the entire image (faster?)
|
||||
DECLARE_BLITTER(multiply_blit,none); //like multiply in photoshop
|
||||
DECLARE_BLITTER(invert_blit,none); //odd :)
|
||||
DECLARE_BLITTER(subtractive_blit,none); //subtracts one image from the other
|
||||
DECLARE_BLITTER(colorize_sprite_blit,color); //uhm, for drawing colored fonts
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : blitters.h
|
||||
// *
|
||||
// * note : A bunch of fast MMX blitters of various kinds
|
||||
// * Alpha blending, additive blending, you name it
|
||||
// * Many non-ASM substitutes needs writing if we're gonna
|
||||
// * support GNU C
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef XBLITTERS_H
|
||||
#define XBLITTERS_H
|
||||
|
||||
#include <openxdk.h>
|
||||
#include "xgfx2d/bitmap.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define DECLARE_BLITTER(name,parameter) \
|
||||
void name (uint32 *s, uint32 *d, int len, int parameter)
|
||||
|
||||
|
||||
//you're supposed to pass these ones into blit, check blit.h
|
||||
|
||||
DECLARE_BLITTER(normal_blit,none); //just a straight blit
|
||||
DECLARE_BLITTER(sprite_blit,none); //ignores 0xFF00FF
|
||||
DECLARE_BLITTER(additive_blit,none); //adds images together
|
||||
DECLARE_BLITTER(additive_alpha_blit,alpha); //adds image multiplied with alpha to the other one
|
||||
DECLARE_BLITTER(alpha_blit,none); //alpha from image! yes, a true alpha blender
|
||||
DECLARE_BLITTER(alphavalue_blit,alpha); //1 alpha value for the entire image
|
||||
DECLARE_BLITTER(alphavalue_sprite_blit,none); //1 alpha value for the entire image, ignores black
|
||||
DECLARE_BLITTER(alphavalue50_blit,none); //50% alpha value for the entire image (faster?)
|
||||
DECLARE_BLITTER(multiply_blit,none); //like multiply in photoshop
|
||||
DECLARE_BLITTER(invert_blit,none); //odd :)
|
||||
DECLARE_BLITTER(subtractive_blit,none); //subtracts one image from the other
|
||||
DECLARE_BLITTER(colorize_sprite_blit,color); //uhm, for drawing colored fonts
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,129 +1,129 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : charmap.h
|
||||
// *
|
||||
// * note : Character map format : U16 per entry
|
||||
// *
|
||||
// * TxPPPIII_CCCCCCCC
|
||||
// * T = character touched flag
|
||||
// * x = unused
|
||||
// * P = paper colour
|
||||
// * I = Ink colour
|
||||
// * C = character
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __CHARMAP_H_
|
||||
#define __CHARMAP_H_
|
||||
|
||||
#include <openxdk.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// **************************************************************************************************************
|
||||
//
|
||||
// constants: #defines, enums etc.
|
||||
//
|
||||
// **************************************************************************************************************
|
||||
#define CHARMAP_DEBUG 0x80000000 // character map debug mode, force update after every write
|
||||
// slow, but visible. Does NOT update on single character outs
|
||||
|
||||
#define MAP_TOUCHED 0x8000 // this character has been touched, and needs redrawing
|
||||
|
||||
#define FONT_WIDTH 8 // our assumed character width
|
||||
#define FONT_HEIGHT 15 // and height. These could be variable for user fonts
|
||||
|
||||
#define CHARMAP_BLACK (0) // Genaral character attribute colours
|
||||
#define CHARMAP_BLUE (1)
|
||||
#define CHARMAP_GREEN (2)
|
||||
#define CHARMAP_RED (3)
|
||||
#define CHARMAP_CYAN (4)
|
||||
#define CHARMAP_YELLOW (5)
|
||||
#define CHARMAP_PINK (6)
|
||||
#define CHARMAP_WHITE (7)
|
||||
|
||||
#define INK_BLACK (0<<8) // INK attribute colours
|
||||
#define INK_BLUE (1<<8)
|
||||
#define INK_GREEN (2<<8)
|
||||
#define INK_RED (3<<8)
|
||||
#define INK_CYAN (4<<8)
|
||||
#define INK_YELLOW (5<<8)
|
||||
#define INK_PINK (6<<8)
|
||||
#define INK_WHITE (7<<8)
|
||||
|
||||
#define PAPER_BLACK (0<<11) // PAPER attribute colours
|
||||
#define PAPER_BLUE (1<<11)
|
||||
#define PAPER_GREEN (2<<11)
|
||||
#define PAPER_RED (3<<11)
|
||||
#define PAPER_CYAN (4<<11)
|
||||
#define PAPER_YELLOW (5<<11)
|
||||
#define PAPER_PINK (6<<11)
|
||||
#define PAPER_WHITE (7<<11)
|
||||
|
||||
// **************************************************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// **************************************************************************************************************
|
||||
|
||||
// Charmap structure
|
||||
typedef struct SCharMap
|
||||
{
|
||||
u32 Flags; // system flags and options
|
||||
u8* pBitmap; // pointer to our screen bitmap (pix width*pix height)
|
||||
u16* pCharMap; // pointer to actuall character array
|
||||
s32 x,y; // screen X,Y
|
||||
s32 width,height; // width and height
|
||||
s32 pixwidth,pixheight; // pixel width and height
|
||||
|
||||
u16 attrib_char; // clear attrib and character
|
||||
|
||||
s32 curx,cury; // current Cursor X,Y
|
||||
s32 wx1,wy1,wx2,wy2; // Text window
|
||||
|
||||
}SCharMap,*PCharMap;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// **************************************************************************************************************
|
||||
//
|
||||
// Public functions
|
||||
//
|
||||
// **************************************************************************************************************
|
||||
void charmap_init( s32 baseX, s32 baseY, s32 width, s32 height );
|
||||
void charmap_set_flags( u32 flags );
|
||||
void charmap_display( void );
|
||||
void charmap_clear( void );
|
||||
void charmap_print( char *pStr );
|
||||
void charmap_printf( const char *format, ...);
|
||||
void charmap_printat( s32 x, s32 y, char *pStr );
|
||||
void charmap_outchar( char Ch );
|
||||
void charmap_newline( void );
|
||||
void charmap_scroll_window( void );
|
||||
void charmap_setink( u8 ink );
|
||||
void charmap_setpaper( u8 paper );
|
||||
void charmap_set_window( s32 x1,s32 y1,s32 x2, s32 y2 );
|
||||
void charmap_home( void );
|
||||
void charmap_move_cursor( s32 x, s32 y);
|
||||
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //__CHARMAP_H_
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : charmap.h
|
||||
// *
|
||||
// * note : Character map format : U16 per entry
|
||||
// *
|
||||
// * TxPPPIII_CCCCCCCC
|
||||
// * T = character touched flag
|
||||
// * x = unused
|
||||
// * P = paper colour
|
||||
// * I = Ink colour
|
||||
// * C = character
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __CHARMAP_H_
|
||||
#define __CHARMAP_H_
|
||||
|
||||
#include <openxdk.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// **************************************************************************************************************
|
||||
//
|
||||
// constants: #defines, enums etc.
|
||||
//
|
||||
// **************************************************************************************************************
|
||||
#define CHARMAP_DEBUG 0x80000000 // character map debug mode, force update after every write
|
||||
// slow, but visible. Does NOT update on single character outs
|
||||
|
||||
#define MAP_TOUCHED 0x8000 // this character has been touched, and needs redrawing
|
||||
|
||||
#define FONT_WIDTH 8 // our assumed character width
|
||||
#define FONT_HEIGHT 15 // and height. These could be variable for user fonts
|
||||
|
||||
#define CHARMAP_BLACK (0) // Genaral character attribute colours
|
||||
#define CHARMAP_BLUE (1)
|
||||
#define CHARMAP_GREEN (2)
|
||||
#define CHARMAP_RED (3)
|
||||
#define CHARMAP_CYAN (4)
|
||||
#define CHARMAP_YELLOW (5)
|
||||
#define CHARMAP_PINK (6)
|
||||
#define CHARMAP_WHITE (7)
|
||||
|
||||
#define INK_BLACK (0<<8) // INK attribute colours
|
||||
#define INK_BLUE (1<<8)
|
||||
#define INK_GREEN (2<<8)
|
||||
#define INK_RED (3<<8)
|
||||
#define INK_CYAN (4<<8)
|
||||
#define INK_YELLOW (5<<8)
|
||||
#define INK_PINK (6<<8)
|
||||
#define INK_WHITE (7<<8)
|
||||
|
||||
#define PAPER_BLACK (0<<11) // PAPER attribute colours
|
||||
#define PAPER_BLUE (1<<11)
|
||||
#define PAPER_GREEN (2<<11)
|
||||
#define PAPER_RED (3<<11)
|
||||
#define PAPER_CYAN (4<<11)
|
||||
#define PAPER_YELLOW (5<<11)
|
||||
#define PAPER_PINK (6<<11)
|
||||
#define PAPER_WHITE (7<<11)
|
||||
|
||||
// **************************************************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// **************************************************************************************************************
|
||||
|
||||
// Charmap structure
|
||||
typedef struct SCharMap
|
||||
{
|
||||
u32 Flags; // system flags and options
|
||||
u8* pBitmap; // pointer to our screen bitmap (pix width*pix height)
|
||||
u16* pCharMap; // pointer to actuall character array
|
||||
s32 x,y; // screen X,Y
|
||||
s32 width,height; // width and height
|
||||
s32 pixwidth,pixheight; // pixel width and height
|
||||
|
||||
u16 attrib_char; // clear attrib and character
|
||||
|
||||
s32 curx,cury; // current Cursor X,Y
|
||||
s32 wx1,wy1,wx2,wy2; // Text window
|
||||
|
||||
}SCharMap,*PCharMap;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// **************************************************************************************************************
|
||||
//
|
||||
// Public functions
|
||||
//
|
||||
// **************************************************************************************************************
|
||||
void charmap_init( s32 baseX, s32 baseY, s32 width, s32 height );
|
||||
void charmap_set_flags( u32 flags );
|
||||
void charmap_display( void );
|
||||
void charmap_clear( void );
|
||||
void charmap_print( char *pStr );
|
||||
void charmap_printf( const char *format, ...);
|
||||
void charmap_printat( s32 x, s32 y, char *pStr );
|
||||
void charmap_outchar( char Ch );
|
||||
void charmap_newline( void );
|
||||
void charmap_scroll_window( void );
|
||||
void charmap_setink( u8 ink );
|
||||
void charmap_setpaper( u8 paper );
|
||||
void charmap_set_window( s32 x1,s32 y1,s32 x2, s32 y2 );
|
||||
void charmap_home( void );
|
||||
void charmap_move_cursor( s32 x, s32 y);
|
||||
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //__CHARMAP_H_
|
||||
|
||||
|
|
|
@ -1,66 +1,66 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : drawprim.h
|
||||
// *
|
||||
// * note : A bunch of drawing primitives
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
|
||||
#ifndef XDRAWPRIM_H
|
||||
#define XDRAWPRIM_H
|
||||
|
||||
#include <openxdk.h>
|
||||
#include "xgfx2d/bitmap.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
//simple straightforward functions
|
||||
void clear(Bitmap *bmp, uint32 col);
|
||||
void putpixel(Bitmap *bmp, int x, int y, uint32 color);
|
||||
void line(Bitmap *bmp, int x1, int y1, int x2, int y2, uint32 color);
|
||||
|
||||
//horizontal line from x1 to x2 at y
|
||||
void hline(Bitmap *bmp, int x1, int y, int x2, uint32 color);
|
||||
//vertical line from y1 to y2 at x
|
||||
void vline(Bitmap *bmp, int x, int y1, int y2, uint32 color);
|
||||
|
||||
//rectangle (boundary)
|
||||
void rect(Bitmap *bmp, int x1, int y1, int x2, int y2, uint32 color);
|
||||
|
||||
//filled rectangle
|
||||
void rectfill(Bitmap *bmp, int x1, int y1, int x2, int y2, uint32 color);
|
||||
|
||||
//circle (not filled)
|
||||
void circle(Bitmap *bmp, int x, int y, int radius, uint32 color);
|
||||
|
||||
//more advanced stuff:
|
||||
|
||||
//antialiased pixel
|
||||
//use this for smooth scrolling starfields and stuff :)
|
||||
//this one takes floats
|
||||
void aa_pixel_float(Bitmap *bmp, float x,float y,int color);
|
||||
//this one takes x and y in 16.16 fixed point (slightly faster)
|
||||
void aa_pixel(Bitmap *bmp, int x, int y, int color);
|
||||
|
||||
// draws a single alpha blended pixel, used by bilinear_pixel and aa_line
|
||||
//this one takes x and y in 16.16 fixed point
|
||||
void alpha_pixel(Bitmap *bmp, int x, int y, uint32 sc, int alpha);
|
||||
|
||||
// nice antialiased line drawer
|
||||
// alpha from 0..255, means transparency
|
||||
void aa_line(Bitmap *bmp, float x1, float y1, float x2, float y2, uint32 color, int alpha);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : drawprim.h
|
||||
// *
|
||||
// * note : A bunch of drawing primitives
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
|
||||
#ifndef XDRAWPRIM_H
|
||||
#define XDRAWPRIM_H
|
||||
|
||||
#include <openxdk.h>
|
||||
#include "xgfx2d/bitmap.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
//simple straightforward functions
|
||||
void clear(Bitmap *bmp, uint32 col);
|
||||
void putpixel(Bitmap *bmp, int x, int y, uint32 color);
|
||||
void line(Bitmap *bmp, int x1, int y1, int x2, int y2, uint32 color);
|
||||
|
||||
//horizontal line from x1 to x2 at y
|
||||
void hline(Bitmap *bmp, int x1, int y, int x2, uint32 color);
|
||||
//vertical line from y1 to y2 at x
|
||||
void vline(Bitmap *bmp, int x, int y1, int y2, uint32 color);
|
||||
|
||||
//rectangle (boundary)
|
||||
void rect(Bitmap *bmp, int x1, int y1, int x2, int y2, uint32 color);
|
||||
|
||||
//filled rectangle
|
||||
void rectfill(Bitmap *bmp, int x1, int y1, int x2, int y2, uint32 color);
|
||||
|
||||
//circle (not filled)
|
||||
void circle(Bitmap *bmp, int x, int y, int radius, uint32 color);
|
||||
|
||||
//more advanced stuff:
|
||||
|
||||
//antialiased pixel
|
||||
//use this for smooth scrolling starfields and stuff :)
|
||||
//this one takes floats
|
||||
void aa_pixel_float(Bitmap *bmp, float x,float y,int color);
|
||||
//this one takes x and y in 16.16 fixed point (slightly faster)
|
||||
void aa_pixel(Bitmap *bmp, int x, int y, int color);
|
||||
|
||||
// draws a single alpha blended pixel, used by bilinear_pixel and aa_line
|
||||
//this one takes x and y in 16.16 fixed point
|
||||
void alpha_pixel(Bitmap *bmp, int x, int y, uint32 sc, int alpha);
|
||||
|
||||
// nice antialiased line drawer
|
||||
// alpha from 0..255, means transparency
|
||||
void aa_line(Bitmap *bmp, float x1, float y1, float x2, float y2, uint32 color, int alpha);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,154 +1,154 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xfile.h
|
||||
// *
|
||||
// * note : XBox File Access
|
||||
// *
|
||||
// ******************************************************************
|
||||
// * TODO: most of this belongs in a different .h
|
||||
// ******************************************************************
|
||||
#ifndef XFILE_H
|
||||
#define XFILE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "xboxkrnl\xboxkrnl.h"
|
||||
|
||||
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
|
||||
#define INVALID_FILE_SIZE ((HANDLE)-1)
|
||||
#define DELETE (0x00010000L)
|
||||
|
||||
#ifndef PAGE_SIZE
|
||||
#define PAGE_SIZE 4096
|
||||
#endif
|
||||
#define ALIGN_SIZE (0x10000) // NT's allocation alignment size (64k)
|
||||
|
||||
// PAGE_ALIGN:
|
||||
// Returns an address rounded down to the nearest page boundary.
|
||||
// Differences from NT: None.
|
||||
#define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
|
||||
#define PAGE_ALIGN(Va) ((PVOID)((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
|
||||
|
||||
|
||||
// Initializes an OBJECT_ATTRIBUTES. I added this because it's familiar to
|
||||
// NT kernel mode programmers. I just changed it to the XBOX style.
|
||||
// Works as if it were this function:
|
||||
#define InitializeObjectAttributes( p, n, a, r ) { \
|
||||
(p)->RootDirectory = r; \
|
||||
(p)->Attributes = a; \
|
||||
(p)->ObjectName = n; \
|
||||
}
|
||||
|
||||
|
||||
//unsure where these really belong
|
||||
#define MAX_PATH (2048)
|
||||
#define ERROR_NEGATIVE_SEEK (131)
|
||||
#define ERROR_INVALID_NAME (123)
|
||||
#define ERROR_OPEN_FAILED (110)
|
||||
#define ERROR_DRIVE_LOCKED (108)
|
||||
#define ERROR_HANDLE_DISK_FULL (39)
|
||||
#define ERROR_ALREADY_EXISTS (183)
|
||||
#define ERROR_INVALID_PARAMETER (1)
|
||||
#define ERROR_FILE_NOT_FOUND (2)
|
||||
#define ERROR_TOO_MANY_OPEN_FILES (4)
|
||||
#define ERROR_INVALID_HANDLE (6)
|
||||
#define ERROR_NOT_ENOUGH_MEMORY (0x100000)
|
||||
#define NO_ERROR (0)
|
||||
|
||||
typedef char* LPCSTR;
|
||||
|
||||
// ==============================================
|
||||
// end stuff that belong in some xboxwindows.h
|
||||
// ==============================================
|
||||
|
||||
// these structs need to be here as they are used as parameters
|
||||
typedef struct SSecurity_Attributes{
|
||||
u32 nLength;
|
||||
void* lpSecurityDescriptor;
|
||||
u32 bInheritHandle;
|
||||
} SSecurity_Attributes, *PSecurity_Attributes ;
|
||||
|
||||
|
||||
typedef struct _OVERLAPPED {
|
||||
u32 Internal;
|
||||
u32 InternalHigh;
|
||||
u32 Offset;
|
||||
u32 OffsetHigh;
|
||||
HANDLE hEvent;
|
||||
} OVERLAPPED, *LPOVERLAPPED;
|
||||
|
||||
|
||||
// Standard
|
||||
#define FILE_FLAG_WRITE_THROUGH (0x80000000)
|
||||
#define FILE_FLAG_OVERLAPPED (0x40000000)
|
||||
#define FILE_FLAG_NO_BUFFERING (0x20000000)
|
||||
#define FILE_FLAG_RANDOM_ACCESS (0x10000000)
|
||||
#define FILE_FLAG_SEQUENTIAL_SCAN (0x08000000)
|
||||
#define FILE_FLAG_DELETE_ON_CLOSE (0x04000000)
|
||||
#define FILE_FLAG_BACKUP_SEMANTICS (0x02000000)
|
||||
#define FILE_FLAG_POSIX_SEMANTICS (0x01000000)
|
||||
#define FILE_FLAG_OPEN_REPARSE_POINT (0x00200000)
|
||||
#define FILE_FLAG_OPEN_NO_RECALL (0x00100000)
|
||||
|
||||
#define CREATE_NEW (0x00000001)
|
||||
#define CREATE_ALWAYS (0x00000002)
|
||||
#define OPEN_EXISTING (0x00000003)
|
||||
#define OPEN_ALWAYS (0x00000004)
|
||||
#define TRUNCATE_EXISTING (0x00000005)
|
||||
|
||||
|
||||
#define GENERIC_READ (0x80000000)
|
||||
#define GENERIC_WRITE (0x40000000)
|
||||
|
||||
#define FILE_BEGIN (0x00000000)
|
||||
#define FILE_CURRENT (0x00000001)
|
||||
#define FILE_END (0x00000002)
|
||||
|
||||
|
||||
HANDLE CreateFile(char* lpFilename,
|
||||
u32 dwDesiredAccess,
|
||||
u32 dwShareMode,
|
||||
SSecurity_Attributes *lpSecurityAttributes,
|
||||
u32 dwCreationDisposition,
|
||||
u32 dwFlagsAndAttributes,
|
||||
HANDLE hTemplateFile
|
||||
);
|
||||
int ReadFile( HANDLE hFile, // file handle
|
||||
void* lpBuffer, // Dest buffer to put file
|
||||
u32 nNumberOfBytesToRead, // read "n" bytes
|
||||
u32* lpNumberOfBytesRead, // pointer to a place to store bytes read
|
||||
LPOVERLAPPED lpOverlapped // NULL unless overlap
|
||||
);
|
||||
|
||||
int WriteFile( HANDLE hFile,
|
||||
PVOID lpBuffer,
|
||||
u32 nNumberOfBytesToWrite,
|
||||
u32* lpNumberOfBytesWritten,
|
||||
LPOVERLAPPED lpOverlapped
|
||||
);
|
||||
|
||||
int CloseHandle(HANDLE Handle);
|
||||
int GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize);
|
||||
int SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod);
|
||||
|
||||
|
||||
|
||||
char* GetLastErrorMessage( void );
|
||||
void SetLastError( u32 ErrorCode );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xfile.h
|
||||
// *
|
||||
// * note : XBox File Access
|
||||
// *
|
||||
// ******************************************************************
|
||||
// * TODO: most of this belongs in a different .h
|
||||
// ******************************************************************
|
||||
#ifndef XFILE_H
|
||||
#define XFILE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "xboxkrnl\xboxkrnl.h"
|
||||
|
||||
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
|
||||
#define INVALID_FILE_SIZE ((HANDLE)-1)
|
||||
#define DELETE (0x00010000L)
|
||||
|
||||
#ifndef PAGE_SIZE
|
||||
#define PAGE_SIZE 4096
|
||||
#endif
|
||||
#define ALIGN_SIZE (0x10000) // NT's allocation alignment size (64k)
|
||||
|
||||
// PAGE_ALIGN:
|
||||
// Returns an address rounded down to the nearest page boundary.
|
||||
// Differences from NT: None.
|
||||
#define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
|
||||
#define PAGE_ALIGN(Va) ((PVOID)((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
|
||||
|
||||
|
||||
// Initializes an OBJECT_ATTRIBUTES. I added this because it's familiar to
|
||||
// NT kernel mode programmers. I just changed it to the XBOX style.
|
||||
// Works as if it were this function:
|
||||
#define InitializeObjectAttributes( p, n, a, r ) { \
|
||||
(p)->RootDirectory = r; \
|
||||
(p)->Attributes = a; \
|
||||
(p)->ObjectName = n; \
|
||||
}
|
||||
|
||||
|
||||
//unsure where these really belong
|
||||
#define MAX_PATH (2048)
|
||||
#define ERROR_NEGATIVE_SEEK (131)
|
||||
#define ERROR_INVALID_NAME (123)
|
||||
#define ERROR_OPEN_FAILED (110)
|
||||
#define ERROR_DRIVE_LOCKED (108)
|
||||
#define ERROR_HANDLE_DISK_FULL (39)
|
||||
#define ERROR_ALREADY_EXISTS (183)
|
||||
#define ERROR_INVALID_PARAMETER (1)
|
||||
#define ERROR_FILE_NOT_FOUND (2)
|
||||
#define ERROR_TOO_MANY_OPEN_FILES (4)
|
||||
#define ERROR_INVALID_HANDLE (6)
|
||||
#define ERROR_NOT_ENOUGH_MEMORY (0x100000)
|
||||
#define NO_ERROR (0)
|
||||
|
||||
typedef char* LPCSTR;
|
||||
|
||||
// ==============================================
|
||||
// end stuff that belong in some xboxwindows.h
|
||||
// ==============================================
|
||||
|
||||
// these structs need to be here as they are used as parameters
|
||||
typedef struct SSecurity_Attributes{
|
||||
u32 nLength;
|
||||
void* lpSecurityDescriptor;
|
||||
u32 bInheritHandle;
|
||||
} SSecurity_Attributes, *PSecurity_Attributes ;
|
||||
|
||||
|
||||
typedef struct _OVERLAPPED {
|
||||
u32 Internal;
|
||||
u32 InternalHigh;
|
||||
u32 Offset;
|
||||
u32 OffsetHigh;
|
||||
HANDLE hEvent;
|
||||
} OVERLAPPED, *LPOVERLAPPED;
|
||||
|
||||
|
||||
// Standard
|
||||
#define FILE_FLAG_WRITE_THROUGH (0x80000000)
|
||||
#define FILE_FLAG_OVERLAPPED (0x40000000)
|
||||
#define FILE_FLAG_NO_BUFFERING (0x20000000)
|
||||
#define FILE_FLAG_RANDOM_ACCESS (0x10000000)
|
||||
#define FILE_FLAG_SEQUENTIAL_SCAN (0x08000000)
|
||||
#define FILE_FLAG_DELETE_ON_CLOSE (0x04000000)
|
||||
#define FILE_FLAG_BACKUP_SEMANTICS (0x02000000)
|
||||
#define FILE_FLAG_POSIX_SEMANTICS (0x01000000)
|
||||
#define FILE_FLAG_OPEN_REPARSE_POINT (0x00200000)
|
||||
#define FILE_FLAG_OPEN_NO_RECALL (0x00100000)
|
||||
|
||||
#define CREATE_NEW (0x00000001)
|
||||
#define CREATE_ALWAYS (0x00000002)
|
||||
#define OPEN_EXISTING (0x00000003)
|
||||
#define OPEN_ALWAYS (0x00000004)
|
||||
#define TRUNCATE_EXISTING (0x00000005)
|
||||
|
||||
|
||||
#define GENERIC_READ (0x80000000)
|
||||
#define GENERIC_WRITE (0x40000000)
|
||||
|
||||
#define FILE_BEGIN (0x00000000)
|
||||
#define FILE_CURRENT (0x00000001)
|
||||
#define FILE_END (0x00000002)
|
||||
|
||||
|
||||
HANDLE CreateFile(char* lpFilename,
|
||||
u32 dwDesiredAccess,
|
||||
u32 dwShareMode,
|
||||
SSecurity_Attributes *lpSecurityAttributes,
|
||||
u32 dwCreationDisposition,
|
||||
u32 dwFlagsAndAttributes,
|
||||
HANDLE hTemplateFile
|
||||
);
|
||||
int ReadFile( HANDLE hFile, // file handle
|
||||
void* lpBuffer, // Dest buffer to put file
|
||||
u32 nNumberOfBytesToRead, // read "n" bytes
|
||||
u32* lpNumberOfBytesRead, // pointer to a place to store bytes read
|
||||
LPOVERLAPPED lpOverlapped // NULL unless overlap
|
||||
);
|
||||
|
||||
int WriteFile( HANDLE hFile,
|
||||
PVOID lpBuffer,
|
||||
u32 nNumberOfBytesToWrite,
|
||||
u32* lpNumberOfBytesWritten,
|
||||
LPOVERLAPPED lpOverlapped
|
||||
);
|
||||
|
||||
int CloseHandle(HANDLE Handle);
|
||||
int GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize);
|
||||
int SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod);
|
||||
|
||||
|
||||
|
||||
char* GetLastErrorMessage( void );
|
||||
void SetLastError( u32 ErrorCode );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,108 +1,108 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xfile_def.h
|
||||
// *
|
||||
// * note : internal typedefs / structs / etc for xfile
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XFILE_DEF_H
|
||||
#define XFILE_DEF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// DEVICE_TYPEs (I took a guess as to which the XBOX might have.)
|
||||
#define FILE_DEVICE_CD_ROM (0x00000002)
|
||||
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM (0x00000003)
|
||||
#define FILE_DEVICE_CONTROLLER (0x00000004)
|
||||
#define FILE_DEVICE_DISK (0x00000007)
|
||||
#define FILE_DEVICE_DISK_FILE_SYSTEM (0x00000008)
|
||||
#define FILE_DEVICE_FILE_SYSTEM (0x00000009)
|
||||
#define FILE_DEVICE_NULL (0x00000015)
|
||||
#define FILE_DEVICE_SCREEN (0x0000001c)
|
||||
#define FILE_DEVICE_SOUND (0x0000001d)
|
||||
#define FILE_DEVICE_UNKNOWN (0x00000022)
|
||||
#define FILE_DEVICE_VIDEO (0x00000023)
|
||||
#define FILE_DEVICE_VIRTUAL_DISK (0x00000024)
|
||||
#define FILE_DEVICE_FULLSCREEN_VIDEO (0x00000034)
|
||||
|
||||
#define FILE_ATTRIBUTE_READONLY (0x00000001)
|
||||
#define FILE_ATTRIBUTE_HIDDEN (0x00000002)
|
||||
#define FILE_ATTRIBUTE_SYSTEM (0x00000004)
|
||||
#define FILE_ATTRIBUTE_DIRECTORY (0x00000010)
|
||||
#define FILE_ATTRIBUTE_ARCHIVE (0x00000020)
|
||||
#define FILE_ATTRIBUTE_NORMAL (0x00000080)
|
||||
#define FILE_ATTRIBUTE_TEMPORARY (0x00000100)
|
||||
#define FILE_FLAG_WRITE_THROUGH (0x80000000)
|
||||
#define FILE_FLAG_RANDOM_ACCESS (0x10000000)
|
||||
|
||||
// NtCreateFile/NtOpenFile stuff
|
||||
#define FILE_SUPERSEDED 0x00000000
|
||||
#define FILE_OPENED 0x00000001
|
||||
#define FILE_CREATED 0x00000002
|
||||
#define FILE_OVERWRITTEN 0x00000003
|
||||
#define FILE_EXISTS 0x00000004
|
||||
#define FILE_DOES_NOT_EXIST 0x00000005
|
||||
|
||||
// Flags for OBJECT_ATTRIBUTES::Attributes
|
||||
#define OBJ_INHERIT (0x00000002L)
|
||||
#define OBJ_PERMANENT (0x00000010L)
|
||||
#define OBJ_EXCLUSIVE (0x00000020L)
|
||||
#define OBJ_CASE_INSENSITIVE (0x00000040L)
|
||||
#define OBJ_OPENIF (0x00000080L)
|
||||
#define OBJ_OPENLINK (0x00000100L)
|
||||
#define OBJ_KERNEL_HANDLE (0x00000200L)
|
||||
#define OBJ_VALID_ATTRIBUTES (0x000003F2L)
|
||||
|
||||
// ******************************************************************
|
||||
// * File pointer information (SetFilePointer, etc)
|
||||
// ******************************************************************
|
||||
typedef struct _FILE_POSITION_INFORMATION
|
||||
{
|
||||
LARGE_INTEGER CurrentByteOffset;
|
||||
}
|
||||
FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// * Access times and normal attributes (only set is known to be
|
||||
// * supported - use FILE_NETWORK_OPEN_INFORMATION if you want to
|
||||
// * query this information.
|
||||
// ******************************************************************
|
||||
typedef struct _FILE_BASIC_INFORMATION
|
||||
{
|
||||
LARGE_INTEGER CreationTime;
|
||||
LARGE_INTEGER LastAccessTime;
|
||||
LARGE_INTEGER LastWriteTime;
|
||||
LARGE_INTEGER ChangeTime;
|
||||
ULONG FileAttributes;
|
||||
}
|
||||
FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// * Access times and normal attributes
|
||||
// ******************************************************************
|
||||
typedef struct _FILE_NETWORK_OPEN_INFORMATION
|
||||
{
|
||||
LARGE_INTEGER CreationTime; // 000 Time file was created
|
||||
LARGE_INTEGER LastAccessTime; // 008 Time file was last accessed
|
||||
LARGE_INTEGER LastWriteTime; // 010 Time file was last opened for writing?
|
||||
LARGE_INTEGER ChangeTime; // 018 Time file was last changed?
|
||||
LARGE_INTEGER AllocationSize; // 020 Size of the file in the file system (including slack space)
|
||||
LARGE_INTEGER EndOfFile; // 028 What we'd normally call the file size
|
||||
ULONG FileAttributes; // 030 File attributes
|
||||
ULONG Unknown; // 034 Unknown
|
||||
}
|
||||
FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
|
||||
|
||||
LARGE_INTEGER AddU64(PLARGE_INTEGER A, PLARGE_INTEGER B);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // XFILE_DEF_H
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xfile_def.h
|
||||
// *
|
||||
// * note : internal typedefs / structs / etc for xfile
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XFILE_DEF_H
|
||||
#define XFILE_DEF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// DEVICE_TYPEs (I took a guess as to which the XBOX might have.)
|
||||
#define FILE_DEVICE_CD_ROM (0x00000002)
|
||||
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM (0x00000003)
|
||||
#define FILE_DEVICE_CONTROLLER (0x00000004)
|
||||
#define FILE_DEVICE_DISK (0x00000007)
|
||||
#define FILE_DEVICE_DISK_FILE_SYSTEM (0x00000008)
|
||||
#define FILE_DEVICE_FILE_SYSTEM (0x00000009)
|
||||
#define FILE_DEVICE_NULL (0x00000015)
|
||||
#define FILE_DEVICE_SCREEN (0x0000001c)
|
||||
#define FILE_DEVICE_SOUND (0x0000001d)
|
||||
#define FILE_DEVICE_UNKNOWN (0x00000022)
|
||||
#define FILE_DEVICE_VIDEO (0x00000023)
|
||||
#define FILE_DEVICE_VIRTUAL_DISK (0x00000024)
|
||||
#define FILE_DEVICE_FULLSCREEN_VIDEO (0x00000034)
|
||||
|
||||
#define FILE_ATTRIBUTE_READONLY (0x00000001)
|
||||
#define FILE_ATTRIBUTE_HIDDEN (0x00000002)
|
||||
#define FILE_ATTRIBUTE_SYSTEM (0x00000004)
|
||||
#define FILE_ATTRIBUTE_DIRECTORY (0x00000010)
|
||||
#define FILE_ATTRIBUTE_ARCHIVE (0x00000020)
|
||||
#define FILE_ATTRIBUTE_NORMAL (0x00000080)
|
||||
#define FILE_ATTRIBUTE_TEMPORARY (0x00000100)
|
||||
#define FILE_FLAG_WRITE_THROUGH (0x80000000)
|
||||
#define FILE_FLAG_RANDOM_ACCESS (0x10000000)
|
||||
|
||||
// NtCreateFile/NtOpenFile stuff
|
||||
#define FILE_SUPERSEDED 0x00000000
|
||||
#define FILE_OPENED 0x00000001
|
||||
#define FILE_CREATED 0x00000002
|
||||
#define FILE_OVERWRITTEN 0x00000003
|
||||
#define FILE_EXISTS 0x00000004
|
||||
#define FILE_DOES_NOT_EXIST 0x00000005
|
||||
|
||||
// Flags for OBJECT_ATTRIBUTES::Attributes
|
||||
#define OBJ_INHERIT (0x00000002L)
|
||||
#define OBJ_PERMANENT (0x00000010L)
|
||||
#define OBJ_EXCLUSIVE (0x00000020L)
|
||||
#define OBJ_CASE_INSENSITIVE (0x00000040L)
|
||||
#define OBJ_OPENIF (0x00000080L)
|
||||
#define OBJ_OPENLINK (0x00000100L)
|
||||
#define OBJ_KERNEL_HANDLE (0x00000200L)
|
||||
#define OBJ_VALID_ATTRIBUTES (0x000003F2L)
|
||||
|
||||
// ******************************************************************
|
||||
// * File pointer information (SetFilePointer, etc)
|
||||
// ******************************************************************
|
||||
typedef struct _FILE_POSITION_INFORMATION
|
||||
{
|
||||
LARGE_INTEGER CurrentByteOffset;
|
||||
}
|
||||
FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// * Access times and normal attributes (only set is known to be
|
||||
// * supported - use FILE_NETWORK_OPEN_INFORMATION if you want to
|
||||
// * query this information.
|
||||
// ******************************************************************
|
||||
typedef struct _FILE_BASIC_INFORMATION
|
||||
{
|
||||
LARGE_INTEGER CreationTime;
|
||||
LARGE_INTEGER LastAccessTime;
|
||||
LARGE_INTEGER LastWriteTime;
|
||||
LARGE_INTEGER ChangeTime;
|
||||
ULONG FileAttributes;
|
||||
}
|
||||
FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// * Access times and normal attributes
|
||||
// ******************************************************************
|
||||
typedef struct _FILE_NETWORK_OPEN_INFORMATION
|
||||
{
|
||||
LARGE_INTEGER CreationTime; // 000 Time file was created
|
||||
LARGE_INTEGER LastAccessTime; // 008 Time file was last accessed
|
||||
LARGE_INTEGER LastWriteTime; // 010 Time file was last opened for writing?
|
||||
LARGE_INTEGER ChangeTime; // 018 Time file was last changed?
|
||||
LARGE_INTEGER AllocationSize; // 020 Size of the file in the file system (including slack space)
|
||||
LARGE_INTEGER EndOfFile; // 028 What we'd normally call the file size
|
||||
ULONG FileAttributes; // 030 File attributes
|
||||
ULONG Unknown; // 034 Unknown
|
||||
}
|
||||
FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
|
||||
|
||||
LARGE_INTEGER AddU64(PLARGE_INTEGER A, PLARGE_INTEGER B);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // XFILE_DEF_H
|
||||
|
|
|
@ -1,44 +1,44 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xhal.h
|
||||
// *
|
||||
// * note : XBox Hardware Abstraction Layer
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XHAL_H
|
||||
#define XHAL_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * XVGA
|
||||
// ******************************************************************
|
||||
#include "xvga.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XFile
|
||||
// ******************************************************************
|
||||
#include "xfile.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XOHCI
|
||||
// ******************************************************************
|
||||
#include "xohci.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * The user application starts here
|
||||
// ******************************************************************
|
||||
extern VOID XBoxStartup();
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xhal.h
|
||||
// *
|
||||
// * note : XBox Hardware Abstraction Layer
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XHAL_H
|
||||
#define XHAL_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * XVGA
|
||||
// ******************************************************************
|
||||
#include "xvga.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XFile
|
||||
// ******************************************************************
|
||||
#include "xfile.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * XOHCI
|
||||
// ******************************************************************
|
||||
#include "xohci.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * The user application starts here
|
||||
// ******************************************************************
|
||||
extern VOID XBoxStartup();
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,282 +1,282 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xnvidia.h
|
||||
// *
|
||||
// * note : XBox NVidia Chip
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XNVIDIA_H
|
||||
#define XNVIDIA_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * Accessible Functions
|
||||
// ******************************************************************
|
||||
void NVSetScreenAddress(void);
|
||||
void NVSetBPP(int mode);
|
||||
int NVSetVideoMode(u32 dwResolution, u32 dwPixelFormat );
|
||||
int NVSetFlickerFilter(DWORD dwLevel);
|
||||
void NVSetClippingRectangle(u32 x1,u32 y1,u32 x2,u32 y2);
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetDisplayMode pixel formats
|
||||
// ******************************************************************
|
||||
#define PIXEL_16BITS_555 0x10
|
||||
#define PIXEL_16BITS_565 0x11
|
||||
#define PIXEL_32BITS 0x12
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetDisplayMode resolutions (only 640 is tested)
|
||||
// ******************************************************************
|
||||
#define RESOLUTION_640 0x20010101
|
||||
#define RESOLUTION_720 0x20020101
|
||||
#define RESOLUTION_800 0x20030101
|
||||
#define RESOLUTION_1024 0x200B0101
|
||||
|
||||
// ******************************************************************
|
||||
// * Parameters for AvSendTVEncoderOption
|
||||
// ******************************************************************
|
||||
#define AV_OPTION_SET_MACROVISION 0x01
|
||||
#define AV_OPTION_CONFIRM_MACROVISION 0x0A
|
||||
#define AV_OPTION_SET_FLICKER_FILTER 0x0B
|
||||
|
||||
// ******************************************************************
|
||||
// * NVidia registers base / offsets
|
||||
// ******************************************************************
|
||||
#define NV_REGBASE (0xFD000000)
|
||||
#define NV_PMC (0x000000)
|
||||
#define NV_PFIFO (0x002000)
|
||||
#define NV_FB (0x100000)
|
||||
#define NV_EXTDEV (0x101000)
|
||||
#define NV_CRTC (0x600000)
|
||||
#define NV_RAMDAC (0x680000)
|
||||
#define NV_FIFO (0x800000)
|
||||
|
||||
// ******************************************************************
|
||||
// * CRTC register accessors
|
||||
// ******************************************************************
|
||||
#define CRTC_WRITE(a,b) *((volatile u8*) (NV_REGBASE + NV_CRTC + (a))) = (b)
|
||||
#define CRTC_READ(a) (*((volatile u8*) (NV_REGBASE + NV_CRTC + (a))))
|
||||
#define CRTC_WRITEL(a,b) *((volatile u32*) (NV_REGBASE + NV_CRTC + (a))) = (b)
|
||||
#define CRTC_READL(a) (*((volatile u32*) (NV_REGBASE + NV_CRTC + (a))))
|
||||
|
||||
// ******************************************************************
|
||||
// * Macros to get pointers to FIFO regs
|
||||
// ******************************************************************
|
||||
#define NVPTR_ROP ((PNV_ROP)(NV_REGBASE + NV_FIFO + 0x0000))
|
||||
#define NVPTR_PATTERN ((PNV_PATTERN)(NV_REGBASE + NV_FIFO + 0x4000))
|
||||
#define NVPTR_CLIP ((PNV_CLIP)(NV_REGBASE + NV_FIFO + 0x2000))
|
||||
#define NVPTR_SCREENBLT ((PNV_SCREENBLT)(NV_REGBASE + NV_FIFO + 0x8000))
|
||||
#define NVPTR_BLIT ((PNV_BLIT)(NV_REGBASE + NV_FIFO + 0x6000))
|
||||
#define NVPTR_BITMAP ((PNV_BITMAP)(NV_REGBASE + NV_FIFO + 0xA000))
|
||||
#define NVPTR_LINE ((PNV_LINE)(NV_REGBASE + NV_FIFO + 0xC000))
|
||||
|
||||
// ******************************************************************
|
||||
// * Registers
|
||||
// ******************************************************************
|
||||
#define NV_INPUT_STATUS (0x13DA)
|
||||
#define NV_CRTC_FB_ADDR (0x800) // Display start address
|
||||
#define NV_CRTC_INDEX (0x13D4)
|
||||
#define NV_CRTC_DATA (0x13D5)
|
||||
#define NV_CRTC_REGS_LOCK 0x1F
|
||||
#define NV_CRTC_UNLOCK_VALUE 0x57
|
||||
#define NV_CRTC_LOCK_VALUE 0x99
|
||||
#define NV_CRTC_PIXEL (0x28)
|
||||
|
||||
// ******************************************************************
|
||||
// * Pixel / TV Mode bits
|
||||
// ******************************************************************
|
||||
#define NV_TV 0x80
|
||||
#define NV_VGA 0x00
|
||||
#define NV_PAL 0x40
|
||||
#define NV_NTSC 0x00
|
||||
#define NV_VGA 0x00 // format
|
||||
#define NV_8BPP 0x01
|
||||
#define NV_16BPP 0x02
|
||||
#define NV_32BPP 0x03
|
||||
#define NV_BPP_MASK (~0x03) //
|
||||
|
||||
|
||||
//-- FIFO Regs -----------------------------------------------------------------
|
||||
|
||||
// Macro to wait until the GPU has enough FIFO slots
|
||||
#define NV_WAIT_FIFO(Ptr, Cnt) while( ( ((Ptr)->FifoFree) / 4) < (Cnt) );
|
||||
|
||||
// FIFO + 0x0000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG Rop3;
|
||||
} NV_ROP, *PNV_ROP;
|
||||
|
||||
// FIFO + 0x4000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BD];
|
||||
ULONG Shape;
|
||||
ULONG Reserved2[0x001];
|
||||
ULONG Color0;
|
||||
ULONG Color1;
|
||||
ULONG Monochrome[2];
|
||||
} NV_PATTERN, *PNV_PATTERN;
|
||||
|
||||
// FIFO + 0x2000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
} NV_CLIP, *PNV_CLIP;
|
||||
|
||||
/*
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused[1];
|
||||
ULONG Reserved1[0x0BC];
|
||||
ULONG Color;
|
||||
ULONG Reserved3[0x03E];
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
} NV_RECTANGLE, *PNV_RECTANGLE;
|
||||
*/
|
||||
|
||||
// FIFO + 0x8000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG TopLeftSrc;
|
||||
ULONG TopLeftDst;
|
||||
ULONG WidthHeight;
|
||||
} NV_SCREENBLT, *PNV_SCREENBLT;
|
||||
|
||||
// FIFO + 0x6000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused[1];
|
||||
ULONG Reserved1[0x0BC];
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
ULONG WidthHeightIn;
|
||||
ULONG Reserved2[0x03C];
|
||||
ULONG Pixels;
|
||||
} NV_BLIT, *PNV_BLIT;
|
||||
|
||||
// FIFO + 0xA000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG Reserved2[0x03F];
|
||||
ULONG Color1A;
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
} UnclippedRectangle[64];
|
||||
ULONG Reserved3[0x07D];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipB;
|
||||
ULONG Color1B;
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClippedRectangle[64];
|
||||
ULONG Reserved4[0x07B];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipC;
|
||||
ULONG Color1C;
|
||||
ULONG WidthHeightC;
|
||||
ULONG PointC;
|
||||
ULONG MonochromeData1C;
|
||||
ULONG Reserved5[0x0F9];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipD;
|
||||
ULONG Color1D;
|
||||
ULONG WidthHeightInD;
|
||||
ULONG WidthHeightOutD;
|
||||
ULONG PointD;
|
||||
ULONG MonochromeData1D;
|
||||
ULONG Reserved6[0x0F8];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipE;
|
||||
ULONG Color0E;
|
||||
ULONG Color1E;
|
||||
ULONG WidthHeightInE;
|
||||
ULONG WidthHeightOutE;
|
||||
ULONG PointE;
|
||||
ULONG MonochromeData01E;
|
||||
} NV_BITMAP, *PNV_BITMAP;
|
||||
|
||||
// FIFO + 0xC000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused[1];
|
||||
ULONG Reserved1[0x0BC];
|
||||
ULONG Color; // source color 0304-0307
|
||||
ULONG Reserved2[0x03E];
|
||||
struct { // start aliased methods in array 0400-
|
||||
ULONG Point0; // y_x S16_S16 in pixels 0- 3
|
||||
ULONG Point1; // y_x S16_S16 in pixels 4- 7
|
||||
} Lin[16]; // end of aliased methods in array -047f
|
||||
struct { // start aliased methods in array 0480-
|
||||
ULONG Point0X; // in pixels, 0 at left 0- 3
|
||||
ULONG Point0Y; // in pixels, 0 at top 4- 7
|
||||
ULONG Point1X; // in pixels, 0 at left 8- b
|
||||
ULONG Point1Y; // in pixels, 0 at top c- f
|
||||
} Lin32[8]; // end of aliased methods in array -04ff
|
||||
ULONG PolyLin[32]; // y_x S16_S16 in pixels 0500-057f
|
||||
struct { // start aliased methods in array 0580-
|
||||
ULONG x; // in pixels, 0 at left 0- 3
|
||||
ULONG y; // in pixels, 0 at top 4- 7
|
||||
} PolyLin32[16]; // end of aliased methods in array -05ff
|
||||
struct { // start aliased methods in array 0600-
|
||||
ULONG Color; // source color 0- 3
|
||||
ULONG Point; // y_x S16_S16 in pixels 4- 7
|
||||
} ColorPolyLin[16]; // end of aliased methods in array -067f
|
||||
} NV_LINE, *PNV_LINE;
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // XNVIDIA_H
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xnvidia.h
|
||||
// *
|
||||
// * note : XBox NVidia Chip
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XNVIDIA_H
|
||||
#define XNVIDIA_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * Accessible Functions
|
||||
// ******************************************************************
|
||||
void NVSetScreenAddress(void);
|
||||
void NVSetBPP(int mode);
|
||||
int NVSetVideoMode(u32 dwResolution, u32 dwPixelFormat );
|
||||
int NVSetFlickerFilter(DWORD dwLevel);
|
||||
void NVSetClippingRectangle(u32 x1,u32 y1,u32 x2,u32 y2);
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetDisplayMode pixel formats
|
||||
// ******************************************************************
|
||||
#define PIXEL_16BITS_555 0x10
|
||||
#define PIXEL_16BITS_565 0x11
|
||||
#define PIXEL_32BITS 0x12
|
||||
|
||||
// ******************************************************************
|
||||
// * AvSetDisplayMode resolutions (only 640 is tested)
|
||||
// ******************************************************************
|
||||
#define RESOLUTION_640 0x20010101
|
||||
#define RESOLUTION_720 0x20020101
|
||||
#define RESOLUTION_800 0x20030101
|
||||
#define RESOLUTION_1024 0x200B0101
|
||||
|
||||
// ******************************************************************
|
||||
// * Parameters for AvSendTVEncoderOption
|
||||
// ******************************************************************
|
||||
#define AV_OPTION_SET_MACROVISION 0x01
|
||||
#define AV_OPTION_CONFIRM_MACROVISION 0x0A
|
||||
#define AV_OPTION_SET_FLICKER_FILTER 0x0B
|
||||
|
||||
// ******************************************************************
|
||||
// * NVidia registers base / offsets
|
||||
// ******************************************************************
|
||||
#define NV_REGBASE (0xFD000000)
|
||||
#define NV_PMC (0x000000)
|
||||
#define NV_PFIFO (0x002000)
|
||||
#define NV_FB (0x100000)
|
||||
#define NV_EXTDEV (0x101000)
|
||||
#define NV_CRTC (0x600000)
|
||||
#define NV_RAMDAC (0x680000)
|
||||
#define NV_FIFO (0x800000)
|
||||
|
||||
// ******************************************************************
|
||||
// * CRTC register accessors
|
||||
// ******************************************************************
|
||||
#define CRTC_WRITE(a,b) *((volatile u8*) (NV_REGBASE + NV_CRTC + (a))) = (b)
|
||||
#define CRTC_READ(a) (*((volatile u8*) (NV_REGBASE + NV_CRTC + (a))))
|
||||
#define CRTC_WRITEL(a,b) *((volatile u32*) (NV_REGBASE + NV_CRTC + (a))) = (b)
|
||||
#define CRTC_READL(a) (*((volatile u32*) (NV_REGBASE + NV_CRTC + (a))))
|
||||
|
||||
// ******************************************************************
|
||||
// * Macros to get pointers to FIFO regs
|
||||
// ******************************************************************
|
||||
#define NVPTR_ROP ((PNV_ROP)(NV_REGBASE + NV_FIFO + 0x0000))
|
||||
#define NVPTR_PATTERN ((PNV_PATTERN)(NV_REGBASE + NV_FIFO + 0x4000))
|
||||
#define NVPTR_CLIP ((PNV_CLIP)(NV_REGBASE + NV_FIFO + 0x2000))
|
||||
#define NVPTR_SCREENBLT ((PNV_SCREENBLT)(NV_REGBASE + NV_FIFO + 0x8000))
|
||||
#define NVPTR_BLIT ((PNV_BLIT)(NV_REGBASE + NV_FIFO + 0x6000))
|
||||
#define NVPTR_BITMAP ((PNV_BITMAP)(NV_REGBASE + NV_FIFO + 0xA000))
|
||||
#define NVPTR_LINE ((PNV_LINE)(NV_REGBASE + NV_FIFO + 0xC000))
|
||||
|
||||
// ******************************************************************
|
||||
// * Registers
|
||||
// ******************************************************************
|
||||
#define NV_INPUT_STATUS (0x13DA)
|
||||
#define NV_CRTC_FB_ADDR (0x800) // Display start address
|
||||
#define NV_CRTC_INDEX (0x13D4)
|
||||
#define NV_CRTC_DATA (0x13D5)
|
||||
#define NV_CRTC_REGS_LOCK 0x1F
|
||||
#define NV_CRTC_UNLOCK_VALUE 0x57
|
||||
#define NV_CRTC_LOCK_VALUE 0x99
|
||||
#define NV_CRTC_PIXEL (0x28)
|
||||
|
||||
// ******************************************************************
|
||||
// * Pixel / TV Mode bits
|
||||
// ******************************************************************
|
||||
#define NV_TV 0x80
|
||||
#define NV_VGA 0x00
|
||||
#define NV_PAL 0x40
|
||||
#define NV_NTSC 0x00
|
||||
#define NV_VGA 0x00 // format
|
||||
#define NV_8BPP 0x01
|
||||
#define NV_16BPP 0x02
|
||||
#define NV_32BPP 0x03
|
||||
#define NV_BPP_MASK (~0x03) //
|
||||
|
||||
|
||||
//-- FIFO Regs -----------------------------------------------------------------
|
||||
|
||||
// Macro to wait until the GPU has enough FIFO slots
|
||||
#define NV_WAIT_FIFO(Ptr, Cnt) while( ( ((Ptr)->FifoFree) / 4) < (Cnt) );
|
||||
|
||||
// FIFO + 0x0000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG Rop3;
|
||||
} NV_ROP, *PNV_ROP;
|
||||
|
||||
// FIFO + 0x4000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BD];
|
||||
ULONG Shape;
|
||||
ULONG Reserved2[0x001];
|
||||
ULONG Color0;
|
||||
ULONG Color1;
|
||||
ULONG Monochrome[2];
|
||||
} NV_PATTERN, *PNV_PATTERN;
|
||||
|
||||
// FIFO + 0x2000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
} NV_CLIP, *PNV_CLIP;
|
||||
|
||||
/*
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused[1];
|
||||
ULONG Reserved1[0x0BC];
|
||||
ULONG Color;
|
||||
ULONG Reserved3[0x03E];
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
} NV_RECTANGLE, *PNV_RECTANGLE;
|
||||
*/
|
||||
|
||||
// FIFO + 0x8000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG TopLeftSrc;
|
||||
ULONG TopLeftDst;
|
||||
ULONG WidthHeight;
|
||||
} NV_SCREENBLT, *PNV_SCREENBLT;
|
||||
|
||||
// FIFO + 0x6000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused[1];
|
||||
ULONG Reserved1[0x0BC];
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
ULONG WidthHeightIn;
|
||||
ULONG Reserved2[0x03C];
|
||||
ULONG Pixels;
|
||||
} NV_BLIT, *PNV_BLIT;
|
||||
|
||||
// FIFO + 0xA000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused;
|
||||
ULONG Reserved1[0x0BB];
|
||||
ULONG Reserved2[0x03F];
|
||||
ULONG Color1A;
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG WidthHeight;
|
||||
} UnclippedRectangle[64];
|
||||
ULONG Reserved3[0x07D];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipB;
|
||||
ULONG Color1B;
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClippedRectangle[64];
|
||||
ULONG Reserved4[0x07B];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipC;
|
||||
ULONG Color1C;
|
||||
ULONG WidthHeightC;
|
||||
ULONG PointC;
|
||||
ULONG MonochromeData1C;
|
||||
ULONG Reserved5[0x0F9];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipD;
|
||||
ULONG Color1D;
|
||||
ULONG WidthHeightInD;
|
||||
ULONG WidthHeightOutD;
|
||||
ULONG PointD;
|
||||
ULONG MonochromeData1D;
|
||||
ULONG Reserved6[0x0F8];
|
||||
struct
|
||||
{
|
||||
ULONG TopLeft;
|
||||
ULONG BottomRight;
|
||||
} ClipE;
|
||||
ULONG Color0E;
|
||||
ULONG Color1E;
|
||||
ULONG WidthHeightInE;
|
||||
ULONG WidthHeightOutE;
|
||||
ULONG PointE;
|
||||
ULONG MonochromeData01E;
|
||||
} NV_BITMAP, *PNV_BITMAP;
|
||||
|
||||
// FIFO + 0xC000
|
||||
typedef volatile struct
|
||||
{
|
||||
ULONG Reserved0[4];
|
||||
USHORT FifoFree;
|
||||
USHORT Unused[1];
|
||||
ULONG Reserved1[0x0BC];
|
||||
ULONG Color; // source color 0304-0307
|
||||
ULONG Reserved2[0x03E];
|
||||
struct { // start aliased methods in array 0400-
|
||||
ULONG Point0; // y_x S16_S16 in pixels 0- 3
|
||||
ULONG Point1; // y_x S16_S16 in pixels 4- 7
|
||||
} Lin[16]; // end of aliased methods in array -047f
|
||||
struct { // start aliased methods in array 0480-
|
||||
ULONG Point0X; // in pixels, 0 at left 0- 3
|
||||
ULONG Point0Y; // in pixels, 0 at top 4- 7
|
||||
ULONG Point1X; // in pixels, 0 at left 8- b
|
||||
ULONG Point1Y; // in pixels, 0 at top c- f
|
||||
} Lin32[8]; // end of aliased methods in array -04ff
|
||||
ULONG PolyLin[32]; // y_x S16_S16 in pixels 0500-057f
|
||||
struct { // start aliased methods in array 0580-
|
||||
ULONG x; // in pixels, 0 at left 0- 3
|
||||
ULONG y; // in pixels, 0 at top 4- 7
|
||||
} PolyLin32[16]; // end of aliased methods in array -05ff
|
||||
struct { // start aliased methods in array 0600-
|
||||
ULONG Color; // source color 0- 3
|
||||
ULONG Point; // y_x S16_S16 in pixels 4- 7
|
||||
} ColorPolyLin[16]; // end of aliased methods in array -067f
|
||||
} NV_LINE, *PNV_LINE;
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // XNVIDIA_H
|
||||
|
|
|
@ -1,293 +1,293 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xohci.h
|
||||
// *
|
||||
// * note : XBox USB Open Host Controller Interface
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XOHCI_H
|
||||
#define XOHCI_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * external functions
|
||||
// ******************************************************************
|
||||
void xohci_init();
|
||||
|
||||
// ******************************************************************
|
||||
// * OHCI (PCI)
|
||||
// ******************************************************************
|
||||
#include "xohci_pci.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : ed (Endpoint Descriptor)
|
||||
// ******************************************************************
|
||||
#pragma pack(16)
|
||||
typedef struct _xohci_ed
|
||||
{
|
||||
// ******************************************************************
|
||||
// * DWord 0
|
||||
// ******************************************************************
|
||||
uint32 m_function_addr : 7;
|
||||
uint32 m_endpoint_numb : 4;
|
||||
uint32 m_direction : 2;
|
||||
uint32 m_speed : 1;
|
||||
uint32 m_skip : 1;
|
||||
uint32 m_format : 1;
|
||||
uint32 m_max_packet_size : 11;
|
||||
uint32 m_reserved0 : 5;
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_reserved1 : 4;
|
||||
uint32 m_tail_p : 28;
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 2
|
||||
// ******************************************************************
|
||||
uint32 m_halted : 1;
|
||||
uint32 m_toggle_carry : 1;
|
||||
uint32 m_zero_bit : 2;
|
||||
uint32 m_head_p : 28;
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_reserved3 : 4;
|
||||
uint32 m_next_ed : 28;
|
||||
}
|
||||
xohci_ed;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * Endpoint Descriptor Flags
|
||||
// ******************************************************************
|
||||
#define ED_DIRECTION_IN 0
|
||||
#define ED_DIRECTION_OUT 1
|
||||
#define ED_SPEED_FULL 0
|
||||
#define ED_SPEED_LOW 1
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : td (Transfer Descriptor)
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Since XBox controllers are not isochronous, we do not need
|
||||
// * to support that transfer type. therefore, we also do not need
|
||||
// * to align this structure to 32 bytes, as general transfer desc
|
||||
// * only require 16 byte alignment
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma pack(16)
|
||||
typedef struct _xohci_td
|
||||
{
|
||||
// ******************************************************************
|
||||
// * DWord 0
|
||||
// ******************************************************************
|
||||
uint32 m_reserved18 : 18; // (NA)
|
||||
uint32 m_buffer_rounding : 1; // (RO) R
|
||||
uint32 m_direction_pid : 2; // (RO) DP
|
||||
uint32 m_delay_int : 3; // (RO) DI
|
||||
uint32 m_data_toggle : 2; // (RW) T
|
||||
uint32 m_error_count : 2; // (RW) EC
|
||||
uint32 m_condition_code : 4; // (RW) CC
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_current_buffer : 32; // (RW) CBP
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 2
|
||||
// ******************************************************************
|
||||
uint32 m_zero4 : 4; // (00) Should be Zero
|
||||
uint32 m_next_td : 28; // (RW) NextTD
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_buffer_end : 32; // (RO) BE
|
||||
}
|
||||
xohci_td;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * Transfer Descriptor Flags
|
||||
// ******************************************************************
|
||||
#define TD_DP_SETUP 0x00
|
||||
#define TD_DP_OUT 0x01
|
||||
#define TD_DP_IN 0x02
|
||||
#define TD_T_DATA0 0x02
|
||||
#define TD_T_DATA1 0x03
|
||||
#define TD_T_TOGGLE 0x00
|
||||
|
||||
// ******************************************************************
|
||||
// * Condition Code Values
|
||||
// ******************************************************************
|
||||
#define TD_CC_NOERROR 0x0000
|
||||
#define TD_CC_CRC 0x0001
|
||||
#define TD_CC_BITSTUFFING 0x0002
|
||||
#define TD_CC_DATATOGGLEM 0x0003
|
||||
#define TD_CC_STALL 0x0004
|
||||
#define TD_DEVNOTRESP 0x0005
|
||||
#define TD_PIDCHECKFAIL 0x0006
|
||||
#define TD_UNEXPECTEDPID 0x0007
|
||||
#define TD_DATAOVERRUN 0x0008
|
||||
#define TD_DATAUNDERRUN 0x0009
|
||||
#define TD_BUFFEROVERRUN 0x000C
|
||||
#define TD_BUFFERUNDERRUN 0x000D
|
||||
#define TD_NOTACCESSED 0x000F
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : xohci_hcca (Host Controller Communications Area)
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Note: This must be 256-byte aligned
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma pack(1)
|
||||
typedef struct _xohci_hcca
|
||||
{
|
||||
uint32 int_table[32]; // (RO) HccaInterruptTable
|
||||
uint16 frame_number; // (WO) HccaFrameNumber
|
||||
uint16 pad1; // (WO) HccaPad1
|
||||
uint32 done_head; // (WO) HccaDoneHead
|
||||
uint08 reserved[116]; // (RW) Reserved for use by Host Controller
|
||||
// less than 256 bytes..why?
|
||||
}
|
||||
xohci_hcca;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * class : ohci_regs (OHCI Host Controller Operational Registers)
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * NOTE: These fields must be accessed using the functions:
|
||||
// *
|
||||
// * WRITE_REGISTER_* and READ_REGISTER_*
|
||||
// *
|
||||
// * NOTE: These should fall naturally on a 32 byte boundary
|
||||
// *
|
||||
// ******************************************************************
|
||||
typedef struct _xohci_regs
|
||||
{
|
||||
uint32 hc_revision;
|
||||
uint32 hc_control;
|
||||
uint32 hc_cmdstatus;
|
||||
uint32 hc_int_status;
|
||||
uint32 hc_int_enable;
|
||||
uint32 hc_int_disable;
|
||||
|
||||
uint32 hc_hcca;
|
||||
uint32 hc_period_cur;
|
||||
uint32 hc_control_head;
|
||||
uint32 hc_control_cur;
|
||||
uint32 hc_bulk_head;
|
||||
uint32 hc_bulk_cur;
|
||||
uint32 hc_done_head;
|
||||
|
||||
uint32 hc_fm_interval;
|
||||
uint32 hc_fm_remaining;
|
||||
uint32 hc_fm_number;
|
||||
uint32 hc_periodic_start;
|
||||
uint32 hc_ls_threshold;
|
||||
|
||||
uint32 hc_rh_descriptor_a;
|
||||
uint32 hc_rh_descriptor_b;
|
||||
uint32 hc_rh_status;
|
||||
uint32 hc_rh_port_status[15];
|
||||
}
|
||||
xohci_regs;
|
||||
|
||||
// ******************************************************************
|
||||
// * global pointer to OHCI Host Controller Operational Registers
|
||||
// ******************************************************************
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING - so its definition was moved to
|
||||
// xohci.c
|
||||
extern xohci_regs *g_xohci_regs;
|
||||
|
||||
// ******************************************************************
|
||||
// * hc_control register masks
|
||||
// ******************************************************************
|
||||
#define XOHCI_CTRL_CBSR (3 << 0) // control/bulk service ratio
|
||||
#define XOHCI_CTRL_PLE (1 << 2) // periodic list enable
|
||||
#define XOHCI_CTRL_IE (1 << 3) // isochronous enable
|
||||
#define XOHCI_CTRL_CLE (1 << 4) // control list enable
|
||||
#define XOHCI_CTRL_BLE (1 << 5) // bulk list enable
|
||||
#define XOHCI_CTRL_HCFS (3 << 6) // host controller functional state
|
||||
#define XOHCI_CTRL_IR (1 << 8) // interrupt routing
|
||||
#define XOHCI_CTRL_RWC (1 << 9) // remote wakeup connected
|
||||
#define XOHCI_CTRL_RWE (1 << 10) // remote wakeup enable
|
||||
|
||||
// ******************************************************************
|
||||
// * pre-shifted values for HC_CONTROL_FUNCTIONAL_STATE
|
||||
// ******************************************************************
|
||||
#define XOHCI_USB_RESET (0 << 6)
|
||||
#define XOHCI_USB_RESUME (1 << 6)
|
||||
#define XOHCI_USB_OPERATIONAL (2 << 6)
|
||||
#define XOHCI_USB_SUSPEND (3 << 6)
|
||||
|
||||
// ******************************************************************
|
||||
// * hc_cmdstatus register masks
|
||||
// ******************************************************************
|
||||
#define XOHCI_HCR (1 << 0) // host controller reset
|
||||
#define XOHCI_CLF (1 << 1) // control list filled
|
||||
#define XOHCI_BLF (1 << 2) // bulk list filled
|
||||
#define XOHCI_OCR (1 << 3) // ownership change request
|
||||
#define XOHCI_SOC (3 << 16) // scheduling overrun count
|
||||
|
||||
// ******************************************************************
|
||||
// * interrupt register masks (status/enable/disable regs)
|
||||
// ******************************************************************
|
||||
#define XOHCI_INTR_SO (1 << 0) // scheduling overrun
|
||||
#define XOHCI_INTR_WDH (1 << 1) // writeback of done_head
|
||||
#define XOHCI_INTR_SF (1 << 2) // start frame
|
||||
#define XOHCI_INTR_RD (1 << 3) // resume detect
|
||||
#define XOHCI_INTR_UE (1 << 4) // unrecoverable error
|
||||
#define XOHCI_INTR_FNO (1 << 5) // frame number overflow
|
||||
#define XOHCI_INTR_RHSC (1 << 6) // root hub status change
|
||||
#define XOHCI_INTR_OC (1 << 30) // ownership change
|
||||
#define XOHCI_INTR_MIE (1 << 31) // master interrupt enable
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : xohci
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Packages up all of our variables
|
||||
// *
|
||||
// ******************************************************************
|
||||
typedef struct _xohci
|
||||
{
|
||||
xohci_hcca *m_hcca;
|
||||
uint32 m_hcca_dma;
|
||||
uint32 m_disabled;
|
||||
}
|
||||
xohci;
|
||||
|
||||
// ******************************************************************
|
||||
// * global variables
|
||||
// ******************************************************************
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING - so its definition was moved to
|
||||
// xohci.c
|
||||
extern xohci g_xohci;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xohci.h
|
||||
// *
|
||||
// * note : XBox USB Open Host Controller Interface
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XOHCI_H
|
||||
#define XOHCI_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * external functions
|
||||
// ******************************************************************
|
||||
void xohci_init();
|
||||
|
||||
// ******************************************************************
|
||||
// * OHCI (PCI)
|
||||
// ******************************************************************
|
||||
#include "xohci_pci.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : ed (Endpoint Descriptor)
|
||||
// ******************************************************************
|
||||
#pragma pack(16)
|
||||
typedef struct _xohci_ed
|
||||
{
|
||||
// ******************************************************************
|
||||
// * DWord 0
|
||||
// ******************************************************************
|
||||
uint32 m_function_addr : 7;
|
||||
uint32 m_endpoint_numb : 4;
|
||||
uint32 m_direction : 2;
|
||||
uint32 m_speed : 1;
|
||||
uint32 m_skip : 1;
|
||||
uint32 m_format : 1;
|
||||
uint32 m_max_packet_size : 11;
|
||||
uint32 m_reserved0 : 5;
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_reserved1 : 4;
|
||||
uint32 m_tail_p : 28;
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 2
|
||||
// ******************************************************************
|
||||
uint32 m_halted : 1;
|
||||
uint32 m_toggle_carry : 1;
|
||||
uint32 m_zero_bit : 2;
|
||||
uint32 m_head_p : 28;
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_reserved3 : 4;
|
||||
uint32 m_next_ed : 28;
|
||||
}
|
||||
xohci_ed;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * Endpoint Descriptor Flags
|
||||
// ******************************************************************
|
||||
#define ED_DIRECTION_IN 0
|
||||
#define ED_DIRECTION_OUT 1
|
||||
#define ED_SPEED_FULL 0
|
||||
#define ED_SPEED_LOW 1
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : td (Transfer Descriptor)
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Since XBox controllers are not isochronous, we do not need
|
||||
// * to support that transfer type. therefore, we also do not need
|
||||
// * to align this structure to 32 bytes, as general transfer desc
|
||||
// * only require 16 byte alignment
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma pack(16)
|
||||
typedef struct _xohci_td
|
||||
{
|
||||
// ******************************************************************
|
||||
// * DWord 0
|
||||
// ******************************************************************
|
||||
uint32 m_reserved18 : 18; // (NA)
|
||||
uint32 m_buffer_rounding : 1; // (RO) R
|
||||
uint32 m_direction_pid : 2; // (RO) DP
|
||||
uint32 m_delay_int : 3; // (RO) DI
|
||||
uint32 m_data_toggle : 2; // (RW) T
|
||||
uint32 m_error_count : 2; // (RW) EC
|
||||
uint32 m_condition_code : 4; // (RW) CC
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_current_buffer : 32; // (RW) CBP
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 2
|
||||
// ******************************************************************
|
||||
uint32 m_zero4 : 4; // (00) Should be Zero
|
||||
uint32 m_next_td : 28; // (RW) NextTD
|
||||
|
||||
// ******************************************************************
|
||||
// * DWord 1
|
||||
// ******************************************************************
|
||||
uint32 m_buffer_end : 32; // (RO) BE
|
||||
}
|
||||
xohci_td;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * Transfer Descriptor Flags
|
||||
// ******************************************************************
|
||||
#define TD_DP_SETUP 0x00
|
||||
#define TD_DP_OUT 0x01
|
||||
#define TD_DP_IN 0x02
|
||||
#define TD_T_DATA0 0x02
|
||||
#define TD_T_DATA1 0x03
|
||||
#define TD_T_TOGGLE 0x00
|
||||
|
||||
// ******************************************************************
|
||||
// * Condition Code Values
|
||||
// ******************************************************************
|
||||
#define TD_CC_NOERROR 0x0000
|
||||
#define TD_CC_CRC 0x0001
|
||||
#define TD_CC_BITSTUFFING 0x0002
|
||||
#define TD_CC_DATATOGGLEM 0x0003
|
||||
#define TD_CC_STALL 0x0004
|
||||
#define TD_DEVNOTRESP 0x0005
|
||||
#define TD_PIDCHECKFAIL 0x0006
|
||||
#define TD_UNEXPECTEDPID 0x0007
|
||||
#define TD_DATAOVERRUN 0x0008
|
||||
#define TD_DATAUNDERRUN 0x0009
|
||||
#define TD_BUFFEROVERRUN 0x000C
|
||||
#define TD_BUFFERUNDERRUN 0x000D
|
||||
#define TD_NOTACCESSED 0x000F
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : xohci_hcca (Host Controller Communications Area)
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Note: This must be 256-byte aligned
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma pack(1)
|
||||
typedef struct _xohci_hcca
|
||||
{
|
||||
uint32 int_table[32]; // (RO) HccaInterruptTable
|
||||
uint16 frame_number; // (WO) HccaFrameNumber
|
||||
uint16 pad1; // (WO) HccaPad1
|
||||
uint32 done_head; // (WO) HccaDoneHead
|
||||
uint08 reserved[116]; // (RW) Reserved for use by Host Controller
|
||||
// less than 256 bytes..why?
|
||||
}
|
||||
xohci_hcca;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * class : ohci_regs (OHCI Host Controller Operational Registers)
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * NOTE: These fields must be accessed using the functions:
|
||||
// *
|
||||
// * WRITE_REGISTER_* and READ_REGISTER_*
|
||||
// *
|
||||
// * NOTE: These should fall naturally on a 32 byte boundary
|
||||
// *
|
||||
// ******************************************************************
|
||||
typedef struct _xohci_regs
|
||||
{
|
||||
uint32 hc_revision;
|
||||
uint32 hc_control;
|
||||
uint32 hc_cmdstatus;
|
||||
uint32 hc_int_status;
|
||||
uint32 hc_int_enable;
|
||||
uint32 hc_int_disable;
|
||||
|
||||
uint32 hc_hcca;
|
||||
uint32 hc_period_cur;
|
||||
uint32 hc_control_head;
|
||||
uint32 hc_control_cur;
|
||||
uint32 hc_bulk_head;
|
||||
uint32 hc_bulk_cur;
|
||||
uint32 hc_done_head;
|
||||
|
||||
uint32 hc_fm_interval;
|
||||
uint32 hc_fm_remaining;
|
||||
uint32 hc_fm_number;
|
||||
uint32 hc_periodic_start;
|
||||
uint32 hc_ls_threshold;
|
||||
|
||||
uint32 hc_rh_descriptor_a;
|
||||
uint32 hc_rh_descriptor_b;
|
||||
uint32 hc_rh_status;
|
||||
uint32 hc_rh_port_status[15];
|
||||
}
|
||||
xohci_regs;
|
||||
|
||||
// ******************************************************************
|
||||
// * global pointer to OHCI Host Controller Operational Registers
|
||||
// ******************************************************************
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING - so its definition was moved to
|
||||
// xohci.c
|
||||
extern xohci_regs *g_xohci_regs;
|
||||
|
||||
// ******************************************************************
|
||||
// * hc_control register masks
|
||||
// ******************************************************************
|
||||
#define XOHCI_CTRL_CBSR (3 << 0) // control/bulk service ratio
|
||||
#define XOHCI_CTRL_PLE (1 << 2) // periodic list enable
|
||||
#define XOHCI_CTRL_IE (1 << 3) // isochronous enable
|
||||
#define XOHCI_CTRL_CLE (1 << 4) // control list enable
|
||||
#define XOHCI_CTRL_BLE (1 << 5) // bulk list enable
|
||||
#define XOHCI_CTRL_HCFS (3 << 6) // host controller functional state
|
||||
#define XOHCI_CTRL_IR (1 << 8) // interrupt routing
|
||||
#define XOHCI_CTRL_RWC (1 << 9) // remote wakeup connected
|
||||
#define XOHCI_CTRL_RWE (1 << 10) // remote wakeup enable
|
||||
|
||||
// ******************************************************************
|
||||
// * pre-shifted values for HC_CONTROL_FUNCTIONAL_STATE
|
||||
// ******************************************************************
|
||||
#define XOHCI_USB_RESET (0 << 6)
|
||||
#define XOHCI_USB_RESUME (1 << 6)
|
||||
#define XOHCI_USB_OPERATIONAL (2 << 6)
|
||||
#define XOHCI_USB_SUSPEND (3 << 6)
|
||||
|
||||
// ******************************************************************
|
||||
// * hc_cmdstatus register masks
|
||||
// ******************************************************************
|
||||
#define XOHCI_HCR (1 << 0) // host controller reset
|
||||
#define XOHCI_CLF (1 << 1) // control list filled
|
||||
#define XOHCI_BLF (1 << 2) // bulk list filled
|
||||
#define XOHCI_OCR (1 << 3) // ownership change request
|
||||
#define XOHCI_SOC (3 << 16) // scheduling overrun count
|
||||
|
||||
// ******************************************************************
|
||||
// * interrupt register masks (status/enable/disable regs)
|
||||
// ******************************************************************
|
||||
#define XOHCI_INTR_SO (1 << 0) // scheduling overrun
|
||||
#define XOHCI_INTR_WDH (1 << 1) // writeback of done_head
|
||||
#define XOHCI_INTR_SF (1 << 2) // start frame
|
||||
#define XOHCI_INTR_RD (1 << 3) // resume detect
|
||||
#define XOHCI_INTR_UE (1 << 4) // unrecoverable error
|
||||
#define XOHCI_INTR_FNO (1 << 5) // frame number overflow
|
||||
#define XOHCI_INTR_RHSC (1 << 6) // root hub status change
|
||||
#define XOHCI_INTR_OC (1 << 30) // ownership change
|
||||
#define XOHCI_INTR_MIE (1 << 31) // master interrupt enable
|
||||
|
||||
// ******************************************************************
|
||||
// * struct : xohci
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * Packages up all of our variables
|
||||
// *
|
||||
// ******************************************************************
|
||||
typedef struct _xohci
|
||||
{
|
||||
xohci_hcca *m_hcca;
|
||||
uint32 m_hcca_dma;
|
||||
uint32 m_disabled;
|
||||
}
|
||||
xohci;
|
||||
|
||||
// ******************************************************************
|
||||
// * global variables
|
||||
// ******************************************************************
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING
|
||||
// ERROR DURING LINKING - so its definition was moved to
|
||||
// xohci.c
|
||||
extern xohci g_xohci;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xohci_pci.h
|
||||
// *
|
||||
// * note : XBox USB Open Host Controller Interface (PCI)
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XOHCI_PCI_H
|
||||
#define XOHCI_PCI_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * external functions
|
||||
// ******************************************************************
|
||||
void xohci_pci_init();
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xohci_pci.h
|
||||
// *
|
||||
// * note : XBox USB Open Host Controller Interface (PCI)
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XOHCI_PCI_H
|
||||
#define XOHCI_PCI_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * external functions
|
||||
// ******************************************************************
|
||||
void xohci_pci_init();
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,119 +1,119 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xvga.h
|
||||
// *
|
||||
// * note : XBox VGA
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XVGA_H
|
||||
#define XVGA_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "openxdk.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * User Variables
|
||||
// ******************************************************************
|
||||
extern u32 g_ScreenWidth; // Current Screen Width
|
||||
extern u32 g_ScreenHeight; // Current Screen Height
|
||||
extern u32 g_nFlags;
|
||||
extern u32 g_nInk;
|
||||
extern u32 g_nPaper;
|
||||
extern u32 g_nFontFlags;
|
||||
|
||||
// ******************************************************************
|
||||
// * ScreenInfo (returned by GetScreen())
|
||||
// ******************************************************************
|
||||
typedef struct _ScreenInfo
|
||||
{
|
||||
u32 ScreenAddress;
|
||||
u32 lpitch;
|
||||
}
|
||||
ScreenInfo;
|
||||
|
||||
// **************************************************************
|
||||
// * User Functions
|
||||
// **************************************************************
|
||||
void vga_init_mode(int Mode); // Init VGA screen to a selected mode
|
||||
void vga_vsync(void); // Wait for vertical blank
|
||||
void vga_flip(void); // Flip buffers
|
||||
ScreenInfo vga_get_screen_info(void); // get screen base address
|
||||
|
||||
// **************************************************************
|
||||
// * For debugging purposes (serious 2D should use xgfx2d lib)
|
||||
// **************************************************************
|
||||
void vga_clear( void ); // Clear screen
|
||||
void vga_box( int x1,int y1, int x2,int y2 ); // Draw wireframe BOX (WHITE)
|
||||
void vga_print( int x, int y, char* pText ); // Draw text using SYSTEM font (32bit modes only just now)
|
||||
void vga_testpattern( int shift); // Draw a test pattern/colour to the screen
|
||||
|
||||
// **************************************************************
|
||||
// * Misc things... will be used later
|
||||
// **************************************************************
|
||||
void vga_set_color( int reg, int R, int G, int B );
|
||||
void vga_set_reg( int port, int reg, int data );
|
||||
|
||||
// ******************************************************************
|
||||
// * Pixel resolutions
|
||||
// ******************************************************************
|
||||
#define RES_320X200 (1) // Hardware mode *NOT YET*
|
||||
#define RES_320X240 (2) // Software emulated
|
||||
#define RES_640X200 (3) // Hardware mode *NOT YET*
|
||||
#define RES_640X240 (4) // Hardware mode *NOT YET*
|
||||
#define RES_640X400 (5) // Hardware mode *NOT YET*
|
||||
#define RES_640X480 (6) // Hardware mode *NOT YET*
|
||||
#define RES_720X480 (7) // Hardware mode *NOT YET*
|
||||
#define RES_800X600 (8) // Hardware mode *NOT YET*
|
||||
#define RES_1024X768 (9) // Hardware mode *NOT YET*
|
||||
#define RES_MASK (15)
|
||||
|
||||
// ******************************************************************
|
||||
// * Bit depths
|
||||
// ******************************************************************
|
||||
#define _32BITCOLOUR (0x00000000)
|
||||
#define _16BITCOLOUR (0x00000010)
|
||||
#define _8BITCOLOUR (0x00000020)
|
||||
#define COLOUR_MASK (0x00000030)
|
||||
|
||||
// ******************************************************************
|
||||
// * Extra display flags
|
||||
// ******************************************************************
|
||||
#define _DISPLAY_DEBUG (0x80000000) // display into debug mode (single buffer system)
|
||||
|
||||
// ******************************************************************
|
||||
// * Easy to use screen modes
|
||||
// ******************************************************************
|
||||
#define MODE_320x200x32 (RES_320X200|_32BITCOLOUR) // not yet
|
||||
#define MODE_320x240x32 (RES_320X240|_32BITCOLOUR)
|
||||
#define MODE_640x200x32 (RES_320X200|_32BITCOLOUR) // not yet
|
||||
#define MODE_640x240x32 (RES_320X240|_32BITCOLOUR)
|
||||
#define MODE_640x400x32 (RES_640X400|_32BITCOLOUR) // not yet
|
||||
#define MODE_640x480x32 (RES_640X480|_32BITCOLOUR) // not yet
|
||||
#define MODE_320x200x16 (RES_320X200|_16BITCOLOUR) // not yet
|
||||
#define MODE_320x240x16 (RES_320X240|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x200x16 (RES_320X200|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x240x16 (RES_320X240|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x400x16 (RES_640X400|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x480x16 (RES_640X480|_16BITCOLOUR) // not yet
|
||||
|
||||
// this is really to be used with the character map, so debug can be seen as soon as its output.. single buffered.
|
||||
#define MODE_640x480x32_DEBUG (RES_640X480|_32BITCOLOUR|_DISPLAY_DEBUG) // not yet
|
||||
|
||||
// ******************************************************************
|
||||
// * For print
|
||||
// ******************************************************************
|
||||
#define FONT_SOLID (1) // render font with SOLID background (with paper colour)
|
||||
#define FONT_WRAP (2) // Wrap PRINT's when they go off the screen
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // XVGA_H
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xvga.h
|
||||
// *
|
||||
// * note : XBox VGA
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XVGA_H
|
||||
#define XVGA_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "openxdk.h"
|
||||
|
||||
// ******************************************************************
|
||||
// * User Variables
|
||||
// ******************************************************************
|
||||
extern u32 g_ScreenWidth; // Current Screen Width
|
||||
extern u32 g_ScreenHeight; // Current Screen Height
|
||||
extern u32 g_nFlags;
|
||||
extern u32 g_nInk;
|
||||
extern u32 g_nPaper;
|
||||
extern u32 g_nFontFlags;
|
||||
|
||||
// ******************************************************************
|
||||
// * ScreenInfo (returned by GetScreen())
|
||||
// ******************************************************************
|
||||
typedef struct _ScreenInfo
|
||||
{
|
||||
u32 ScreenAddress;
|
||||
u32 lpitch;
|
||||
}
|
||||
ScreenInfo;
|
||||
|
||||
// **************************************************************
|
||||
// * User Functions
|
||||
// **************************************************************
|
||||
void vga_init_mode(int Mode); // Init VGA screen to a selected mode
|
||||
void vga_vsync(void); // Wait for vertical blank
|
||||
void vga_flip(void); // Flip buffers
|
||||
ScreenInfo vga_get_screen_info(void); // get screen base address
|
||||
|
||||
// **************************************************************
|
||||
// * For debugging purposes (serious 2D should use xgfx2d lib)
|
||||
// **************************************************************
|
||||
void vga_clear( void ); // Clear screen
|
||||
void vga_box( int x1,int y1, int x2,int y2 ); // Draw wireframe BOX (WHITE)
|
||||
void vga_print( int x, int y, char* pText ); // Draw text using SYSTEM font (32bit modes only just now)
|
||||
void vga_testpattern( int shift); // Draw a test pattern/colour to the screen
|
||||
|
||||
// **************************************************************
|
||||
// * Misc things... will be used later
|
||||
// **************************************************************
|
||||
void vga_set_color( int reg, int R, int G, int B );
|
||||
void vga_set_reg( int port, int reg, int data );
|
||||
|
||||
// ******************************************************************
|
||||
// * Pixel resolutions
|
||||
// ******************************************************************
|
||||
#define RES_320X200 (1) // Hardware mode *NOT YET*
|
||||
#define RES_320X240 (2) // Software emulated
|
||||
#define RES_640X200 (3) // Hardware mode *NOT YET*
|
||||
#define RES_640X240 (4) // Hardware mode *NOT YET*
|
||||
#define RES_640X400 (5) // Hardware mode *NOT YET*
|
||||
#define RES_640X480 (6) // Hardware mode *NOT YET*
|
||||
#define RES_720X480 (7) // Hardware mode *NOT YET*
|
||||
#define RES_800X600 (8) // Hardware mode *NOT YET*
|
||||
#define RES_1024X768 (9) // Hardware mode *NOT YET*
|
||||
#define RES_MASK (15)
|
||||
|
||||
// ******************************************************************
|
||||
// * Bit depths
|
||||
// ******************************************************************
|
||||
#define _32BITCOLOUR (0x00000000)
|
||||
#define _16BITCOLOUR (0x00000010)
|
||||
#define _8BITCOLOUR (0x00000020)
|
||||
#define COLOUR_MASK (0x00000030)
|
||||
|
||||
// ******************************************************************
|
||||
// * Extra display flags
|
||||
// ******************************************************************
|
||||
#define _DISPLAY_DEBUG (0x80000000) // display into debug mode (single buffer system)
|
||||
|
||||
// ******************************************************************
|
||||
// * Easy to use screen modes
|
||||
// ******************************************************************
|
||||
#define MODE_320x200x32 (RES_320X200|_32BITCOLOUR) // not yet
|
||||
#define MODE_320x240x32 (RES_320X240|_32BITCOLOUR)
|
||||
#define MODE_640x200x32 (RES_320X200|_32BITCOLOUR) // not yet
|
||||
#define MODE_640x240x32 (RES_320X240|_32BITCOLOUR)
|
||||
#define MODE_640x400x32 (RES_640X400|_32BITCOLOUR) // not yet
|
||||
#define MODE_640x480x32 (RES_640X480|_32BITCOLOUR) // not yet
|
||||
#define MODE_320x200x16 (RES_320X200|_16BITCOLOUR) // not yet
|
||||
#define MODE_320x240x16 (RES_320X240|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x200x16 (RES_320X200|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x240x16 (RES_320X240|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x400x16 (RES_640X400|_16BITCOLOUR) // not yet
|
||||
#define MODE_640x480x16 (RES_640X480|_16BITCOLOUR) // not yet
|
||||
|
||||
// this is really to be used with the character map, so debug can be seen as soon as its output.. single buffered.
|
||||
#define MODE_640x480x32_DEBUG (RES_640X480|_32BITCOLOUR|_DISPLAY_DEBUG) // not yet
|
||||
|
||||
// ******************************************************************
|
||||
// * For print
|
||||
// ******************************************************************
|
||||
#define FONT_SOLID (1) // render font with SOLID background (with paper colour)
|
||||
#define FONT_WRAP (2) // Wrap PRINT's when they go off the screen
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // XVGA_H
|
||||
|
|
|
@ -1,150 +1,150 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xvga_def.h
|
||||
// *
|
||||
// * note : XBox VGA (#defines)
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XVGA_DEF_H
|
||||
#define XVGA_DEF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern u8 SystemFont[]; // handy to use system font
|
||||
extern u8 *pFont; // point to the system Font by default. You can change it to your own
|
||||
extern u32 pScreenBuffer[]; // Our screen (software emulated for LOW res just now)
|
||||
extern u32 FrontBuffer; // Current screen address (visible)
|
||||
extern u32 BackBuffer; // Current back buffer
|
||||
extern u32 _FrontBuffer; // Current screen address (visible)
|
||||
extern u32 _BackBuffer; // Current back buffer
|
||||
extern u32 _Framebuffer;
|
||||
|
||||
// ******************************************************************
|
||||
// * Internal
|
||||
// ******************************************************************
|
||||
#define XBV_BASE 0xfd601000
|
||||
#define XBV_ATTR_REG_INDEX 0xfd6013c0
|
||||
#define XBV_ATTR_REG_DATA 0xfd6013c1
|
||||
#define XBV_ATTR_REG_INDEX2 0xfd6013c2
|
||||
#define XBV_ATTR_REG_INDEX3 0xfd6013c3
|
||||
#define XBV_CRTC_REG_INDEX 0xfd6013d4
|
||||
#define XBV_CRTC_REG_DATA 0xfd6013d5
|
||||
#define XBV_GRA_REG_INDEX 0xfd0C03ce
|
||||
#define XBV_GRA_REG_DATA 0xfd0C03cf
|
||||
#define XBV_SEQ_REG_INDEX 0xfd0C03c4
|
||||
#define XBV_SEQ_REG_DATA 0xfd0C03c5
|
||||
#define XBV_MISC_REG 0xfd0C03c2
|
||||
#define VBL 0xfd6013da
|
||||
|
||||
#define XBV_COLOUR_REG 0xfd6013c8
|
||||
#define XBV_COLOUR_DATA 0xfd6013c9
|
||||
|
||||
#define XBOX_SCREENRAM 0x8003d000 // Xbox screen RAM starts here (power on default)
|
||||
|
||||
// ******************************************************************
|
||||
// * System flags
|
||||
// ******************************************************************
|
||||
#define XHAL_320SCREEN (1) // Software emulation of 320x??? mode
|
||||
#define YHAL_200SCREEN (2) // Center 200 screen inside a 240 one
|
||||
|
||||
// This might be able to be safely removed now
|
||||
extern int _fltused;
|
||||
|
||||
// ******************************************************************
|
||||
// * Register
|
||||
// ******************************************************************
|
||||
typedef struct
|
||||
{
|
||||
short port;
|
||||
unsigned char index;
|
||||
unsigned char value;
|
||||
}
|
||||
Register;
|
||||
|
||||
#define ATTRCON_ADDR 0x3c0
|
||||
#define MISC_ADDR 0x3c2
|
||||
#define VGAENABLE_ADDR 0x3c3
|
||||
#define SEQ_ADDR 0x3c4
|
||||
#define GRACON_ADDR 0x3ce
|
||||
#define CRTC_ADDR 0x3d4
|
||||
#define STATUS_ADDR 0x3da
|
||||
|
||||
/*
|
||||
xxxxADDR defines the base port number used to access VGA component xxxx,
|
||||
and is defined for xxxx =
|
||||
ATTRCON - Attribute Controller
|
||||
MISC - Miscellaneous Register
|
||||
VGAENABLE - VGA Enable Register
|
||||
SEQ - Sequencer
|
||||
GRACON - Graphics Controller
|
||||
CRTC - Cathode Ray Tube Controller
|
||||
STATUS - Status Register
|
||||
*/
|
||||
|
||||
// ******************************************************************
|
||||
// * VGA Registers
|
||||
// ******************************************************************
|
||||
#define VGAREG_ACTL_ADDRESS 0x3c0
|
||||
#define VGAREG_ACTL_WRITE_DATA 0x3c0
|
||||
#define VGAREG_ACTL_READ_DATA 0x3c1
|
||||
|
||||
#define VGAREG_INPUT_STATUS 0x3c2
|
||||
#define VGAREG_WRITE_MISC_OUTPUT 0x3c2
|
||||
#define VGAREG_VIDEO_ENABLE 0x3c3
|
||||
#define VGAREG_SEQU_ADDRESS 0x3c4
|
||||
#define VGAREG_SEQU_DATA 0x3c5
|
||||
|
||||
#define VGAREG_PEL_MASK 0x3c6
|
||||
#define VGAREG_DAC_STATE 0x3c7
|
||||
#define VGAREG_DAC_READ_ADDRESS 0x3c7
|
||||
#define VGAREG_DAC_WRITE_ADDRESS 0x3c8
|
||||
#define VGAREG_DAC_DATA 0x3c9
|
||||
|
||||
#define VGAREG_READ_FEATURE_CTL 0x3ca
|
||||
#define VGAREG_READ_MISC_OUTPUT 0x3cc
|
||||
|
||||
#define VGAREG_GRDC_ADDRESS 0x3ce
|
||||
#define VGAREG_GRDC_DATA 0x3cf
|
||||
|
||||
#define VGAREG_MDA_CRTC_ADDRESS 0x3b4
|
||||
#define VGAREG_MDA_CRTC_DATA 0x3b5
|
||||
#define VGAREG_VGA_CRTC_ADDRESS 0x3d4
|
||||
#define VGAREG_VGA_CRTC_DATA 0x3d5
|
||||
|
||||
#define VGAREG_MDA_WRITE_FEATURE_CTL 0x3ba
|
||||
#define VGAREG_VGA_WRITE_FEATURE_CTL 0x3da
|
||||
#define VGAREG_ACTL_RESET 0x3da
|
||||
|
||||
#define VGAREG_MDA_MODECTL 0x3b8
|
||||
#define VGAREG_CGA_MODECTL 0x3d8
|
||||
#define VGAREG_CGA_PALETTE 0x3d9
|
||||
|
||||
/* Video memory */
|
||||
#define VGAMEM_GRAPH 0xA000
|
||||
#define VGAMEM_CTEXT 0xB800
|
||||
#define VGAMEM_MTEXT 0xB000
|
||||
|
||||
Register Mode320x200[];
|
||||
|
||||
// ******************************************************************
|
||||
// * functions needed for xvga.c
|
||||
// ******************************************************************
|
||||
void outportb(int port, unsigned char data);
|
||||
void readyVgaRegs(void);
|
||||
void outReg(Register r);
|
||||
void vga_set_reg( int port, int reg, int data );
|
||||
void vga_set_color( int reg, int R, int G, int B );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // XVGA_DEF_H
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xvga_def.h
|
||||
// *
|
||||
// * note : XBox VGA (#defines)
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XVGA_DEF_H
|
||||
#define XVGA_DEF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern u8 SystemFont[]; // handy to use system font
|
||||
extern u8 *pFont; // point to the system Font by default. You can change it to your own
|
||||
extern u32 pScreenBuffer[]; // Our screen (software emulated for LOW res just now)
|
||||
extern u32 FrontBuffer; // Current screen address (visible)
|
||||
extern u32 BackBuffer; // Current back buffer
|
||||
extern u32 _FrontBuffer; // Current screen address (visible)
|
||||
extern u32 _BackBuffer; // Current back buffer
|
||||
extern u32 _Framebuffer;
|
||||
|
||||
// ******************************************************************
|
||||
// * Internal
|
||||
// ******************************************************************
|
||||
#define XBV_BASE 0xfd601000
|
||||
#define XBV_ATTR_REG_INDEX 0xfd6013c0
|
||||
#define XBV_ATTR_REG_DATA 0xfd6013c1
|
||||
#define XBV_ATTR_REG_INDEX2 0xfd6013c2
|
||||
#define XBV_ATTR_REG_INDEX3 0xfd6013c3
|
||||
#define XBV_CRTC_REG_INDEX 0xfd6013d4
|
||||
#define XBV_CRTC_REG_DATA 0xfd6013d5
|
||||
#define XBV_GRA_REG_INDEX 0xfd0C03ce
|
||||
#define XBV_GRA_REG_DATA 0xfd0C03cf
|
||||
#define XBV_SEQ_REG_INDEX 0xfd0C03c4
|
||||
#define XBV_SEQ_REG_DATA 0xfd0C03c5
|
||||
#define XBV_MISC_REG 0xfd0C03c2
|
||||
#define VBL 0xfd6013da
|
||||
|
||||
#define XBV_COLOUR_REG 0xfd6013c8
|
||||
#define XBV_COLOUR_DATA 0xfd6013c9
|
||||
|
||||
#define XBOX_SCREENRAM 0x8003d000 // Xbox screen RAM starts here (power on default)
|
||||
|
||||
// ******************************************************************
|
||||
// * System flags
|
||||
// ******************************************************************
|
||||
#define XHAL_320SCREEN (1) // Software emulation of 320x??? mode
|
||||
#define YHAL_200SCREEN (2) // Center 200 screen inside a 240 one
|
||||
|
||||
// This might be able to be safely removed now
|
||||
extern int _fltused;
|
||||
|
||||
// ******************************************************************
|
||||
// * Register
|
||||
// ******************************************************************
|
||||
typedef struct
|
||||
{
|
||||
short port;
|
||||
unsigned char index;
|
||||
unsigned char value;
|
||||
}
|
||||
Register;
|
||||
|
||||
#define ATTRCON_ADDR 0x3c0
|
||||
#define MISC_ADDR 0x3c2
|
||||
#define VGAENABLE_ADDR 0x3c3
|
||||
#define SEQ_ADDR 0x3c4
|
||||
#define GRACON_ADDR 0x3ce
|
||||
#define CRTC_ADDR 0x3d4
|
||||
#define STATUS_ADDR 0x3da
|
||||
|
||||
/*
|
||||
xxxxADDR defines the base port number used to access VGA component xxxx,
|
||||
and is defined for xxxx =
|
||||
ATTRCON - Attribute Controller
|
||||
MISC - Miscellaneous Register
|
||||
VGAENABLE - VGA Enable Register
|
||||
SEQ - Sequencer
|
||||
GRACON - Graphics Controller
|
||||
CRTC - Cathode Ray Tube Controller
|
||||
STATUS - Status Register
|
||||
*/
|
||||
|
||||
// ******************************************************************
|
||||
// * VGA Registers
|
||||
// ******************************************************************
|
||||
#define VGAREG_ACTL_ADDRESS 0x3c0
|
||||
#define VGAREG_ACTL_WRITE_DATA 0x3c0
|
||||
#define VGAREG_ACTL_READ_DATA 0x3c1
|
||||
|
||||
#define VGAREG_INPUT_STATUS 0x3c2
|
||||
#define VGAREG_WRITE_MISC_OUTPUT 0x3c2
|
||||
#define VGAREG_VIDEO_ENABLE 0x3c3
|
||||
#define VGAREG_SEQU_ADDRESS 0x3c4
|
||||
#define VGAREG_SEQU_DATA 0x3c5
|
||||
|
||||
#define VGAREG_PEL_MASK 0x3c6
|
||||
#define VGAREG_DAC_STATE 0x3c7
|
||||
#define VGAREG_DAC_READ_ADDRESS 0x3c7
|
||||
#define VGAREG_DAC_WRITE_ADDRESS 0x3c8
|
||||
#define VGAREG_DAC_DATA 0x3c9
|
||||
|
||||
#define VGAREG_READ_FEATURE_CTL 0x3ca
|
||||
#define VGAREG_READ_MISC_OUTPUT 0x3cc
|
||||
|
||||
#define VGAREG_GRDC_ADDRESS 0x3ce
|
||||
#define VGAREG_GRDC_DATA 0x3cf
|
||||
|
||||
#define VGAREG_MDA_CRTC_ADDRESS 0x3b4
|
||||
#define VGAREG_MDA_CRTC_DATA 0x3b5
|
||||
#define VGAREG_VGA_CRTC_ADDRESS 0x3d4
|
||||
#define VGAREG_VGA_CRTC_DATA 0x3d5
|
||||
|
||||
#define VGAREG_MDA_WRITE_FEATURE_CTL 0x3ba
|
||||
#define VGAREG_VGA_WRITE_FEATURE_CTL 0x3da
|
||||
#define VGAREG_ACTL_RESET 0x3da
|
||||
|
||||
#define VGAREG_MDA_MODECTL 0x3b8
|
||||
#define VGAREG_CGA_MODECTL 0x3d8
|
||||
#define VGAREG_CGA_PALETTE 0x3d9
|
||||
|
||||
/* Video memory */
|
||||
#define VGAMEM_GRAPH 0xA000
|
||||
#define VGAMEM_CTEXT 0xB800
|
||||
#define VGAMEM_MTEXT 0xB000
|
||||
|
||||
Register Mode320x200[];
|
||||
|
||||
// ******************************************************************
|
||||
// * functions needed for xvga.c
|
||||
// ******************************************************************
|
||||
void outportb(int port, unsigned char data);
|
||||
void readyVgaRegs(void);
|
||||
void outReg(Register r);
|
||||
void vga_set_reg( int port, int reg, int data );
|
||||
void vga_set_color( int reg, int R, int G, int B );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // XVGA_DEF_H
|
||||
|
||||
|
||||
|
|
|
@ -1,407 +1,407 @@
|
|||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: hub.h */
|
||||
/* bkenwright@xbdev.net - www.xbdev.net */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef __HUB__
|
||||
#define __HUB__
|
||||
|
||||
#include "ohci.h"
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* USB CONSTANTS */
|
||||
/******************************************************************************/
|
||||
|
||||
/*
|
||||
* Device and/or Interface Class codes
|
||||
*/
|
||||
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
|
||||
#define USB_CLASS_AUDIO 1
|
||||
#define USB_CLASS_COMM 2
|
||||
#define USB_CLASS_HID 3
|
||||
#define USB_CLASS_PRINTER 7
|
||||
#define USB_CLASS_MASS_STORAGE 8
|
||||
#define USB_CLASS_HUB 9
|
||||
#define USB_CLASS_DATA 10
|
||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
||||
|
||||
/*
|
||||
* Descriptor types
|
||||
*/
|
||||
#define USB_DT_DEVICE 0x01
|
||||
#define USB_DT_CONFIG 0x02
|
||||
#define USB_DT_STRING 0x03
|
||||
#define USB_DT_INTERFACE 0x04
|
||||
#define USB_DT_ENDPOINT 0x05
|
||||
|
||||
#define USB_DT_HUB 0x29
|
||||
#define USB_DT_HID 0x21
|
||||
#define USB_DT_REPORT 0x22
|
||||
#define USB_DT_PHYSICAL 0x23
|
||||
|
||||
/*
|
||||
* Descriptor sizes per descriptor type
|
||||
*/
|
||||
#define USB_DT_DEVICE_SIZE 18
|
||||
#define USB_DT_CONFIG_SIZE 9
|
||||
#define USB_DT_INTERFACE_SIZE 9
|
||||
#define USB_DT_ENDPOINT_SIZE 7
|
||||
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
|
||||
#define USB_DT_HUB_NONVAR_SIZE 7
|
||||
|
||||
/*
|
||||
* USB Request Type and Endpoint Directions
|
||||
*/
|
||||
#define USB_DIR_OUT 0
|
||||
#define USB_DIR_IN 0x80
|
||||
|
||||
#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
|
||||
#define USB_ENDPOINT_DIR_MASK 0x80
|
||||
|
||||
#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
|
||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
||||
#define USB_ENDPOINT_XFER_ISOC 1
|
||||
#define USB_ENDPOINT_XFER_BULK 2
|
||||
#define USB_ENDPOINT_XFER_INT 3
|
||||
|
||||
/*
|
||||
* USB Packet IDs (PIDs)
|
||||
*/
|
||||
#define USB_PID_OUT 0xe1
|
||||
#define USB_PID_IN 0x69
|
||||
#define USB_PID_SETUP 0x2d
|
||||
|
||||
/*
|
||||
* Standard requests
|
||||
*/
|
||||
#define USB_REQ_GET_STATUS 0x00
|
||||
#define USB_REQ_CLEAR_FEATURE 0x01
|
||||
/* 0x02 is reserved */
|
||||
#define USB_REQ_SET_FEATURE 0x03
|
||||
/* 0x04 is reserved */
|
||||
#define USB_REQ_SET_ADDRESS 0x05
|
||||
#define USB_REQ_GET_DESCRIPTOR 0x06
|
||||
#define USB_REQ_SET_DESCRIPTOR 0x07
|
||||
#define USB_REQ_GET_CONFIGURATION 0x08
|
||||
#define USB_REQ_SET_CONFIGURATION 0x09
|
||||
#define USB_REQ_GET_INTERFACE 0x0A
|
||||
#define USB_REQ_SET_INTERFACE 0x0B
|
||||
#define USB_REQ_SYNCH_FRAME 0x0C
|
||||
|
||||
/*
|
||||
* HIDD requests
|
||||
*/
|
||||
#define USB_REQ_GET_REPORT 0x01
|
||||
#define USB_REQ_GET_IDLE 0x02
|
||||
#define USB_REQ_GET_PROTOCOL 0x03
|
||||
#define USB_REQ_SET_REPORT 0x09
|
||||
#define USB_REQ_SET_IDLE 0x0A
|
||||
#define USB_REQ_SET_PROTOCOL 0x0B
|
||||
|
||||
#define USB_TYPE_STANDARD (0x00 << 5)
|
||||
#define USB_TYPE_CLASS (0x01 << 5)
|
||||
#define USB_TYPE_VENDOR (0x02 << 5)
|
||||
#define USB_TYPE_RESERVED (0x03 << 5)
|
||||
|
||||
#define USB_RECIP_DEVICE 0x00
|
||||
#define USB_RECIP_INTERFACE 0x01
|
||||
#define USB_RECIP_ENDPOINT 0x02
|
||||
#define USB_RECIP_OTHER 0x03
|
||||
|
||||
#define USB_HID_RPT_INPUT 0x01
|
||||
#define USB_HID_RPT_OUTPUT 0x02
|
||||
#define USB_HID_RPT_FEATURE 0x03
|
||||
|
||||
/*
|
||||
* Request target types.
|
||||
*/
|
||||
#define USB_RT_DEVICE 0x00
|
||||
#define USB_RT_INTERFACE 0x01
|
||||
#define USB_RT_ENDPOINT 0x02
|
||||
|
||||
#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)
|
||||
#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)
|
||||
|
||||
#define USB_RT_HIDD (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* HUB CONTANTS */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Hub Class feature numbers
|
||||
*/
|
||||
#define C_HUB_LOCAL_POWER 0
|
||||
#define C_HUB_OVER_CURRENT 1
|
||||
|
||||
/*
|
||||
* Port feature numbers
|
||||
*/
|
||||
#define USB_PORT_FEAT_CONNECTION 0
|
||||
#define USB_PORT_FEAT_ENABLE 1
|
||||
#define USB_PORT_FEAT_SUSPEND 2
|
||||
#define USB_PORT_FEAT_OVER_CURRENT 3
|
||||
#define USB_PORT_FEAT_RESET 4
|
||||
#define USB_PORT_FEAT_POWER 8
|
||||
#define USB_PORT_FEAT_LOWSPEED 9
|
||||
#define USB_PORT_FEAT_C_CONNECTION 16
|
||||
#define USB_PORT_FEAT_C_ENABLE 17
|
||||
#define USB_PORT_FEAT_C_SUSPEND 18
|
||||
#define USB_PORT_FEAT_C_OVER_CURRENT 19
|
||||
#define USB_PORT_FEAT_C_RESET 20
|
||||
|
||||
|
||||
#pragma pack( push, 1 )
|
||||
struct usb_port_status
|
||||
{
|
||||
__u16 wPortStatus;
|
||||
__u16 wPortChange;
|
||||
};
|
||||
#pragma pack( pop )
|
||||
|
||||
|
||||
/* wPortStatus bits */
|
||||
#define USB_PORT_STAT_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_RESET 0x0010
|
||||
#define USB_PORT_STAT_POWER 0x0100
|
||||
#define USB_PORT_STAT_LOW_SPEED 0x0200
|
||||
|
||||
/* wPortChange bits */
|
||||
#define USB_PORT_STAT_C_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_C_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_C_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_C_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_C_RESET 0x0010
|
||||
|
||||
/* wHubCharacteristics (masks) */
|
||||
#define HUB_CHAR_LPSM 0x0003
|
||||
#define HUB_CHAR_COMPOUND 0x0004
|
||||
#define HUB_CHAR_OCPM 0x0018
|
||||
|
||||
#pragma pack( push, 1 )
|
||||
struct usb_hub_status
|
||||
{
|
||||
__u16 wHubStatus;
|
||||
__u16 wHubChange;
|
||||
};
|
||||
#pragma pack( pop )
|
||||
|
||||
/*
|
||||
*Hub Status & Hub Change bit masks
|
||||
*/
|
||||
#define HUB_STATUS_LOCAL_POWER 0x0001
|
||||
#define HUB_STATUS_OVERCURRENT 0x0002
|
||||
|
||||
#define HUB_CHANGE_LOCAL_POWER 0x0001
|
||||
#define HUB_CHANGE_OVERCURRENT 0x0002
|
||||
|
||||
/* Hub descriptor */
|
||||
#pragma pack( push, 1 )
|
||||
struct usb_hub_descriptor
|
||||
{
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bNbrPorts;
|
||||
__u16 wHubCharacteristics;
|
||||
__u8 bPwrOn2PwrGood;
|
||||
__u8 bHubContrCurrent;
|
||||
__u8 DeviceRemovable;
|
||||
__u8 PortPowerCtrlMask;
|
||||
};
|
||||
#pragma pack( pop )
|
||||
|
||||
/*
|
||||
struct usb_hub_descriptor_t
|
||||
{
|
||||
__u8 bDescLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bNbrPorts;
|
||||
__u16 wHubCharacteristics;
|
||||
#define UHD_PWR 0x0003
|
||||
#define UHD_PWR_GANGED 0x0000
|
||||
#define UHD_PWR_INDIVIDUAL 0x0001
|
||||
#define UHD_PWR_NO_SWITCH 0x0002
|
||||
#define UHD_COMPOUND 0x0004
|
||||
#define UHD_OC 0x0018
|
||||
#define UHD_OC_GLOBAL 0x0000
|
||||
#define UHD_OC_INDIVIDUAL 0x0008
|
||||
#define UHD_OC_NONE 0x0010
|
||||
#define UHD_TT_THINK 0x0060
|
||||
#define UHD_TT_THINK_8 0x0000
|
||||
#define UHD_TT_THINK_16 0x0020
|
||||
#define UHD_TT_THINK_24 0x0040
|
||||
#define UHD_TT_THINK_32 0x0060
|
||||
#define UHD_PORT_IND 0x0080
|
||||
|
||||
__u8 bPwrOn2PwrGood; // delay in 2 ms units
|
||||
#define UHD_PWRON_FACTOR 2
|
||||
|
||||
__u8 bHubContrCurrent;
|
||||
__u8 DeviceRemovable[32]; //max 255 ports
|
||||
|
||||
#define UHD_NOT_REMOV(desc, i) \
|
||||
(((desc)->DeviceRemovable[(i)/8] >> ((i) % 8)) & 1)
|
||||
__u8 PortPowerCtrlMask[1]; // deprecated
|
||||
};
|
||||
*/
|
||||
#define USB_HUB_DESCRIPTOR_SIZE 9 /* includes deprecated PortPowerCtrlMask */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
int get_control_msg(ohci_t * ohci,
|
||||
__u8 Addr,
|
||||
__u8 request, // 0x06
|
||||
__u8 requesttype, // 0x80
|
||||
__u16 value,
|
||||
__u16 index,
|
||||
__u16 size,
|
||||
__u8 * data );
|
||||
|
||||
|
||||
|
||||
|
||||
int set_control_msg(ohci_t * ohci,
|
||||
__u8 Addr,
|
||||
__u8 request,
|
||||
__u8 requesttype,
|
||||
__u16 value,
|
||||
__u16 index,
|
||||
__u16 size,
|
||||
__u8 * data );
|
||||
|
||||
|
||||
|
||||
//int usb_get_device_descriptor(ohci_t * ohci, __u8 Addr, int size, void *buf);
|
||||
|
||||
|
||||
//int usb_get_hub_descriptor(ohci_t * ohci, __u8 Addr, int size, void *buf);
|
||||
|
||||
|
||||
|
||||
|
||||
int usb_set_configuration(ohci_t * ohci, __u8 Addr, int configuration);
|
||||
|
||||
|
||||
void DebugHubDescriptor( usb_hub_descriptor * pDes );
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************/
|
||||
|
||||
|
||||
#define UT_WRITE 0x00
|
||||
#define UT_READ 0x80
|
||||
#define UT_STANDARD 0x00
|
||||
#define UT_CLASS 0x20
|
||||
#define UT_VENDOR 0x40
|
||||
#define UT_DEVICE 0x00
|
||||
#define UT_INTERFACE 0x01
|
||||
#define UT_ENDPOINT 0x02
|
||||
#define UT_OTHER 0x03
|
||||
|
||||
#define UT_READ_DEVICE (UT_READ | UT_STANDARD | UT_DEVICE)
|
||||
#define UT_READ_INTERFACE (UT_READ | UT_STANDARD | UT_INTERFACE)
|
||||
#define UT_READ_ENDPOINT (UT_READ | UT_STANDARD | UT_ENDPOINT)
|
||||
#define UT_WRITE_DEVICE (UT_WRITE | UT_STANDARD | UT_DEVICE)
|
||||
#define UT_WRITE_INTERFACE (UT_WRITE | UT_STANDARD | UT_INTERFACE)
|
||||
#define UT_WRITE_ENDPOINT (UT_WRITE | UT_STANDARD | UT_ENDPOINT)
|
||||
#define UT_READ_CLASS_DEVICE (UT_READ | UT_CLASS | UT_DEVICE)
|
||||
#define UT_READ_CLASS_INTERFACE (UT_READ | UT_CLASS | UT_INTERFACE)
|
||||
#define UT_READ_CLASS_OTHER (UT_READ | UT_CLASS | UT_OTHER)
|
||||
#define UT_READ_CLASS_ENDPOINT (UT_READ | UT_CLASS | UT_ENDPOINT)
|
||||
#define UT_WRITE_CLASS_DEVICE (UT_WRITE | UT_CLASS | UT_DEVICE)
|
||||
#define UT_WRITE_CLASS_INTERFACE (UT_WRITE | UT_CLASS | UT_INTERFACE)
|
||||
#define UT_WRITE_CLASS_OTHER (UT_WRITE | UT_CLASS | UT_OTHER)
|
||||
#define UT_WRITE_CLASS_ENDPOINT (UT_WRITE | UT_CLASS | UT_ENDPOINT)
|
||||
#define UT_READ_VENDOR_DEVICE (UT_READ | UT_VENDOR | UT_DEVICE)
|
||||
#define UT_READ_VENDOR_INTERFACE (UT_READ | UT_VENDOR | UT_INTERFACE)
|
||||
#define UT_READ_VENDOR_OTHER (UT_READ | UT_VENDOR | UT_OTHER)
|
||||
#define UT_READ_VENDOR_ENDPOINT (UT_READ | UT_VENDOR | UT_ENDPOINT)
|
||||
#define UT_WRITE_VENDOR_DEVICE (UT_WRITE | UT_VENDOR | UT_DEVICE)
|
||||
#define UT_WRITE_VENDOR_INTERFACE (UT_WRITE | UT_VENDOR | UT_INTERFACE)
|
||||
#define UT_WRITE_VENDOR_OTHER (UT_WRITE | UT_VENDOR | UT_OTHER)
|
||||
#define UT_WRITE_VENDOR_ENDPOINT (UT_WRITE | UT_VENDOR | UT_ENDPOINT)
|
||||
|
||||
/* Requests */
|
||||
#define UR_GET_STATUS 0x00
|
||||
#define UR_CLEAR_FEATURE 0x01
|
||||
#define UR_SET_FEATURE 0x03
|
||||
#define UR_SET_ADDRESS 0x05
|
||||
#define UR_GET_DESCRIPTOR 0x06
|
||||
#define UDESC_DEVICE 0x01
|
||||
#define UDESC_CONFIG 0x02
|
||||
#define UDESC_STRING 0x03
|
||||
#define UDESC_INTERFACE 0x04
|
||||
#define UDESC_ENDPOINT 0x05
|
||||
#define UDESC_DEVICE_QUALIFIER 0x06
|
||||
#define UDESC_OTHER_SPEED_CONFIGURATION 0x07
|
||||
#define UDESC_INTERFACE_POWER 0x08
|
||||
#define UDESC_OTG 0x09
|
||||
#define UDESC_CS_DEVICE 0x21 /* class specific */
|
||||
#define UDESC_CS_CONFIG 0x22
|
||||
#define UDESC_CS_STRING 0x23
|
||||
#define UDESC_CS_INTERFACE 0x24
|
||||
#define UDESC_CS_ENDPOINT 0x25
|
||||
#define UDESC_HUB 0x29
|
||||
#define UR_SET_DESCRIPTOR 0x07
|
||||
#define UR_GET_CONFIG 0x08
|
||||
#define UR_SET_CONFIG 0x09
|
||||
#define UR_GET_INTERFACE 0x0a
|
||||
#define UR_SET_INTERFACE 0x0b
|
||||
#define UR_SYNCH_FRAME 0x0c
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************/
|
||||
|
||||
struct devrequest
|
||||
{
|
||||
unsigned char requesttype; // 1 byte
|
||||
unsigned char request; // 1 byte
|
||||
unsigned short value; // 2 bytes
|
||||
unsigned short index; // 2 bytes
|
||||
unsigned short length; // 2 bytes
|
||||
};// end devrequest // Total = 8 bytes
|
||||
|
||||
|
||||
struct usbd_device
|
||||
{
|
||||
ohci_t * p_ohci; /* our ohci stuff */
|
||||
__u8 address; /* device addess */
|
||||
};// end usbd_device
|
||||
|
||||
|
||||
|
||||
int usbd_get_desc(usbd_device * dev, int type, int index, int len, void *desc);
|
||||
|
||||
int usbd_do_request(usbd_device * dev, devrequest *req, void *data);
|
||||
|
||||
|
||||
int usbd_get_hub_descriptor(usbd_device * dev, void * data);
|
||||
|
||||
|
||||
int do_hub_work(usbd_device * dev);
|
||||
|
||||
|
||||
int usbd_do_request_big_packet(usbd_device * dev, devrequest *req, void *data);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // __HUB__
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: hub.h */
|
||||
/* bkenwright@xbdev.net - www.xbdev.net */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef __HUB__
|
||||
#define __HUB__
|
||||
|
||||
#include "ohci.h"
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* USB CONSTANTS */
|
||||
/******************************************************************************/
|
||||
|
||||
/*
|
||||
* Device and/or Interface Class codes
|
||||
*/
|
||||
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
|
||||
#define USB_CLASS_AUDIO 1
|
||||
#define USB_CLASS_COMM 2
|
||||
#define USB_CLASS_HID 3
|
||||
#define USB_CLASS_PRINTER 7
|
||||
#define USB_CLASS_MASS_STORAGE 8
|
||||
#define USB_CLASS_HUB 9
|
||||
#define USB_CLASS_DATA 10
|
||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
||||
|
||||
/*
|
||||
* Descriptor types
|
||||
*/
|
||||
#define USB_DT_DEVICE 0x01
|
||||
#define USB_DT_CONFIG 0x02
|
||||
#define USB_DT_STRING 0x03
|
||||
#define USB_DT_INTERFACE 0x04
|
||||
#define USB_DT_ENDPOINT 0x05
|
||||
|
||||
#define USB_DT_HUB 0x29
|
||||
#define USB_DT_HID 0x21
|
||||
#define USB_DT_REPORT 0x22
|
||||
#define USB_DT_PHYSICAL 0x23
|
||||
|
||||
/*
|
||||
* Descriptor sizes per descriptor type
|
||||
*/
|
||||
#define USB_DT_DEVICE_SIZE 18
|
||||
#define USB_DT_CONFIG_SIZE 9
|
||||
#define USB_DT_INTERFACE_SIZE 9
|
||||
#define USB_DT_ENDPOINT_SIZE 7
|
||||
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
|
||||
#define USB_DT_HUB_NONVAR_SIZE 7
|
||||
|
||||
/*
|
||||
* USB Request Type and Endpoint Directions
|
||||
*/
|
||||
#define USB_DIR_OUT 0
|
||||
#define USB_DIR_IN 0x80
|
||||
|
||||
#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
|
||||
#define USB_ENDPOINT_DIR_MASK 0x80
|
||||
|
||||
#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
|
||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
||||
#define USB_ENDPOINT_XFER_ISOC 1
|
||||
#define USB_ENDPOINT_XFER_BULK 2
|
||||
#define USB_ENDPOINT_XFER_INT 3
|
||||
|
||||
/*
|
||||
* USB Packet IDs (PIDs)
|
||||
*/
|
||||
#define USB_PID_OUT 0xe1
|
||||
#define USB_PID_IN 0x69
|
||||
#define USB_PID_SETUP 0x2d
|
||||
|
||||
/*
|
||||
* Standard requests
|
||||
*/
|
||||
#define USB_REQ_GET_STATUS 0x00
|
||||
#define USB_REQ_CLEAR_FEATURE 0x01
|
||||
/* 0x02 is reserved */
|
||||
#define USB_REQ_SET_FEATURE 0x03
|
||||
/* 0x04 is reserved */
|
||||
#define USB_REQ_SET_ADDRESS 0x05
|
||||
#define USB_REQ_GET_DESCRIPTOR 0x06
|
||||
#define USB_REQ_SET_DESCRIPTOR 0x07
|
||||
#define USB_REQ_GET_CONFIGURATION 0x08
|
||||
#define USB_REQ_SET_CONFIGURATION 0x09
|
||||
#define USB_REQ_GET_INTERFACE 0x0A
|
||||
#define USB_REQ_SET_INTERFACE 0x0B
|
||||
#define USB_REQ_SYNCH_FRAME 0x0C
|
||||
|
||||
/*
|
||||
* HIDD requests
|
||||
*/
|
||||
#define USB_REQ_GET_REPORT 0x01
|
||||
#define USB_REQ_GET_IDLE 0x02
|
||||
#define USB_REQ_GET_PROTOCOL 0x03
|
||||
#define USB_REQ_SET_REPORT 0x09
|
||||
#define USB_REQ_SET_IDLE 0x0A
|
||||
#define USB_REQ_SET_PROTOCOL 0x0B
|
||||
|
||||
#define USB_TYPE_STANDARD (0x00 << 5)
|
||||
#define USB_TYPE_CLASS (0x01 << 5)
|
||||
#define USB_TYPE_VENDOR (0x02 << 5)
|
||||
#define USB_TYPE_RESERVED (0x03 << 5)
|
||||
|
||||
#define USB_RECIP_DEVICE 0x00
|
||||
#define USB_RECIP_INTERFACE 0x01
|
||||
#define USB_RECIP_ENDPOINT 0x02
|
||||
#define USB_RECIP_OTHER 0x03
|
||||
|
||||
#define USB_HID_RPT_INPUT 0x01
|
||||
#define USB_HID_RPT_OUTPUT 0x02
|
||||
#define USB_HID_RPT_FEATURE 0x03
|
||||
|
||||
/*
|
||||
* Request target types.
|
||||
*/
|
||||
#define USB_RT_DEVICE 0x00
|
||||
#define USB_RT_INTERFACE 0x01
|
||||
#define USB_RT_ENDPOINT 0x02
|
||||
|
||||
#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)
|
||||
#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)
|
||||
|
||||
#define USB_RT_HIDD (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* HUB CONTANTS */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Hub Class feature numbers
|
||||
*/
|
||||
#define C_HUB_LOCAL_POWER 0
|
||||
#define C_HUB_OVER_CURRENT 1
|
||||
|
||||
/*
|
||||
* Port feature numbers
|
||||
*/
|
||||
#define USB_PORT_FEAT_CONNECTION 0
|
||||
#define USB_PORT_FEAT_ENABLE 1
|
||||
#define USB_PORT_FEAT_SUSPEND 2
|
||||
#define USB_PORT_FEAT_OVER_CURRENT 3
|
||||
#define USB_PORT_FEAT_RESET 4
|
||||
#define USB_PORT_FEAT_POWER 8
|
||||
#define USB_PORT_FEAT_LOWSPEED 9
|
||||
#define USB_PORT_FEAT_C_CONNECTION 16
|
||||
#define USB_PORT_FEAT_C_ENABLE 17
|
||||
#define USB_PORT_FEAT_C_SUSPEND 18
|
||||
#define USB_PORT_FEAT_C_OVER_CURRENT 19
|
||||
#define USB_PORT_FEAT_C_RESET 20
|
||||
|
||||
|
||||
#pragma pack( push, 1 )
|
||||
struct usb_port_status
|
||||
{
|
||||
__u16 wPortStatus;
|
||||
__u16 wPortChange;
|
||||
};
|
||||
#pragma pack( pop )
|
||||
|
||||
|
||||
/* wPortStatus bits */
|
||||
#define USB_PORT_STAT_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_RESET 0x0010
|
||||
#define USB_PORT_STAT_POWER 0x0100
|
||||
#define USB_PORT_STAT_LOW_SPEED 0x0200
|
||||
|
||||
/* wPortChange bits */
|
||||
#define USB_PORT_STAT_C_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_C_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_C_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_C_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_C_RESET 0x0010
|
||||
|
||||
/* wHubCharacteristics (masks) */
|
||||
#define HUB_CHAR_LPSM 0x0003
|
||||
#define HUB_CHAR_COMPOUND 0x0004
|
||||
#define HUB_CHAR_OCPM 0x0018
|
||||
|
||||
#pragma pack( push, 1 )
|
||||
struct usb_hub_status
|
||||
{
|
||||
__u16 wHubStatus;
|
||||
__u16 wHubChange;
|
||||
};
|
||||
#pragma pack( pop )
|
||||
|
||||
/*
|
||||
*Hub Status & Hub Change bit masks
|
||||
*/
|
||||
#define HUB_STATUS_LOCAL_POWER 0x0001
|
||||
#define HUB_STATUS_OVERCURRENT 0x0002
|
||||
|
||||
#define HUB_CHANGE_LOCAL_POWER 0x0001
|
||||
#define HUB_CHANGE_OVERCURRENT 0x0002
|
||||
|
||||
/* Hub descriptor */
|
||||
#pragma pack( push, 1 )
|
||||
struct usb_hub_descriptor
|
||||
{
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bNbrPorts;
|
||||
__u16 wHubCharacteristics;
|
||||
__u8 bPwrOn2PwrGood;
|
||||
__u8 bHubContrCurrent;
|
||||
__u8 DeviceRemovable;
|
||||
__u8 PortPowerCtrlMask;
|
||||
};
|
||||
#pragma pack( pop )
|
||||
|
||||
/*
|
||||
struct usb_hub_descriptor_t
|
||||
{
|
||||
__u8 bDescLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bNbrPorts;
|
||||
__u16 wHubCharacteristics;
|
||||
#define UHD_PWR 0x0003
|
||||
#define UHD_PWR_GANGED 0x0000
|
||||
#define UHD_PWR_INDIVIDUAL 0x0001
|
||||
#define UHD_PWR_NO_SWITCH 0x0002
|
||||
#define UHD_COMPOUND 0x0004
|
||||
#define UHD_OC 0x0018
|
||||
#define UHD_OC_GLOBAL 0x0000
|
||||
#define UHD_OC_INDIVIDUAL 0x0008
|
||||
#define UHD_OC_NONE 0x0010
|
||||
#define UHD_TT_THINK 0x0060
|
||||
#define UHD_TT_THINK_8 0x0000
|
||||
#define UHD_TT_THINK_16 0x0020
|
||||
#define UHD_TT_THINK_24 0x0040
|
||||
#define UHD_TT_THINK_32 0x0060
|
||||
#define UHD_PORT_IND 0x0080
|
||||
|
||||
__u8 bPwrOn2PwrGood; // delay in 2 ms units
|
||||
#define UHD_PWRON_FACTOR 2
|
||||
|
||||
__u8 bHubContrCurrent;
|
||||
__u8 DeviceRemovable[32]; //max 255 ports
|
||||
|
||||
#define UHD_NOT_REMOV(desc, i) \
|
||||
(((desc)->DeviceRemovable[(i)/8] >> ((i) % 8)) & 1)
|
||||
__u8 PortPowerCtrlMask[1]; // deprecated
|
||||
};
|
||||
*/
|
||||
#define USB_HUB_DESCRIPTOR_SIZE 9 /* includes deprecated PortPowerCtrlMask */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
int get_control_msg(ohci_t * ohci,
|
||||
__u8 Addr,
|
||||
__u8 request, // 0x06
|
||||
__u8 requesttype, // 0x80
|
||||
__u16 value,
|
||||
__u16 index,
|
||||
__u16 size,
|
||||
__u8 * data );
|
||||
|
||||
|
||||
|
||||
|
||||
int set_control_msg(ohci_t * ohci,
|
||||
__u8 Addr,
|
||||
__u8 request,
|
||||
__u8 requesttype,
|
||||
__u16 value,
|
||||
__u16 index,
|
||||
__u16 size,
|
||||
__u8 * data );
|
||||
|
||||
|
||||
|
||||
//int usb_get_device_descriptor(ohci_t * ohci, __u8 Addr, int size, void *buf);
|
||||
|
||||
|
||||
//int usb_get_hub_descriptor(ohci_t * ohci, __u8 Addr, int size, void *buf);
|
||||
|
||||
|
||||
|
||||
|
||||
int usb_set_configuration(ohci_t * ohci, __u8 Addr, int configuration);
|
||||
|
||||
|
||||
void DebugHubDescriptor( usb_hub_descriptor * pDes );
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************/
|
||||
|
||||
|
||||
#define UT_WRITE 0x00
|
||||
#define UT_READ 0x80
|
||||
#define UT_STANDARD 0x00
|
||||
#define UT_CLASS 0x20
|
||||
#define UT_VENDOR 0x40
|
||||
#define UT_DEVICE 0x00
|
||||
#define UT_INTERFACE 0x01
|
||||
#define UT_ENDPOINT 0x02
|
||||
#define UT_OTHER 0x03
|
||||
|
||||
#define UT_READ_DEVICE (UT_READ | UT_STANDARD | UT_DEVICE)
|
||||
#define UT_READ_INTERFACE (UT_READ | UT_STANDARD | UT_INTERFACE)
|
||||
#define UT_READ_ENDPOINT (UT_READ | UT_STANDARD | UT_ENDPOINT)
|
||||
#define UT_WRITE_DEVICE (UT_WRITE | UT_STANDARD | UT_DEVICE)
|
||||
#define UT_WRITE_INTERFACE (UT_WRITE | UT_STANDARD | UT_INTERFACE)
|
||||
#define UT_WRITE_ENDPOINT (UT_WRITE | UT_STANDARD | UT_ENDPOINT)
|
||||
#define UT_READ_CLASS_DEVICE (UT_READ | UT_CLASS | UT_DEVICE)
|
||||
#define UT_READ_CLASS_INTERFACE (UT_READ | UT_CLASS | UT_INTERFACE)
|
||||
#define UT_READ_CLASS_OTHER (UT_READ | UT_CLASS | UT_OTHER)
|
||||
#define UT_READ_CLASS_ENDPOINT (UT_READ | UT_CLASS | UT_ENDPOINT)
|
||||
#define UT_WRITE_CLASS_DEVICE (UT_WRITE | UT_CLASS | UT_DEVICE)
|
||||
#define UT_WRITE_CLASS_INTERFACE (UT_WRITE | UT_CLASS | UT_INTERFACE)
|
||||
#define UT_WRITE_CLASS_OTHER (UT_WRITE | UT_CLASS | UT_OTHER)
|
||||
#define UT_WRITE_CLASS_ENDPOINT (UT_WRITE | UT_CLASS | UT_ENDPOINT)
|
||||
#define UT_READ_VENDOR_DEVICE (UT_READ | UT_VENDOR | UT_DEVICE)
|
||||
#define UT_READ_VENDOR_INTERFACE (UT_READ | UT_VENDOR | UT_INTERFACE)
|
||||
#define UT_READ_VENDOR_OTHER (UT_READ | UT_VENDOR | UT_OTHER)
|
||||
#define UT_READ_VENDOR_ENDPOINT (UT_READ | UT_VENDOR | UT_ENDPOINT)
|
||||
#define UT_WRITE_VENDOR_DEVICE (UT_WRITE | UT_VENDOR | UT_DEVICE)
|
||||
#define UT_WRITE_VENDOR_INTERFACE (UT_WRITE | UT_VENDOR | UT_INTERFACE)
|
||||
#define UT_WRITE_VENDOR_OTHER (UT_WRITE | UT_VENDOR | UT_OTHER)
|
||||
#define UT_WRITE_VENDOR_ENDPOINT (UT_WRITE | UT_VENDOR | UT_ENDPOINT)
|
||||
|
||||
/* Requests */
|
||||
#define UR_GET_STATUS 0x00
|
||||
#define UR_CLEAR_FEATURE 0x01
|
||||
#define UR_SET_FEATURE 0x03
|
||||
#define UR_SET_ADDRESS 0x05
|
||||
#define UR_GET_DESCRIPTOR 0x06
|
||||
#define UDESC_DEVICE 0x01
|
||||
#define UDESC_CONFIG 0x02
|
||||
#define UDESC_STRING 0x03
|
||||
#define UDESC_INTERFACE 0x04
|
||||
#define UDESC_ENDPOINT 0x05
|
||||
#define UDESC_DEVICE_QUALIFIER 0x06
|
||||
#define UDESC_OTHER_SPEED_CONFIGURATION 0x07
|
||||
#define UDESC_INTERFACE_POWER 0x08
|
||||
#define UDESC_OTG 0x09
|
||||
#define UDESC_CS_DEVICE 0x21 /* class specific */
|
||||
#define UDESC_CS_CONFIG 0x22
|
||||
#define UDESC_CS_STRING 0x23
|
||||
#define UDESC_CS_INTERFACE 0x24
|
||||
#define UDESC_CS_ENDPOINT 0x25
|
||||
#define UDESC_HUB 0x29
|
||||
#define UR_SET_DESCRIPTOR 0x07
|
||||
#define UR_GET_CONFIG 0x08
|
||||
#define UR_SET_CONFIG 0x09
|
||||
#define UR_GET_INTERFACE 0x0a
|
||||
#define UR_SET_INTERFACE 0x0b
|
||||
#define UR_SYNCH_FRAME 0x0c
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************/
|
||||
|
||||
struct devrequest
|
||||
{
|
||||
unsigned char requesttype; // 1 byte
|
||||
unsigned char request; // 1 byte
|
||||
unsigned short value; // 2 bytes
|
||||
unsigned short index; // 2 bytes
|
||||
unsigned short length; // 2 bytes
|
||||
};// end devrequest // Total = 8 bytes
|
||||
|
||||
|
||||
struct usbd_device
|
||||
{
|
||||
ohci_t * p_ohci; /* our ohci stuff */
|
||||
__u8 address; /* device addess */
|
||||
};// end usbd_device
|
||||
|
||||
|
||||
|
||||
int usbd_get_desc(usbd_device * dev, int type, int index, int len, void *desc);
|
||||
|
||||
int usbd_do_request(usbd_device * dev, devrequest *req, void *data);
|
||||
|
||||
|
||||
int usbd_get_hub_descriptor(usbd_device * dev, void * data);
|
||||
|
||||
|
||||
int do_hub_work(usbd_device * dev);
|
||||
|
||||
|
||||
int usbd_do_request_big_packet(usbd_device * dev, devrequest *req, void *data);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // __HUB__
|
||||
|
||||
|
||||
|
|
|
@ -1,73 +1,73 @@
|
|||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: misc.h */
|
||||
/* Author: bkenwright@xbdev.net */
|
||||
/* Desc: Misc functions, making our usb/gamepad code lib independent */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef __XMISC__
|
||||
#define __XMISC__
|
||||
|
||||
|
||||
|
||||
|
||||
typedef unsigned char __u8;
|
||||
typedef char __s8;
|
||||
typedef unsigned short __u16;
|
||||
typedef short __s16;
|
||||
typedef unsigned long __u32;
|
||||
typedef int __s32;
|
||||
|
||||
#define NULL 0
|
||||
|
||||
//#include <stdio.h>
|
||||
//extern char buf[500];
|
||||
//void dbg(char* str);
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* StdFunctions */
|
||||
/* Didn't want our code being dependent on anything! For example Sleep(..) */
|
||||
/* As its available in the xdk and the openxdk or linux?... Well I could */
|
||||
/* write custom functions - giveing us the ultimate in flexiblity! */
|
||||
/* We really are now a portible piece of code */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
void xSleep( long timemilliseconds );
|
||||
|
||||
void *xmemcpy(void *dest, const void *src, size_t n);
|
||||
|
||||
void *xmalloc(size_t size);
|
||||
|
||||
void *xmemset(void *s, int c, size_t n);
|
||||
|
||||
//unsigned __int64 MyGetTickCount();
|
||||
unsigned int MyGetTickCount();
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Kernel Functions */
|
||||
/* Here are the 2 kernal api's from the bios that we need to make this code */
|
||||
/* work - everything else can be hand coded but these. As we need to use */
|
||||
/* memory that isn't quite where its suppose to be! Remember where running */
|
||||
/* in protected mode - so for our ohci registers, when we give them an */
|
||||
/* address, it has to be the real physical address. If we where in the */
|
||||
/* kernel or writing a kernel bios, we wolndt' need to worry about it..but we */
|
||||
/* do here as where in the xbe! */
|
||||
/* */
|
||||
/* These are just wrapper's as we call the exact same function name..but */
|
||||
/* without the x at the start. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
__u32 xMmGetPhysicalAddress(__u32 BaseAddress);
|
||||
void xMmLockUnlockBufferPages(__u32 MemoryAddress, __u32 NumberOfBytes, __u32 a);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#endif // __XMISC__
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: misc.h */
|
||||
/* Author: bkenwright@xbdev.net */
|
||||
/* Desc: Misc functions, making our usb/gamepad code lib independent */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef __XMISC__
|
||||
#define __XMISC__
|
||||
|
||||
|
||||
|
||||
|
||||
typedef unsigned char __u8;
|
||||
typedef char __s8;
|
||||
typedef unsigned short __u16;
|
||||
typedef short __s16;
|
||||
typedef unsigned long __u32;
|
||||
typedef int __s32;
|
||||
|
||||
#define NULL 0
|
||||
|
||||
//#include <stdio.h>
|
||||
//extern char buf[500];
|
||||
//void dbg(char* str);
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* StdFunctions */
|
||||
/* Didn't want our code being dependent on anything! For example Sleep(..) */
|
||||
/* As its available in the xdk and the openxdk or linux?... Well I could */
|
||||
/* write custom functions - giveing us the ultimate in flexiblity! */
|
||||
/* We really are now a portible piece of code */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
void xSleep( long timemilliseconds );
|
||||
|
||||
void *xmemcpy(void *dest, const void *src, size_t n);
|
||||
|
||||
void *xmalloc(size_t size);
|
||||
|
||||
void *xmemset(void *s, int c, size_t n);
|
||||
|
||||
//unsigned __int64 MyGetTickCount();
|
||||
unsigned int MyGetTickCount();
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Kernel Functions */
|
||||
/* Here are the 2 kernal api's from the bios that we need to make this code */
|
||||
/* work - everything else can be hand coded but these. As we need to use */
|
||||
/* memory that isn't quite where its suppose to be! Remember where running */
|
||||
/* in protected mode - so for our ohci registers, when we give them an */
|
||||
/* address, it has to be the real physical address. If we where in the */
|
||||
/* kernel or writing a kernel bios, we wolndt' need to worry about it..but we */
|
||||
/* do here as where in the xbe! */
|
||||
/* */
|
||||
/* These are just wrapper's as we call the exact same function name..but */
|
||||
/* without the x at the start. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
__u32 xMmGetPhysicalAddress(__u32 BaseAddress);
|
||||
void xMmLockUnlockBufferPages(__u32 MemoryAddress, __u32 NumberOfBytes, __u32 a);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#endif // __XMISC__
|
||||
|
|
|
@ -1,242 +1,242 @@
|
|||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: ohci.h */
|
||||
/* */
|
||||
/* Details: Original File & Design: Thomas Frei */
|
||||
/* (modifications for xbox openxdk by bkenwright) */
|
||||
/* (bkenwright@xbdev.net) www.xbdev.net */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __OHCI_X__
|
||||
#define __OHCI_X__
|
||||
|
||||
#include "misc.h" // We only need this here, for the definitions of __u8, __u32 etc
|
||||
// to be added in later (example):
|
||||
|
||||
|
||||
// Example sippet of possible later improvment on structure aligment in vs
|
||||
// __declspec(align(32)) struct Str1
|
||||
// {
|
||||
// int a, b, c, d, e;
|
||||
// };
|
||||
|
||||
/*
|
||||
typedef unsigned char __u8;
|
||||
typedef char __s8;
|
||||
typedef unsigned short __u16;
|
||||
typedef short __s16;
|
||||
typedef unsigned long __u32;
|
||||
typedef int __s32;
|
||||
|
||||
#define NULL 0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define SIZEOF_HCCA 0x100
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The HCCA (Host Controller Communications Area) is a 256 byte
|
||||
* structure defined in the OHCI spec. that the host controller is
|
||||
* told the base address of. It must be 256-byte aligned.
|
||||
*/
|
||||
|
||||
#define NUM_INTS 32 /* part of the OHCI standard */
|
||||
|
||||
|
||||
|
||||
#pragma pack( push, 1 )
|
||||
struct ohci_hcca
|
||||
{
|
||||
__u32 int_table[NUM_INTS]; /* Interrupt ED table */
|
||||
__u16 frame_no; /* current frame number */
|
||||
__u16 pad1; /* set to 0 on each frame_no change */
|
||||
__u32 done_head; /* info returned for an interrupt */
|
||||
__u8 reserved_for_hc[116];
|
||||
};
|
||||
#pragma pack( pop )
|
||||
typedef struct ohci_hcca ohci_hcca_t;
|
||||
|
||||
|
||||
/*
|
||||
* Maximum number of root hub ports.
|
||||
*/
|
||||
|
||||
#define MAX_ROOT_PORTS 15
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
volatile struct ohci_regs
|
||||
{
|
||||
/* control and status registers */
|
||||
__u32 revision;
|
||||
__u32 control;
|
||||
__u32 cmdstatus;
|
||||
__u32 intrstatus;
|
||||
__u32 intrenable;
|
||||
__u32 intrdisable;
|
||||
/* memory pointers */
|
||||
__u32 hcca;
|
||||
__u32 ed_periodcurrent;
|
||||
__u32 ed_controlhead;
|
||||
__u32 ed_controlcurrent;
|
||||
__u32 ed_bulkhead;
|
||||
__u32 ed_bulkcurrent;
|
||||
__u32 donehead;
|
||||
/* frame counters */
|
||||
__u32 fminterval;
|
||||
__u32 fmremaining;
|
||||
__u32 fmnumber;
|
||||
__u32 periodicstart;
|
||||
__u32 lsthresh;
|
||||
/* Root hub ports */
|
||||
volatile struct ohci_roothub_regs
|
||||
{
|
||||
__u32 a;
|
||||
__u32 b;
|
||||
__u32 status;
|
||||
__u32 portstatus[MAX_ROOT_PORTS];
|
||||
} roothub;
|
||||
};
|
||||
#pragma pack()
|
||||
typedef struct ohci_regs ohci_regs_t;
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct ohci
|
||||
{
|
||||
volatile struct ohci_hcca *hcca; /* hcca */
|
||||
|
||||
volatile struct ohci_regs * regs; /* OHCI controller's memory */
|
||||
|
||||
} ohci_t;
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#define SKIP 0x4000L
|
||||
#define OUTV 0x0800L
|
||||
#define INV 0x1000L
|
||||
#define AUTOIO 0x1800L
|
||||
#define LOWS 0x2000L
|
||||
|
||||
|
||||
|
||||
//#pragma block (push,1)
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u32 Format;
|
||||
__u32 Tailptr;
|
||||
__u32 Headptr;
|
||||
__u32 NextED;
|
||||
} s_Endpointdescripor;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u32 Format;
|
||||
__u32 Buffer;
|
||||
__u32 NextTD;
|
||||
__u32 BufferEnd;
|
||||
} s_Transferdescriptor;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u16 USB;
|
||||
__u8 DeviceClass;
|
||||
__u8 DeviceSubClass;
|
||||
__u8 DeviceProtocol;
|
||||
__u8 MaxPacketSize;
|
||||
__u16 Vendor;
|
||||
__u16 ProductID;
|
||||
__u16 Device;
|
||||
__u8 Manufacturer;
|
||||
__u8 ProductIndex;
|
||||
__u8 SerialNumber;
|
||||
__u8 ConfigNumber;
|
||||
} s_USB_Devicedescriptor;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u16 TotalLength;
|
||||
__u8 NumberofInterfaces;
|
||||
__u8 ConfigValue;
|
||||
__u8 Configuration;
|
||||
__u8 Attributes;
|
||||
__u8 MaxPower;
|
||||
} s_USB_Configurationdescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u8 Interfacenumber;
|
||||
__u8 AlternateSetting;
|
||||
__u8 NumberofEndpoints;
|
||||
__u8 InterfaceClass;
|
||||
__u8 InterfaceSubClass;
|
||||
__u8 InterfaceProtocol;
|
||||
__u8 InterfaceIndex;
|
||||
} s_USB_Interfacedescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u8 EndpointAddress;
|
||||
__u8 Attributes;
|
||||
__u16 MaxPacketSize;
|
||||
__u8 Interval;
|
||||
} s_USB_Endpointdescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u16 *LANGID;
|
||||
} s_USB_Languagedescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u8 *String;
|
||||
} s_USB_Stringdescriptor;
|
||||
//#pragma block (pop)
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Main Functions
|
||||
int FindOHC(ohci_t * ohci, void *regbase);
|
||||
int FindDev(ohci_t * ohci, int Port);
|
||||
|
||||
|
||||
int ResetPort(ohci_t * ohci, int Port);
|
||||
int SetAddres(ohci_t * ohci, int Port, __u8 AddrNew);
|
||||
int SetConfigur(ohci_t * ohci, __u8 Addr, __u8 Config);
|
||||
int GetDesc(ohci_t * ohci, __u8 Addr, __u8 DescrType, __u8 Index, __u8 Count, __u8 *DBuffer);
|
||||
|
||||
|
||||
|
||||
// Debug Functions
|
||||
void DebugFile(ohci_t * ohci);
|
||||
void DebugDescriptor( s_USB_Devicedescriptor * pDes );
|
||||
void DebugConfigDescriptor( s_USB_Configurationdescriptor * pDes );
|
||||
void DebugInterfaceDescriptor( s_USB_Interfacedescriptor * pDes );
|
||||
void DebugEndPointDescriptor( s_USB_Endpointdescriptor * pDes );
|
||||
|
||||
|
||||
|
||||
#endif // __OHCI_X__
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: ohci.h */
|
||||
/* */
|
||||
/* Details: Original File & Design: Thomas Frei */
|
||||
/* (modifications for xbox openxdk by bkenwright) */
|
||||
/* (bkenwright@xbdev.net) www.xbdev.net */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __OHCI_X__
|
||||
#define __OHCI_X__
|
||||
|
||||
#include "misc.h" // We only need this here, for the definitions of __u8, __u32 etc
|
||||
// to be added in later (example):
|
||||
|
||||
|
||||
// Example sippet of possible later improvment on structure aligment in vs
|
||||
// __declspec(align(32)) struct Str1
|
||||
// {
|
||||
// int a, b, c, d, e;
|
||||
// };
|
||||
|
||||
/*
|
||||
typedef unsigned char __u8;
|
||||
typedef char __s8;
|
||||
typedef unsigned short __u16;
|
||||
typedef short __s16;
|
||||
typedef unsigned long __u32;
|
||||
typedef int __s32;
|
||||
|
||||
#define NULL 0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define SIZEOF_HCCA 0x100
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The HCCA (Host Controller Communications Area) is a 256 byte
|
||||
* structure defined in the OHCI spec. that the host controller is
|
||||
* told the base address of. It must be 256-byte aligned.
|
||||
*/
|
||||
|
||||
#define NUM_INTS 32 /* part of the OHCI standard */
|
||||
|
||||
|
||||
|
||||
#pragma pack( push, 1 )
|
||||
struct ohci_hcca
|
||||
{
|
||||
__u32 int_table[NUM_INTS]; /* Interrupt ED table */
|
||||
__u16 frame_no; /* current frame number */
|
||||
__u16 pad1; /* set to 0 on each frame_no change */
|
||||
__u32 done_head; /* info returned for an interrupt */
|
||||
__u8 reserved_for_hc[116];
|
||||
};
|
||||
#pragma pack( pop )
|
||||
typedef struct ohci_hcca ohci_hcca_t;
|
||||
|
||||
|
||||
/*
|
||||
* Maximum number of root hub ports.
|
||||
*/
|
||||
|
||||
#define MAX_ROOT_PORTS 15
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
volatile struct ohci_regs
|
||||
{
|
||||
/* control and status registers */
|
||||
__u32 revision;
|
||||
__u32 control;
|
||||
__u32 cmdstatus;
|
||||
__u32 intrstatus;
|
||||
__u32 intrenable;
|
||||
__u32 intrdisable;
|
||||
/* memory pointers */
|
||||
__u32 hcca;
|
||||
__u32 ed_periodcurrent;
|
||||
__u32 ed_controlhead;
|
||||
__u32 ed_controlcurrent;
|
||||
__u32 ed_bulkhead;
|
||||
__u32 ed_bulkcurrent;
|
||||
__u32 donehead;
|
||||
/* frame counters */
|
||||
__u32 fminterval;
|
||||
__u32 fmremaining;
|
||||
__u32 fmnumber;
|
||||
__u32 periodicstart;
|
||||
__u32 lsthresh;
|
||||
/* Root hub ports */
|
||||
volatile struct ohci_roothub_regs
|
||||
{
|
||||
__u32 a;
|
||||
__u32 b;
|
||||
__u32 status;
|
||||
__u32 portstatus[MAX_ROOT_PORTS];
|
||||
} roothub;
|
||||
};
|
||||
#pragma pack()
|
||||
typedef struct ohci_regs ohci_regs_t;
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct ohci
|
||||
{
|
||||
volatile struct ohci_hcca *hcca; /* hcca */
|
||||
|
||||
volatile struct ohci_regs * regs; /* OHCI controller's memory */
|
||||
|
||||
} ohci_t;
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#define SKIP 0x4000L
|
||||
#define OUTV 0x0800L
|
||||
#define INV 0x1000L
|
||||
#define AUTOIO 0x1800L
|
||||
#define LOWS 0x2000L
|
||||
|
||||
|
||||
|
||||
//#pragma block (push,1)
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u32 Format;
|
||||
__u32 Tailptr;
|
||||
__u32 Headptr;
|
||||
__u32 NextED;
|
||||
} s_Endpointdescripor;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u32 Format;
|
||||
__u32 Buffer;
|
||||
__u32 NextTD;
|
||||
__u32 BufferEnd;
|
||||
} s_Transferdescriptor;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u16 USB;
|
||||
__u8 DeviceClass;
|
||||
__u8 DeviceSubClass;
|
||||
__u8 DeviceProtocol;
|
||||
__u8 MaxPacketSize;
|
||||
__u16 Vendor;
|
||||
__u16 ProductID;
|
||||
__u16 Device;
|
||||
__u8 Manufacturer;
|
||||
__u8 ProductIndex;
|
||||
__u8 SerialNumber;
|
||||
__u8 ConfigNumber;
|
||||
} s_USB_Devicedescriptor;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u16 TotalLength;
|
||||
__u8 NumberofInterfaces;
|
||||
__u8 ConfigValue;
|
||||
__u8 Configuration;
|
||||
__u8 Attributes;
|
||||
__u8 MaxPower;
|
||||
} s_USB_Configurationdescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u8 Interfacenumber;
|
||||
__u8 AlternateSetting;
|
||||
__u8 NumberofEndpoints;
|
||||
__u8 InterfaceClass;
|
||||
__u8 InterfaceSubClass;
|
||||
__u8 InterfaceProtocol;
|
||||
__u8 InterfaceIndex;
|
||||
} s_USB_Interfacedescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u8 EndpointAddress;
|
||||
__u8 Attributes;
|
||||
__u16 MaxPacketSize;
|
||||
__u8 Interval;
|
||||
} s_USB_Endpointdescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u16 *LANGID;
|
||||
} s_USB_Languagedescriptor;
|
||||
|
||||
typedef struct {
|
||||
__u8 Length;
|
||||
__u8 DescriptorType;
|
||||
__u8 *String;
|
||||
} s_USB_Stringdescriptor;
|
||||
//#pragma block (pop)
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Main Functions
|
||||
int FindOHC(ohci_t * ohci, void *regbase);
|
||||
int FindDev(ohci_t * ohci, int Port);
|
||||
|
||||
|
||||
int ResetPort(ohci_t * ohci, int Port);
|
||||
int SetAddres(ohci_t * ohci, int Port, __u8 AddrNew);
|
||||
int SetConfigur(ohci_t * ohci, __u8 Addr, __u8 Config);
|
||||
int GetDesc(ohci_t * ohci, __u8 Addr, __u8 DescrType, __u8 Index, __u8 Count, __u8 *DBuffer);
|
||||
|
||||
|
||||
|
||||
// Debug Functions
|
||||
void DebugFile(ohci_t * ohci);
|
||||
void DebugDescriptor( s_USB_Devicedescriptor * pDes );
|
||||
void DebugConfigDescriptor( s_USB_Configurationdescriptor * pDes );
|
||||
void DebugInterfaceDescriptor( s_USB_Interfacedescriptor * pDes );
|
||||
void DebugEndPointDescriptor( s_USB_Endpointdescriptor * pDes );
|
||||
|
||||
|
||||
|
||||
#endif // __OHCI_X__
|
||||
|
|
|
@ -1,89 +1,89 @@
|
|||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: pad.h */
|
||||
/* bkenwright@xbdev.net - www.xbdev.net */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
/*
|
||||
What on earth! Whats this file for?
|
||||
Well once we have our usb device address set...for the xbox gamepad :)
|
||||
This file will do some simple commands...sending bulk test messages
|
||||
...an example would be to send a rumble message?
|
||||
Also probe for some button presses?
|
||||
|
||||
In Development though.
|
||||
*/
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __PAD__
|
||||
#define __PAD__
|
||||
|
||||
|
||||
#include "ohci.h"
|
||||
#include "hub.h"
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* stXPAD - Gamepad Data Structure */
|
||||
/* This structure will be filled in by our USB Gamepad - its the data that */
|
||||
/* is returned to us when we request a gamepad in on the usb bus. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#pragma pack(1) // We use this, so our data is packed nice and tight!..no space.
|
||||
struct stXPAD // Packed to 1 byte alignment.
|
||||
{
|
||||
char reserved1;
|
||||
unsigned char structsize;
|
||||
|
||||
char pad; /* 1 up 2 down 4 left 8 right */
|
||||
char reserved2;
|
||||
unsigned char keys[6]; /* A B X Y Black White */
|
||||
|
||||
unsigned char trig_left;
|
||||
unsigned char trig_right;
|
||||
short stick_left_x;
|
||||
short stick_left_y;
|
||||
short stick_right_x;
|
||||
short stick_right_y;
|
||||
|
||||
char padding[0x40];
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* stRumbleXPAD */
|
||||
/* We will fill this with data later on, that we will pass to the gamepad, */
|
||||
/* it will specify the left or right rumble and speed for example */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#pragma pack(1)
|
||||
struct stRumbleXPAD
|
||||
{
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Functions */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
void usb_bulk_msg( usbd_device * dev, int size, void * data ); // Send data to the USB
|
||||
|
||||
void usb_bulk_msg_in( usbd_device * dev, int size, void * data ); // Get data from the USB
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // __PAD__
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: pad.h */
|
||||
/* bkenwright@xbdev.net - www.xbdev.net */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
/*
|
||||
What on earth! Whats this file for?
|
||||
Well once we have our usb device address set...for the xbox gamepad :)
|
||||
This file will do some simple commands...sending bulk test messages
|
||||
...an example would be to send a rumble message?
|
||||
Also probe for some button presses?
|
||||
|
||||
In Development though.
|
||||
*/
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __PAD__
|
||||
#define __PAD__
|
||||
|
||||
|
||||
#include "ohci.h"
|
||||
#include "hub.h"
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* stXPAD - Gamepad Data Structure */
|
||||
/* This structure will be filled in by our USB Gamepad - its the data that */
|
||||
/* is returned to us when we request a gamepad in on the usb bus. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#pragma pack(1) // We use this, so our data is packed nice and tight!..no space.
|
||||
struct stXPAD // Packed to 1 byte alignment.
|
||||
{
|
||||
char reserved1;
|
||||
unsigned char structsize;
|
||||
|
||||
char pad; /* 1 up 2 down 4 left 8 right */
|
||||
char reserved2;
|
||||
unsigned char keys[6]; /* A B X Y Black White */
|
||||
|
||||
unsigned char trig_left;
|
||||
unsigned char trig_right;
|
||||
short stick_left_x;
|
||||
short stick_left_y;
|
||||
short stick_right_x;
|
||||
short stick_right_y;
|
||||
|
||||
char padding[0x40];
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* stRumbleXPAD */
|
||||
/* We will fill this with data later on, that we will pass to the gamepad, */
|
||||
/* it will specify the left or right rumble and speed for example */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#pragma pack(1)
|
||||
struct stRumbleXPAD
|
||||
{
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Functions */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
void usb_bulk_msg( usbd_device * dev, int size, void * data ); // Send data to the USB
|
||||
|
||||
void usb_bulk_msg_in( usbd_device * dev, int size, void * data ); // Get data from the USB
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // __PAD__
|
||||
|
|
|
@ -1,96 +1,96 @@
|
|||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: xinput.h */
|
||||
/* Auth: bkenwright@xbdev.net */
|
||||
/* Desc: GamePad entry code for use on the xbox. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
/*
|
||||
This is our xinput header file, this is where all our functions that we'll
|
||||
use in our game or app for the xbox that 'require' gamepad support will
|
||||
be put.
|
||||
*/
|
||||
/******************************************************************************/
|
||||
/*
|
||||
How does this code work? What lib's does it need? How would I use it
|
||||
in my code?
|
||||
|
||||
Well the aim of the gamepad code was to develop an independent set of
|
||||
code for the openxdk - but because it's lib independent it also works on
|
||||
the xdk.
|
||||
|
||||
<1> Include our header file, and the other files which do all the work..
|
||||
later they'll be put into a library
|
||||
e.g. #include "xinput/xinput.h" // Gamepad input
|
||||
|
||||
<2> Init our gamepad code
|
||||
e.g.
|
||||
stXINPUT xin;
|
||||
xInitInput(&xin);
|
||||
You do this ocne at the start of the program, I did it this way as I don't
|
||||
like globals, so you need to pass it a stuct called stXINPUT which
|
||||
keeps all our usb/gampad information in.
|
||||
|
||||
<3> Get our gamepad information in our main loop e.g:
|
||||
stXPAD pad;
|
||||
xGetPadInput(&pad, &xin);
|
||||
|
||||
<4> When we've all finished, call xReleaseInput(&xin);
|
||||
|
||||
<Misc> You can also set the rumble effect - still in development
|
||||
e.g. xSetPadInput(&pad, &xin);
|
||||
*/
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef __XINPUT__
|
||||
#define __XINPUT__
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
#include "ohci.h"
|
||||
#include "pad.h" // for stXPAD definition
|
||||
|
||||
|
||||
|
||||
// About this - at the moment it just contains the offset to the ohci memory
|
||||
// location (e.g. 0xfed00000...but we will also use this to keep track of
|
||||
// alocated memory - how many gamepads are plugged in...usb dev drivers etc.
|
||||
|
||||
struct stXINPUT
|
||||
{
|
||||
ohci_t my_ohci;
|
||||
};
|
||||
|
||||
struct stXPAD; // Defined in xpad.h
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Interface Functions */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
//<1> Creation
|
||||
int xInitInput(stXINPUT* p);
|
||||
|
||||
//<2> Probing/ Getting or Setting Gamepad
|
||||
int xGetPadInput(stXPAD * p, stXINPUT * xin, int iWhichPad = 0); // 0 is default pad
|
||||
int xSetPadInput(stXPAD * p, stXINPUT * xin, int iWhichPad = 0);
|
||||
|
||||
//<3> Death End
|
||||
int xReleaseInput(stXINPUT * p);
|
||||
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif // __XINPUT__
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* File: xinput.h */
|
||||
/* Auth: bkenwright@xbdev.net */
|
||||
/* Desc: GamePad entry code for use on the xbox. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
/*
|
||||
This is our xinput header file, this is where all our functions that we'll
|
||||
use in our game or app for the xbox that 'require' gamepad support will
|
||||
be put.
|
||||
*/
|
||||
/******************************************************************************/
|
||||
/*
|
||||
How does this code work? What lib's does it need? How would I use it
|
||||
in my code?
|
||||
|
||||
Well the aim of the gamepad code was to develop an independent set of
|
||||
code for the openxdk - but because it's lib independent it also works on
|
||||
the xdk.
|
||||
|
||||
<1> Include our header file, and the other files which do all the work..
|
||||
later they'll be put into a library
|
||||
e.g. #include "xinput/xinput.h" // Gamepad input
|
||||
|
||||
<2> Init our gamepad code
|
||||
e.g.
|
||||
stXINPUT xin;
|
||||
xInitInput(&xin);
|
||||
You do this ocne at the start of the program, I did it this way as I don't
|
||||
like globals, so you need to pass it a stuct called stXINPUT which
|
||||
keeps all our usb/gampad information in.
|
||||
|
||||
<3> Get our gamepad information in our main loop e.g:
|
||||
stXPAD pad;
|
||||
xGetPadInput(&pad, &xin);
|
||||
|
||||
<4> When we've all finished, call xReleaseInput(&xin);
|
||||
|
||||
<Misc> You can also set the rumble effect - still in development
|
||||
e.g. xSetPadInput(&pad, &xin);
|
||||
*/
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef __XINPUT__
|
||||
#define __XINPUT__
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
#include "ohci.h"
|
||||
#include "pad.h" // for stXPAD definition
|
||||
|
||||
|
||||
|
||||
// About this - at the moment it just contains the offset to the ohci memory
|
||||
// location (e.g. 0xfed00000...but we will also use this to keep track of
|
||||
// alocated memory - how many gamepads are plugged in...usb dev drivers etc.
|
||||
|
||||
struct stXINPUT
|
||||
{
|
||||
ohci_t my_ohci;
|
||||
};
|
||||
|
||||
struct stXPAD; // Defined in xpad.h
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Interface Functions */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
//<1> Creation
|
||||
int xInitInput(stXINPUT* p);
|
||||
|
||||
//<2> Probing/ Getting or Setting Gamepad
|
||||
int xGetPadInput(stXPAD * p, stXINPUT * xin, int iWhichPad = 0); // 0 is default pad
|
||||
int xSetPadInput(stXPAD * p, stXINPUT * xin, int iWhichPad = 0);
|
||||
|
||||
//<3> Death End
|
||||
int xReleaseInput(stXINPUT * p);
|
||||
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif // __XINPUT__
|
||||
|
||||
|
|
|
@ -1,110 +1,110 @@
|
|||
/******************************************************************************/
|
||||
/* */
|
||||
/* It has arrived! */
|
||||
/* */
|
||||
/* Gamepad support for the OpenXDK */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
This is a lib build of the gamepad code - its more or less independent..it
|
||||
doens't need any of the other openxdk header files, and will work in the ms xdk
|
||||
as well.
|
||||
|
||||
Its been designed to be as flexible as possible - so many of the xinput.h
|
||||
interface functions have been designed so we can tweek away at the workings
|
||||
and get you a great feel in tim.
|
||||
|
||||
It works! But might need a bit of improvement for speed.
|
||||
|
||||
Externals:
|
||||
|
||||
|
||||
extern "C" __u32 __stdcall MmAllocateContiguousMemory(__u32 a);
|
||||
extern "C" __u32 __stdcall MmLockUnlockBufferPages(__u32 MemoryAddress, __u32 NumberOfBytes, __u32 a);
|
||||
extern "C" __u32 __stdcall MmGetPhysicalAddress(__u32 BaseAddress);
|
||||
|
||||
|
||||
These are the only external links in our code! Everything else..even the
|
||||
myGetTickCount() have all been implemented inside our code!
|
||||
|
||||
|
||||
How to use it:
|
||||
|
||||
/******************************************************************************/
|
||||
/*
|
||||
How does this code work? What lib's does it need? How would I use it
|
||||
in my code?
|
||||
|
||||
Well the aim of the gamepad code was to develop an independent set of
|
||||
code for the openxdk - but because it's lib independent it also works on
|
||||
the xdk.
|
||||
|
||||
<1> Include our header file, and the other files which do all the work..
|
||||
later they'll be put into a library
|
||||
e.g. #include "xinput/xinput.h" // Gamepad input
|
||||
|
||||
<2> Init our gamepad code
|
||||
e.g.
|
||||
stXINPUT xin;
|
||||
xInitInput(&xin);
|
||||
You do this ocne at the start of the program, I did it this way as I don't
|
||||
like globals, so you need to pass it a stuct called stXINPUT which
|
||||
keeps all our usb/gampad information in.
|
||||
|
||||
<3> Get our gamepad information in our main loop e.g:
|
||||
stXPAD pad;
|
||||
xGetPadInput(&pad, &xin);
|
||||
|
||||
<4> When we've all finished, call xReleaseInput(&xin);
|
||||
|
||||
<Misc> You can also set the rumble effect - still in development
|
||||
e.g. xSetPadInput(&pad, &xin);
|
||||
*/
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
Feedback welcome: bkenwright@xbdev.net
|
||||
|
||||
|
||||
Edits to OpenXDK main code:
|
||||
|
||||
mm.h line:83
|
||||
|
||||
from:
|
||||
|
||||
XBSYSAPI VOID *MmLockUnlockBufferPages;
|
||||
|
||||
to:
|
||||
|
||||
XBSYSAPI EXPORTNUM(175) PHYSICAL_ADDRESS NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
|
||||
mm.c line:94
|
||||
|
||||
from:
|
||||
|
||||
XBSYSAPI VOID *MmLockUnlockBufferPages = 0;
|
||||
|
||||
to:
|
||||
|
||||
|
||||
XBSYSAPI EXPORTNUM(175) PHYSICAL_ADDRESS NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* It has arrived! */
|
||||
/* */
|
||||
/* Gamepad support for the OpenXDK */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
This is a lib build of the gamepad code - its more or less independent..it
|
||||
doens't need any of the other openxdk header files, and will work in the ms xdk
|
||||
as well.
|
||||
|
||||
Its been designed to be as flexible as possible - so many of the xinput.h
|
||||
interface functions have been designed so we can tweek away at the workings
|
||||
and get you a great feel in tim.
|
||||
|
||||
It works! But might need a bit of improvement for speed.
|
||||
|
||||
Externals:
|
||||
|
||||
|
||||
extern "C" __u32 __stdcall MmAllocateContiguousMemory(__u32 a);
|
||||
extern "C" __u32 __stdcall MmLockUnlockBufferPages(__u32 MemoryAddress, __u32 NumberOfBytes, __u32 a);
|
||||
extern "C" __u32 __stdcall MmGetPhysicalAddress(__u32 BaseAddress);
|
||||
|
||||
|
||||
These are the only external links in our code! Everything else..even the
|
||||
myGetTickCount() have all been implemented inside our code!
|
||||
|
||||
|
||||
How to use it:
|
||||
|
||||
/******************************************************************************/
|
||||
/*
|
||||
How does this code work? What lib's does it need? How would I use it
|
||||
in my code?
|
||||
|
||||
Well the aim of the gamepad code was to develop an independent set of
|
||||
code for the openxdk - but because it's lib independent it also works on
|
||||
the xdk.
|
||||
|
||||
<1> Include our header file, and the other files which do all the work..
|
||||
later they'll be put into a library
|
||||
e.g. #include "xinput/xinput.h" // Gamepad input
|
||||
|
||||
<2> Init our gamepad code
|
||||
e.g.
|
||||
stXINPUT xin;
|
||||
xInitInput(&xin);
|
||||
You do this ocne at the start of the program, I did it this way as I don't
|
||||
like globals, so you need to pass it a stuct called stXINPUT which
|
||||
keeps all our usb/gampad information in.
|
||||
|
||||
<3> Get our gamepad information in our main loop e.g:
|
||||
stXPAD pad;
|
||||
xGetPadInput(&pad, &xin);
|
||||
|
||||
<4> When we've all finished, call xReleaseInput(&xin);
|
||||
|
||||
<Misc> You can also set the rumble effect - still in development
|
||||
e.g. xSetPadInput(&pad, &xin);
|
||||
*/
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
Feedback welcome: bkenwright@xbdev.net
|
||||
|
||||
|
||||
Edits to OpenXDK main code:
|
||||
|
||||
mm.h line:83
|
||||
|
||||
from:
|
||||
|
||||
XBSYSAPI VOID *MmLockUnlockBufferPages;
|
||||
|
||||
to:
|
||||
|
||||
XBSYSAPI EXPORTNUM(175) PHYSICAL_ADDRESS NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
|
||||
mm.c line:94
|
||||
|
||||
from:
|
||||
|
||||
XBSYSAPI VOID *MmLockUnlockBufferPages = 0;
|
||||
|
||||
to:
|
||||
|
||||
|
||||
XBSYSAPI EXPORTNUM(175) PHYSICAL_ADDRESS NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,70 +1,70 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : ansidecl.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_ANSIDECL__
|
||||
#define __OPENXDK_ANSIDECL__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// * Bigboy types
|
||||
// ******************************************************************
|
||||
#ifndef _BIGBOY_TYPES_
|
||||
#define _BIGBOY_TYPES_
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
#endif //_BIGBOY_TYPES_
|
||||
|
||||
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0x00
|
||||
#endif
|
||||
|
||||
#ifndef true
|
||||
#define true 1
|
||||
#endif
|
||||
#ifndef false
|
||||
#define false 0
|
||||
#endif
|
||||
|
||||
#ifndef __SIZE_T_
|
||||
#define __SIZE_T_
|
||||
typedef unsigned int size_t;
|
||||
#endif //__SIZE_T_
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __OPENXDK_ANSIDECL__
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : ansidecl.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_ANSIDECL__
|
||||
#define __OPENXDK_ANSIDECL__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// * Bigboy types
|
||||
// ******************************************************************
|
||||
#ifndef _BIGBOY_TYPES_
|
||||
#define _BIGBOY_TYPES_
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
#endif //_BIGBOY_TYPES_
|
||||
|
||||
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0x00
|
||||
#endif
|
||||
|
||||
#ifndef true
|
||||
#define true 1
|
||||
#endif
|
||||
#ifndef false
|
||||
#define false 0
|
||||
#endif
|
||||
|
||||
#ifndef __SIZE_T_
|
||||
#define __SIZE_T_
|
||||
typedef unsigned int size_t;
|
||||
#endif //__SIZE_T_
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __OPENXDK_ANSIDECL__
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,51 +1,51 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : ctype.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_CTYPE__
|
||||
#define __OPENXDK_CTYPE__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
#define tolower(c) (c>='A' && c<='Z')?c+('a'-'A'):c
|
||||
#define toupper(c) (c>='a' && c<='z')?c+('A'-'a'):c
|
||||
#define isdigit(c) (c>='0' && c<='9')?1:0
|
||||
#define isxdigit(c) (c>='0' && c<='9' || c>='a' && c<='f' || c>='A' && c<='F')?1:0
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __OPENXDK_CTYPE__
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : ctype.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_CTYPE__
|
||||
#define __OPENXDK_CTYPE__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
#define tolower(c) (c>='A' && c<='Z')?c+('a'-'A'):c
|
||||
#define toupper(c) (c>='a' && c<='z')?c+('A'-'a'):c
|
||||
#define isdigit(c) (c>='0' && c<='9')?1:0
|
||||
#define isxdigit(c) (c>='0' && c<='9' || c>='a' && c<='f' || c>='A' && c<='F')?1:0
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __OPENXDK_CTYPE__
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
|
||||
#ifndef __OPENXDK_MALLOC__
|
||||
#define __OPENXDK_MALLOC__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//dummy malloc to make bitmap lib compile :P
|
||||
|
||||
void *malloc(size_t);
|
||||
void free(void *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __OPENXDK_MALLOC__
|
||||
#define __OPENXDK_MALLOC__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//dummy malloc to make bitmap lib compile :P
|
||||
|
||||
void *malloc(size_t);
|
||||
void free(void *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,77 +1,77 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : math.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_MATH__
|
||||
#define __OPENXDK_MATH__
|
||||
|
||||
//here for now
|
||||
#define OPENXDK_UNIMPLEMENTEDC(x) // x are not implemented in C!
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//Double-precision functions
|
||||
|
||||
//trig
|
||||
double sin(double);
|
||||
double cos(double);
|
||||
double tan(double);
|
||||
double asin(double);
|
||||
double acos(double);
|
||||
double atan(double);
|
||||
double atan2(double, double);
|
||||
|
||||
//power
|
||||
double sqrt(double);
|
||||
double pow(double, double); //approx.
|
||||
double exp(double); //approx.
|
||||
double log(double); //approx.
|
||||
double log10(double); //approx
|
||||
double hypot(double, double);
|
||||
|
||||
//rounding
|
||||
double ceil(double);
|
||||
double floor(double);
|
||||
double fmod(double, double);
|
||||
double fabs(double);
|
||||
|
||||
//Single-precision functions
|
||||
|
||||
//trig
|
||||
float sinf(float);
|
||||
float cosf(float);
|
||||
float tanf(float);
|
||||
float asinf(float);
|
||||
float acosf(float);
|
||||
float atanf(float);
|
||||
float atan2f(float, float);
|
||||
|
||||
//power
|
||||
float sqrtf(float);
|
||||
float powf(float, float);//approx.
|
||||
float expf(float);//approx.
|
||||
float logf(float);//approx.
|
||||
float log10f(float);//approx
|
||||
float hypotf(float, float);
|
||||
|
||||
//rounding
|
||||
float ceilf(float);
|
||||
float floorf(float);
|
||||
float fmodf(float, float);
|
||||
float fabsf(float);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif //__OPENXDK_MATH__
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : math.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_MATH__
|
||||
#define __OPENXDK_MATH__
|
||||
|
||||
//here for now
|
||||
#define OPENXDK_UNIMPLEMENTEDC(x) // x are not implemented in C!
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//Double-precision functions
|
||||
|
||||
//trig
|
||||
double sin(double);
|
||||
double cos(double);
|
||||
double tan(double);
|
||||
double asin(double);
|
||||
double acos(double);
|
||||
double atan(double);
|
||||
double atan2(double, double);
|
||||
|
||||
//power
|
||||
double sqrt(double);
|
||||
double pow(double, double); //approx.
|
||||
double exp(double); //approx.
|
||||
double log(double); //approx.
|
||||
double log10(double); //approx
|
||||
double hypot(double, double);
|
||||
|
||||
//rounding
|
||||
double ceil(double);
|
||||
double floor(double);
|
||||
double fmod(double, double);
|
||||
double fabs(double);
|
||||
|
||||
//Single-precision functions
|
||||
|
||||
//trig
|
||||
float sinf(float);
|
||||
float cosf(float);
|
||||
float tanf(float);
|
||||
float asinf(float);
|
||||
float acosf(float);
|
||||
float atanf(float);
|
||||
float atan2f(float, float);
|
||||
|
||||
//power
|
||||
float sqrtf(float);
|
||||
float powf(float, float);//approx.
|
||||
float expf(float);//approx.
|
||||
float logf(float);//approx.
|
||||
float log10f(float);//approx
|
||||
float hypotf(float, float);
|
||||
|
||||
//rounding
|
||||
float ceilf(float);
|
||||
float floorf(float);
|
||||
float fmodf(float, float);
|
||||
float fabsf(float);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif //__OPENXDK_MATH__
|
||||
|
|
|
@ -1,65 +1,65 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : stdarg.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
// a
|
||||
#ifndef __OPENXDK_STDARG__
|
||||
#define __OPENXDK_STDARG__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(push,8)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#ifdef _M_ALPHA
|
||||
typedef struct {
|
||||
char *a0; // pointer to first argument
|
||||
int offset; // byte offset of next arg
|
||||
} va_list;
|
||||
#else
|
||||
typedef char * va_list;
|
||||
#endif
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// GET rid of C4146 compiler warnings: unary minus operator applied to unsigned type, result still unsigned
|
||||
#define NEGU32(a) ((u32) (-((s32)(a))) )
|
||||
|
||||
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + (sizeof(int) - 1)) & NEGU32(sizeof(int)) )
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(pop)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif // __OPENXDK_STDARG__
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : stdarg.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
// a
|
||||
#ifndef __OPENXDK_STDARG__
|
||||
#define __OPENXDK_STDARG__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(push,8)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#ifdef _M_ALPHA
|
||||
typedef struct {
|
||||
char *a0; // pointer to first argument
|
||||
int offset; // byte offset of next arg
|
||||
} va_list;
|
||||
#else
|
||||
typedef char * va_list;
|
||||
#endif
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// GET rid of C4146 compiler warnings: unary minus operator applied to unsigned type, result still unsigned
|
||||
#define NEGU32(a) ((u32) (-((s32)(a))) )
|
||||
|
||||
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + (sizeof(int) - 1)) & NEGU32(sizeof(int)) )
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(pop)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif // __OPENXDK_STDARG__
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,112 +1,112 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : stdio.h
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __STDIO_H__
|
||||
#define __STDIO_H__ 1
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#include <openxdk.h>
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// Low level input/output functions
|
||||
// ******************************************************************
|
||||
|
||||
#define _O_RDONLY (0x00000001)
|
||||
#define _O_WRONLY (0x00000002)
|
||||
#define _O_RDWR (0x00000003)
|
||||
#define _O_NBLOCK (0x00000010)
|
||||
#define _O_APPEND (0x00000100)
|
||||
#define _O_CREAT (0x00000200)
|
||||
#define _O_TRUNC (0x00000400)
|
||||
#define _O_EXCL (0x00000800)
|
||||
#define _O_TEMPORARY (0x00001000)
|
||||
#define _O_TEXT (0x00004000)
|
||||
#define _O_BINARY (0x00008000)
|
||||
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_NBLOCK _O_NBLOCK
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
extern u32 LastErrorCode;
|
||||
|
||||
typedef unsigned int size_t;
|
||||
|
||||
int _open( char *filename, int oflag, int permission );
|
||||
int _read( int handle, void *buffer, unsigned int count );
|
||||
int _write( int handle, void* buffer, unsigned int count );
|
||||
int _close( int handle );
|
||||
int _lseek( int handle, u32 offset, int base );
|
||||
|
||||
//int printf(const char *format, ...);
|
||||
//int vsnprintf( char *buffer, unsigned int count, const char *format, va_list ap );
|
||||
int sprintf(char*, const char *format, ...);
|
||||
int snprintf (char *str, size_t size, const char *format, ...);
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// Standard C file input/output functions
|
||||
// (Which are just wrappers for the low level ones)
|
||||
// ******************************************************************
|
||||
|
||||
#define EOF (-1)
|
||||
|
||||
struct __stdio_file {
|
||||
int fd;
|
||||
int flags;
|
||||
unsigned int bs; /* read: bytes in buffer */
|
||||
unsigned int bm; /* position in buffer */
|
||||
unsigned int buflen; /* length of buf */
|
||||
char *buf;
|
||||
unsigned char ungetbuf;
|
||||
char ungotten;
|
||||
};
|
||||
|
||||
typedef struct __stdio_file FILE;
|
||||
|
||||
|
||||
FILE *fopen(char *path, const char *mode);
|
||||
size_t fread( void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
size_t fwrite( void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
int fclose(FILE *stream);
|
||||
|
||||
int fprintf(FILE *f,const char *format,...);
|
||||
int fseek(FILE *stream, long offset, int whence);
|
||||
long ftell(FILE *stream) ;
|
||||
|
||||
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // __STDIO_H__
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : stdio.h
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __STDIO_H__
|
||||
#define __STDIO_H__ 1
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#include <openxdk.h>
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// Low level input/output functions
|
||||
// ******************************************************************
|
||||
|
||||
#define _O_RDONLY (0x00000001)
|
||||
#define _O_WRONLY (0x00000002)
|
||||
#define _O_RDWR (0x00000003)
|
||||
#define _O_NBLOCK (0x00000010)
|
||||
#define _O_APPEND (0x00000100)
|
||||
#define _O_CREAT (0x00000200)
|
||||
#define _O_TRUNC (0x00000400)
|
||||
#define _O_EXCL (0x00000800)
|
||||
#define _O_TEMPORARY (0x00001000)
|
||||
#define _O_TEXT (0x00004000)
|
||||
#define _O_BINARY (0x00008000)
|
||||
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_NBLOCK _O_NBLOCK
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
extern u32 LastErrorCode;
|
||||
|
||||
typedef unsigned int size_t;
|
||||
|
||||
int _open( char *filename, int oflag, int permission );
|
||||
int _read( int handle, void *buffer, unsigned int count );
|
||||
int _write( int handle, void* buffer, unsigned int count );
|
||||
int _close( int handle );
|
||||
int _lseek( int handle, u32 offset, int base );
|
||||
|
||||
//int printf(const char *format, ...);
|
||||
//int vsnprintf( char *buffer, unsigned int count, const char *format, va_list ap );
|
||||
int sprintf(char*, const char *format, ...);
|
||||
int snprintf (char *str, size_t size, const char *format, ...);
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// Standard C file input/output functions
|
||||
// (Which are just wrappers for the low level ones)
|
||||
// ******************************************************************
|
||||
|
||||
#define EOF (-1)
|
||||
|
||||
struct __stdio_file {
|
||||
int fd;
|
||||
int flags;
|
||||
unsigned int bs; /* read: bytes in buffer */
|
||||
unsigned int bm; /* position in buffer */
|
||||
unsigned int buflen; /* length of buf */
|
||||
char *buf;
|
||||
unsigned char ungetbuf;
|
||||
char ungotten;
|
||||
};
|
||||
|
||||
typedef struct __stdio_file FILE;
|
||||
|
||||
|
||||
FILE *fopen(char *path, const char *mode);
|
||||
size_t fread( void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
size_t fwrite( void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
int fclose(FILE *stream);
|
||||
|
||||
int fprintf(FILE *f,const char *format,...);
|
||||
int fseek(FILE *stream, long offset, int whence);
|
||||
long ftell(FILE *stream) ;
|
||||
|
||||
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // __STDIO_H__
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,72 +1,72 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : stdlib.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_STDLIB__
|
||||
#define __OPENXDK_STDLIB__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Defines etc.
|
||||
//
|
||||
// *****************************************************************************
|
||||
// we could just as well use any other randmax 2^x-1 but this seems to be the standard
|
||||
#define RAND_MAX 32767
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
|
||||
typedef struct Sdiv_t{ // div structure
|
||||
int quot;
|
||||
int rem;
|
||||
} div_t;
|
||||
|
||||
|
||||
typedef struct Sldiv_t{ // ldiv structure
|
||||
long int quot;
|
||||
long int rem;
|
||||
} ldiv_t;
|
||||
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
// *****************************************************************************
|
||||
int abs( int i );
|
||||
void abort( void );
|
||||
div_t div( int number, int divisor );
|
||||
ldiv_t ldiv( long int number, long int divisor );
|
||||
char* itoa( int value, char *string, int radix );
|
||||
char* ltoa( long value, char *string, int radix );
|
||||
int rand( void );
|
||||
void srand( unsigned int );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif //__OPENXDK_STDLIB__
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : stdlib.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_STDLIB__
|
||||
#define __OPENXDK_STDLIB__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Defines etc.
|
||||
//
|
||||
// *****************************************************************************
|
||||
// we could just as well use any other randmax 2^x-1 but this seems to be the standard
|
||||
#define RAND_MAX 32767
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
|
||||
typedef struct Sdiv_t{ // div structure
|
||||
int quot;
|
||||
int rem;
|
||||
} div_t;
|
||||
|
||||
|
||||
typedef struct Sldiv_t{ // ldiv structure
|
||||
long int quot;
|
||||
long int rem;
|
||||
} ldiv_t;
|
||||
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
// *****************************************************************************
|
||||
int abs( int i );
|
||||
void abort( void );
|
||||
div_t div( int number, int divisor );
|
||||
ldiv_t ldiv( long int number, long int divisor );
|
||||
char* itoa( int value, char *string, int radix );
|
||||
char* ltoa( long value, char *string, int radix );
|
||||
int rand( void );
|
||||
void srand( unsigned int );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif //__OPENXDK_STDLIB__
|
||||
|
||||
|
||||
|
|
|
@ -1,56 +1,56 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : string.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_STRING__
|
||||
#define __OPENXDK_STRING__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
// *****************************************************************************
|
||||
char* strcat( char *dest, const char *src );
|
||||
char* strncpy( char *dest, const char *src, unsigned int count );
|
||||
char* strcpy( char *dest, const char *src );
|
||||
size_t strlen( const char *string );
|
||||
void* memcpy( void *dest, const void *src, int count );
|
||||
void* memccpy( void *dest, const void *src, int c, unsigned int count );
|
||||
int memcmp( const void *buff1, const void *buff2, size_t count );
|
||||
void *memset( void *Dest, int fill, size_t length );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#endif // __OPENXDK_STRING__
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : openLIBC
|
||||
// *
|
||||
// * desc : Totally Free LIC replacement
|
||||
// *
|
||||
// * file : string.h
|
||||
// *
|
||||
// * note : This LIBC is TOTALLY free - do what you like with it!!
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef __OPENXDK_STRING__
|
||||
#define __OPENXDK_STRING__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Structures
|
||||
//
|
||||
// *****************************************************************************
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
// *****************************************************************************
|
||||
char* strcat( char *dest, const char *src );
|
||||
char* strncpy( char *dest, const char *src, unsigned int count );
|
||||
char* strcpy( char *dest, const char *src );
|
||||
size_t strlen( const char *string );
|
||||
void* memcpy( void *dest, const void *src, int count );
|
||||
void* memccpy( void *dest, const void *src, int c, unsigned int count );
|
||||
int memcmp( const void *buff1, const void *buff2, size_t count );
|
||||
void *memset( void *Dest, int fill, size_t length );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#endif // __OPENXDK_STRING__
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,479 +1,479 @@
|
|||
#ifndef _I386_BITOPS_H
|
||||
#define _I386_BITOPS_H
|
||||
|
||||
/*
|
||||
* Copyright 1992, Linus Torvalds.
|
||||
*/
|
||||
|
||||
// #include <linux/config.h>
|
||||
|
||||
/*
|
||||
* These have to be done with inline assembly: that way the bit-setting
|
||||
* is guaranteed to be atomic. All bit operations return 0 if the bit
|
||||
* was cleared before the operation and != 0 if it was not.
|
||||
*
|
||||
* bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define LOCK_PREFIX "lock ; "
|
||||
#else
|
||||
#define LOCK_PREFIX ""
|
||||
#endif
|
||||
|
||||
#define ADDR (*(volatile long *) addr)
|
||||
|
||||
/**
|
||||
* set_bit - Atomically set a bit in memory
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to start counting from
|
||||
*
|
||||
* This function is atomic and may not be reordered. See __set_bit()
|
||||
* if you do not require the atomic guarantees.
|
||||
* Note that @nr may be almost arbitrarily large; this function is not
|
||||
* restricted to acting on a single-word quantity.
|
||||
*/
|
||||
/*static __inline__ void set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm__ __volatile__( LOCK_PREFIX
|
||||
"btsl %1,%0"
|
||||
:"=m" (ADDR)
|
||||
:"Ir" (nr));
|
||||
}
|
||||
*/
|
||||
|
||||
static __inline void set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* __set_bit - Set a bit in memory
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to start counting from
|
||||
*
|
||||
* Unlike set_bit(), this function is non-atomic and may be reordered.
|
||||
* If it's called on the same region of memory simultaneously, the effect
|
||||
* may be that only one operation succeeds.
|
||||
*/
|
||||
static __inline void __set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clear_bit - Clears a bit in memory
|
||||
* @nr: Bit to clear
|
||||
* @addr: Address to start counting from
|
||||
*
|
||||
* clear_bit() is atomic and may not be reordered. However, it does
|
||||
* not contain a memory barrier, so if it is used for locking purposes,
|
||||
* you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
|
||||
* in order to ensure changes are visible on other processors.
|
||||
*/
|
||||
static __inline void clear_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btr [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
#define smp_mb__before_clear_bit() barrier()
|
||||
#define smp_mb__after_clear_bit() barrier()
|
||||
|
||||
/**
|
||||
* __change_bit - Toggle a bit in memory
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to start counting from
|
||||
*
|
||||
* Unlike change_bit(), this function is non-atomic and may be reordered.
|
||||
* If it's called on the same region of memory simultaneously, the effect
|
||||
* may be that only one operation succeeds.
|
||||
*/
|
||||
static __inline void __change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* change_bit - Toggle a bit in memory
|
||||
* @nr: Bit to clear
|
||||
* @addr: Address to start counting from
|
||||
*
|
||||
* change_bit() is atomic and may not be reordered.
|
||||
* Note that @nr may be almost arbitrarily large; this function is not
|
||||
* restricted to acting on a single-word quantity.
|
||||
*/
|
||||
static __inline void change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* test_and_set_bit - Set a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is atomic and cannot be reordered.
|
||||
* It also implies a memory barrier.
|
||||
*/
|
||||
static __inline int test_and_set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/* __asm__ __volatile__( LOCK_PREFIX
|
||||
"btsl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");
|
||||
*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* __test_and_set_bit - Set a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is non-atomic and can be reordered.
|
||||
* If two examples of this operation race, one can appear to succeed
|
||||
* but actually fail. You must protect multiple accesses with a lock.
|
||||
*/
|
||||
static __inline int __test_and_set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*__asm__(
|
||||
"btsl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr));*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* test_and_clear_bit - Clear a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is atomic and cannot be reordered.
|
||||
* It also implies a memory barrier.
|
||||
*/
|
||||
static __inline int test_and_clear_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btr [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__( LOCK_PREFIX
|
||||
"btrl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");
|
||||
*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* __test_and_clear_bit - Clear a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is non-atomic and can be reordered.
|
||||
* If two examples of this operation race, one can appear to succeed
|
||||
* but actually fail. You must protect multiple accesses with a lock.
|
||||
*/
|
||||
static __inline int __test_and_clear_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btr [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__(
|
||||
"btrl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr));
|
||||
*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/* WARNING: non atomic and it can be reordered! */
|
||||
static __inline int __test_and_change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__(
|
||||
"btcl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* test_and_change_bit - Change a bit and return its new value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is atomic and cannot be reordered.
|
||||
* It also implies a memory barrier.
|
||||
*/
|
||||
static __inline int test_and_change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__( LOCK_PREFIX
|
||||
"btcl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
#if 0 /* Fool kernel-doc since it doesn't do macros yet */
|
||||
/**
|
||||
* test_bit - Determine whether a bit is set
|
||||
* @nr: bit number to test
|
||||
* @addr: Address to start counting from
|
||||
*/
|
||||
static int test_bit(int nr, const volatile void * addr);
|
||||
#endif
|
||||
|
||||
static __inline int constant_test_bit(int nr, const volatile void * addr)
|
||||
{
|
||||
return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
|
||||
}
|
||||
|
||||
static __inline int variable_test_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bt [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__(
|
||||
"btl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit)
|
||||
:"m" (ADDR),"Ir" (nr));*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
#define test_bit(nr,addr) \
|
||||
(__builtin_constant_p(nr) ? \
|
||||
constant_test_bit((nr),(addr)) : \
|
||||
variable_test_bit((nr),(addr)))
|
||||
|
||||
/**
|
||||
* find_first_zero_bit - find the first zero bit in a memory region
|
||||
* @addr: The address to start the search at
|
||||
* @size: The maximum size to search
|
||||
*
|
||||
* Returns the bit-number of the first zero bit, not the number of the byte
|
||||
* containing a bit.
|
||||
*/
|
||||
#if 0
|
||||
static __inline int find_first_zero_bit(void * addr, unsigned size)
|
||||
{
|
||||
int d0, d1, d2;
|
||||
int res;
|
||||
|
||||
if (!size)
|
||||
return 0;
|
||||
/* This looks at memory. Mark it volatile to tell gcc not to move it around */
|
||||
__asm__ __volatile__(
|
||||
"movl $-1,%%eax\n\t"
|
||||
"xorl %%edx,%%edx\n\t"
|
||||
"repe; scasl\n\t"
|
||||
"je 1f\n\t"
|
||||
"xorl -4(%%edi),%%eax\n\t"
|
||||
"subl $4,%%edi\n\t"
|
||||
"bsfl %%eax,%%edx\n"
|
||||
"1:\tsubl %%ebx,%%edi\n\t"
|
||||
"shll $3,%%edi\n\t"
|
||||
"addl %%edi,%%edx"
|
||||
:"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2)
|
||||
:"1" ((size + 31) >> 5), "2" (addr), "b" (addr));
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* find_next_zero_bit - find the first zero bit in a memory region
|
||||
* @addr: The address to base the search on
|
||||
* @offset: The bitnumber to start searching at
|
||||
* @size: The maximum size to search
|
||||
*/
|
||||
#if 0
|
||||
static __inline__ int find_next_zero_bit (void * addr, int size, int offset)
|
||||
{
|
||||
unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
|
||||
int set = 0, bit = offset & 31, res;
|
||||
|
||||
if (bit) {
|
||||
/*
|
||||
* Look for zero in first byte
|
||||
*/
|
||||
__asm__("bsfl %1,%0\n\t"
|
||||
"jne 1f\n\t"
|
||||
"movl $32, %0\n"
|
||||
"1:"
|
||||
: "=r" (set)
|
||||
: "r" (~(*p >> bit)));
|
||||
if (set < (32 - bit))
|
||||
return set + offset;
|
||||
set = 32 - bit;
|
||||
p++;
|
||||
}
|
||||
/*
|
||||
* No zero yet, search remaining full bytes for a zero
|
||||
*/
|
||||
res = find_first_zero_bit (p, size - 32 * (p - (unsigned long *) addr));
|
||||
return (offset + set + res);
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* ffz - find first zero in word.
|
||||
* @word: The word to search
|
||||
*
|
||||
* Undefined if no zero exists, so code should check against ~0UL first.
|
||||
*/
|
||||
static __inline unsigned long ffz(unsigned long DWordValue )
|
||||
{
|
||||
unsigned long OutputData;
|
||||
__asm
|
||||
{
|
||||
xor eax, eax
|
||||
mov ebx, DWordValue
|
||||
lock bsf eax, ebx
|
||||
mov OutputData,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/* __asm__("bsfl %1,%0"
|
||||
:"=r" (word)
|
||||
:"r" (~word));*/
|
||||
return OutputData;
|
||||
}
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/**
|
||||
* ffs - find first bit set
|
||||
* @x: the word to search
|
||||
*
|
||||
* This is defined the same way as
|
||||
* the libc and compiler builtin ffs routines, therefore
|
||||
* differs in spirit from the above ffz (man ffs).
|
||||
*/
|
||||
static __inline__ int ffs(int x)
|
||||
{
|
||||
int r;
|
||||
|
||||
__asm__("bsfl %1,%0\n\t"
|
||||
"jnz 1f\n\t"
|
||||
"movl $-1,%0\n"
|
||||
"1:" : "=r" (r) : "rm" (x));
|
||||
return r+1;
|
||||
}
|
||||
|
||||
/**
|
||||
* hweightN - returns the hamming weight of a N-bit word
|
||||
* @x: the word to weigh
|
||||
*
|
||||
* The Hamming Weight of a number is the total number of bits set in it.
|
||||
*/
|
||||
|
||||
#define hweight32(x) generic_hweight32(x)
|
||||
#define hweight16(x) generic_hweight16(x)
|
||||
#define hweight8(x) generic_hweight8(x)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define ext2_set_bit __test_and_set_bit
|
||||
#define ext2_clear_bit __test_and_clear_bit
|
||||
#define ext2_test_bit test_bit
|
||||
#define ext2_find_first_zero_bit find_first_zero_bit
|
||||
#define ext2_find_next_zero_bit find_next_zero_bit
|
||||
|
||||
/* Bitmap functions for the minix filesystem. */
|
||||
#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,addr)
|
||||
#define minix_set_bit(nr,addr) __set_bit(nr,addr)
|
||||
#define minix_test_and_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
|
||||
#define minix_test_bit(nr,addr) test_bit(nr,addr)
|
||||
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _I386_BITOPS_H */
|
||||
#ifndef _I386_BITOPS_H
|
||||
#define _I386_BITOPS_H
|
||||
|
||||
/*
|
||||
* Copyright 1992, Linus Torvalds.
|
||||
*/
|
||||
|
||||
// #include <linux/config.h>
|
||||
|
||||
/*
|
||||
* These have to be done with inline assembly: that way the bit-setting
|
||||
* is guaranteed to be atomic. All bit operations return 0 if the bit
|
||||
* was cleared before the operation and != 0 if it was not.
|
||||
*
|
||||
* bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define LOCK_PREFIX "lock ; "
|
||||
#else
|
||||
#define LOCK_PREFIX ""
|
||||
#endif
|
||||
|
||||
#define ADDR (*(volatile long *) addr)
|
||||
|
||||
/**
|
||||
* set_bit - Atomically set a bit in memory
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to start counting from
|
||||
*
|
||||
* This function is atomic and may not be reordered. See __set_bit()
|
||||
* if you do not require the atomic guarantees.
|
||||
* Note that @nr may be almost arbitrarily large; this function is not
|
||||
* restricted to acting on a single-word quantity.
|
||||
*/
|
||||
/*static __inline__ void set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm__ __volatile__( LOCK_PREFIX
|
||||
"btsl %1,%0"
|
||||
:"=m" (ADDR)
|
||||
:"Ir" (nr));
|
||||
}
|
||||
*/
|
||||
|
||||
static __inline void set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* __set_bit - Set a bit in memory
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to start counting from
|
||||
*
|
||||
* Unlike set_bit(), this function is non-atomic and may be reordered.
|
||||
* If it's called on the same region of memory simultaneously, the effect
|
||||
* may be that only one operation succeeds.
|
||||
*/
|
||||
static __inline void __set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clear_bit - Clears a bit in memory
|
||||
* @nr: Bit to clear
|
||||
* @addr: Address to start counting from
|
||||
*
|
||||
* clear_bit() is atomic and may not be reordered. However, it does
|
||||
* not contain a memory barrier, so if it is used for locking purposes,
|
||||
* you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
|
||||
* in order to ensure changes are visible on other processors.
|
||||
*/
|
||||
static __inline void clear_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btr [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
#define smp_mb__before_clear_bit() barrier()
|
||||
#define smp_mb__after_clear_bit() barrier()
|
||||
|
||||
/**
|
||||
* __change_bit - Toggle a bit in memory
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to start counting from
|
||||
*
|
||||
* Unlike change_bit(), this function is non-atomic and may be reordered.
|
||||
* If it's called on the same region of memory simultaneously, the effect
|
||||
* may be that only one operation succeeds.
|
||||
*/
|
||||
static __inline void __change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* change_bit - Toggle a bit in memory
|
||||
* @nr: Bit to clear
|
||||
* @addr: Address to start counting from
|
||||
*
|
||||
* change_bit() is atomic and may not be reordered.
|
||||
* Note that @nr may be almost arbitrarily large; this function is not
|
||||
* restricted to acting on a single-word quantity.
|
||||
*/
|
||||
static __inline void change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* test_and_set_bit - Set a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is atomic and cannot be reordered.
|
||||
* It also implies a memory barrier.
|
||||
*/
|
||||
static __inline int test_and_set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/* __asm__ __volatile__( LOCK_PREFIX
|
||||
"btsl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");
|
||||
*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* __test_and_set_bit - Set a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is non-atomic and can be reordered.
|
||||
* If two examples of this operation race, one can appear to succeed
|
||||
* but actually fail. You must protect multiple accesses with a lock.
|
||||
*/
|
||||
static __inline int __test_and_set_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bts [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*__asm__(
|
||||
"btsl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr));*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* test_and_clear_bit - Clear a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is atomic and cannot be reordered.
|
||||
* It also implies a memory barrier.
|
||||
*/
|
||||
static __inline int test_and_clear_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btr [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__( LOCK_PREFIX
|
||||
"btrl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");
|
||||
*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* __test_and_clear_bit - Clear a bit and return its old value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is non-atomic and can be reordered.
|
||||
* If two examples of this operation race, one can appear to succeed
|
||||
* but actually fail. You must protect multiple accesses with a lock.
|
||||
*/
|
||||
static __inline int __test_and_clear_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btr [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__(
|
||||
"btrl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr));
|
||||
*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/* WARNING: non atomic and it can be reordered! */
|
||||
static __inline int __test_and_change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__(
|
||||
"btcl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* test_and_change_bit - Change a bit and return its new value
|
||||
* @nr: Bit to set
|
||||
* @addr: Address to count from
|
||||
*
|
||||
* This operation is atomic and cannot be reordered.
|
||||
* It also implies a memory barrier.
|
||||
*/
|
||||
static __inline int test_and_change_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock btc [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__( LOCK_PREFIX
|
||||
"btcl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit),"=m" (ADDR)
|
||||
:"Ir" (nr) : "memory");*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
#if 0 /* Fool kernel-doc since it doesn't do macros yet */
|
||||
/**
|
||||
* test_bit - Determine whether a bit is set
|
||||
* @nr: bit number to test
|
||||
* @addr: Address to start counting from
|
||||
*/
|
||||
static int test_bit(int nr, const volatile void * addr);
|
||||
#endif
|
||||
|
||||
static __inline int constant_test_bit(int nr, const volatile void * addr)
|
||||
{
|
||||
return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
|
||||
}
|
||||
|
||||
static __inline int variable_test_bit(int nr, volatile void * addr)
|
||||
{
|
||||
int oldbit;
|
||||
__asm
|
||||
{
|
||||
mov eax, nr
|
||||
mov ebx, addr
|
||||
lock bt [ebx], eax
|
||||
sbb eax, eax // result into eax
|
||||
mov oldbit,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/*
|
||||
__asm__ __volatile__(
|
||||
"btl %2,%1\n\tsbbl %0,%0"
|
||||
:"=r" (oldbit)
|
||||
:"m" (ADDR),"Ir" (nr));*/
|
||||
return oldbit;
|
||||
}
|
||||
|
||||
#define test_bit(nr,addr) \
|
||||
(__builtin_constant_p(nr) ? \
|
||||
constant_test_bit((nr),(addr)) : \
|
||||
variable_test_bit((nr),(addr)))
|
||||
|
||||
/**
|
||||
* find_first_zero_bit - find the first zero bit in a memory region
|
||||
* @addr: The address to start the search at
|
||||
* @size: The maximum size to search
|
||||
*
|
||||
* Returns the bit-number of the first zero bit, not the number of the byte
|
||||
* containing a bit.
|
||||
*/
|
||||
#if 0
|
||||
static __inline int find_first_zero_bit(void * addr, unsigned size)
|
||||
{
|
||||
int d0, d1, d2;
|
||||
int res;
|
||||
|
||||
if (!size)
|
||||
return 0;
|
||||
/* This looks at memory. Mark it volatile to tell gcc not to move it around */
|
||||
__asm__ __volatile__(
|
||||
"movl $-1,%%eax\n\t"
|
||||
"xorl %%edx,%%edx\n\t"
|
||||
"repe; scasl\n\t"
|
||||
"je 1f\n\t"
|
||||
"xorl -4(%%edi),%%eax\n\t"
|
||||
"subl $4,%%edi\n\t"
|
||||
"bsfl %%eax,%%edx\n"
|
||||
"1:\tsubl %%ebx,%%edi\n\t"
|
||||
"shll $3,%%edi\n\t"
|
||||
"addl %%edi,%%edx"
|
||||
:"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2)
|
||||
:"1" ((size + 31) >> 5), "2" (addr), "b" (addr));
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* find_next_zero_bit - find the first zero bit in a memory region
|
||||
* @addr: The address to base the search on
|
||||
* @offset: The bitnumber to start searching at
|
||||
* @size: The maximum size to search
|
||||
*/
|
||||
#if 0
|
||||
static __inline__ int find_next_zero_bit (void * addr, int size, int offset)
|
||||
{
|
||||
unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
|
||||
int set = 0, bit = offset & 31, res;
|
||||
|
||||
if (bit) {
|
||||
/*
|
||||
* Look for zero in first byte
|
||||
*/
|
||||
__asm__("bsfl %1,%0\n\t"
|
||||
"jne 1f\n\t"
|
||||
"movl $32, %0\n"
|
||||
"1:"
|
||||
: "=r" (set)
|
||||
: "r" (~(*p >> bit)));
|
||||
if (set < (32 - bit))
|
||||
return set + offset;
|
||||
set = 32 - bit;
|
||||
p++;
|
||||
}
|
||||
/*
|
||||
* No zero yet, search remaining full bytes for a zero
|
||||
*/
|
||||
res = find_first_zero_bit (p, size - 32 * (p - (unsigned long *) addr));
|
||||
return (offset + set + res);
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* ffz - find first zero in word.
|
||||
* @word: The word to search
|
||||
*
|
||||
* Undefined if no zero exists, so code should check against ~0UL first.
|
||||
*/
|
||||
static __inline unsigned long ffz(unsigned long DWordValue )
|
||||
{
|
||||
unsigned long OutputData;
|
||||
__asm
|
||||
{
|
||||
xor eax, eax
|
||||
mov ebx, DWordValue
|
||||
lock bsf eax, ebx
|
||||
mov OutputData,eax // store in oldbit for returning (0 or 1)
|
||||
}
|
||||
/* __asm__("bsfl %1,%0"
|
||||
:"=r" (word)
|
||||
:"r" (~word));*/
|
||||
return OutputData;
|
||||
}
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/**
|
||||
* ffs - find first bit set
|
||||
* @x: the word to search
|
||||
*
|
||||
* This is defined the same way as
|
||||
* the libc and compiler builtin ffs routines, therefore
|
||||
* differs in spirit from the above ffz (man ffs).
|
||||
*/
|
||||
static __inline__ int ffs(int x)
|
||||
{
|
||||
int r;
|
||||
|
||||
__asm__("bsfl %1,%0\n\t"
|
||||
"jnz 1f\n\t"
|
||||
"movl $-1,%0\n"
|
||||
"1:" : "=r" (r) : "rm" (x));
|
||||
return r+1;
|
||||
}
|
||||
|
||||
/**
|
||||
* hweightN - returns the hamming weight of a N-bit word
|
||||
* @x: the word to weigh
|
||||
*
|
||||
* The Hamming Weight of a number is the total number of bits set in it.
|
||||
*/
|
||||
|
||||
#define hweight32(x) generic_hweight32(x)
|
||||
#define hweight16(x) generic_hweight16(x)
|
||||
#define hweight8(x) generic_hweight8(x)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define ext2_set_bit __test_and_set_bit
|
||||
#define ext2_clear_bit __test_and_clear_bit
|
||||
#define ext2_test_bit test_bit
|
||||
#define ext2_find_first_zero_bit find_first_zero_bit
|
||||
#define ext2_find_next_zero_bit find_next_zero_bit
|
||||
|
||||
/* Bitmap functions for the minix filesystem. */
|
||||
#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,addr)
|
||||
#define minix_set_bit(nr,addr) __set_bit(nr,addr)
|
||||
#define minix_test_and_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
|
||||
#define minix_test_bit(nr,addr) test_bit(nr,addr)
|
||||
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _I386_BITOPS_H */
|
||||
|
|
|
@ -1,132 +1,132 @@
|
|||
#ifndef _I386_ERRNO_H
|
||||
#define _I386_ERRNO_H
|
||||
|
||||
#define EPERM 1 /* Operation not permitted */
|
||||
#define ENOENT 2 /* No such file or directory */
|
||||
#define ESRCH 3 /* No such process */
|
||||
#define EINTR 4 /* Interrupted system call */
|
||||
#define EIO 5 /* I/O error */
|
||||
#define ENXIO 6 /* No such device or address */
|
||||
#define E2BIG 7 /* Argument list too long */
|
||||
#define ENOEXEC 8 /* Exec format error */
|
||||
#define EBADF 9 /* Bad file number */
|
||||
#define ECHILD 10 /* No child processes */
|
||||
#define EAGAIN 11 /* Try again */
|
||||
#define ENOMEM 12 /* Out of memory */
|
||||
#define EACCES 13 /* Permission denied */
|
||||
#define EFAULT 14 /* Bad address */
|
||||
#define ENOTBLK 15 /* Block device required */
|
||||
#define EBUSY 16 /* Device or resource busy */
|
||||
#define EEXIST 17 /* File exists */
|
||||
#define EXDEV 18 /* Cross-device link */
|
||||
#define ENODEV 19 /* No such device */
|
||||
#define ENOTDIR 20 /* Not a directory */
|
||||
#define EISDIR 21 /* Is a directory */
|
||||
#define EINVAL 22 /* Invalid argument */
|
||||
#define ENFILE 23 /* File table overflow */
|
||||
#define EMFILE 24 /* Too many open files */
|
||||
#define ENOTTY 25 /* Not a typewriter */
|
||||
#define ETXTBSY 26 /* Text file busy */
|
||||
#define EFBIG 27 /* File too large */
|
||||
#define ENOSPC 28 /* No space left on device */
|
||||
#define ESPIPE 29 /* Illegal seek */
|
||||
#define EROFS 30 /* Read-only file system */
|
||||
#define EMLINK 31 /* Too many links */
|
||||
#define EPIPE 32 /* Broken pipe */
|
||||
#define EDOM 33 /* Math argument out of domain of func */
|
||||
#define ERANGE 34 /* Math result not representable */
|
||||
#define EDEADLK 35 /* Resource deadlock would occur */
|
||||
#define ENAMETOOLONG 36 /* File name too long */
|
||||
#define ENOLCK 37 /* No record locks available */
|
||||
#define ENOSYS 38 /* Function not implemented */
|
||||
#define ENOTEMPTY 39 /* Directory not empty */
|
||||
#define ELOOP 40 /* Too many symbolic links encountered */
|
||||
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||
#define ENOMSG 42 /* No message of desired type */
|
||||
#define EIDRM 43 /* Identifier removed */
|
||||
#define ECHRNG 44 /* Channel number out of range */
|
||||
#define EL2NSYNC 45 /* Level 2 not synchronized */
|
||||
#define EL3HLT 46 /* Level 3 halted */
|
||||
#define EL3RST 47 /* Level 3 reset */
|
||||
#define ELNRNG 48 /* Link number out of range */
|
||||
#define EUNATCH 49 /* Protocol driver not attached */
|
||||
#define ENOCSI 50 /* No CSI structure available */
|
||||
#define EL2HLT 51 /* Level 2 halted */
|
||||
#define EBADE 52 /* Invalid exchange */
|
||||
#define EBADR 53 /* Invalid request descriptor */
|
||||
#define EXFULL 54 /* Exchange full */
|
||||
#define ENOANO 55 /* No anode */
|
||||
#define EBADRQC 56 /* Invalid request code */
|
||||
#define EBADSLT 57 /* Invalid slot */
|
||||
|
||||
#define EDEADLOCK EDEADLK
|
||||
|
||||
#define EBFONT 59 /* Bad font file format */
|
||||
#define ENOSTR 60 /* Device not a stream */
|
||||
#define ENODATA 61 /* No data available */
|
||||
#define ETIME 62 /* Timer expired */
|
||||
#define ENOSR 63 /* Out of streams resources */
|
||||
#define ENONET 64 /* Machine is not on the network */
|
||||
#define ENOPKG 65 /* Package not installed */
|
||||
#define EREMOTE 66 /* Object is remote */
|
||||
#define ENOLINK 67 /* Link has been severed */
|
||||
#define EADV 68 /* Advertise error */
|
||||
#define ESRMNT 69 /* Srmount error */
|
||||
#define ECOMM 70 /* Communication error on send */
|
||||
#define EPROTO 71 /* Protocol error */
|
||||
#define EMULTIHOP 72 /* Multihop attempted */
|
||||
#define EDOTDOT 73 /* RFS specific error */
|
||||
#define EBADMSG 74 /* Not a data message */
|
||||
#define EOVERFLOW 75 /* Value too large for defined data type */
|
||||
#define ENOTUNIQ 76 /* Name not unique on network */
|
||||
#define EBADFD 77 /* File descriptor in bad state */
|
||||
#define EREMCHG 78 /* Remote address changed */
|
||||
#define ELIBACC 79 /* Can not access a needed shared library */
|
||||
#define ELIBBAD 80 /* Accessing a corrupted shared library */
|
||||
#define ELIBSCN 81 /* .lib section in a.out corrupted */
|
||||
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
|
||||
#define ELIBEXEC 83 /* Cannot exec a shared library directly */
|
||||
#define EILSEQ 84 /* Illegal byte sequence */
|
||||
#define ERESTART 85 /* Interrupted system call should be restarted */
|
||||
#define ESTRPIPE 86 /* Streams pipe error */
|
||||
#define EUSERS 87 /* Too many users */
|
||||
#define ENOTSOCK 88 /* Socket operation on non-socket */
|
||||
#define EDESTADDRREQ 89 /* Destination address required */
|
||||
#define EMSGSIZE 90 /* Message too long */
|
||||
#define EPROTOTYPE 91 /* Protocol wrong type for socket */
|
||||
#define ENOPROTOOPT 92 /* Protocol not available */
|
||||
#define EPROTONOSUPPORT 93 /* Protocol not supported */
|
||||
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
|
||||
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
|
||||
#define EPFNOSUPPORT 96 /* Protocol family not supported */
|
||||
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
|
||||
#define EADDRINUSE 98 /* Address already in use */
|
||||
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
|
||||
#define ENETDOWN 100 /* Network is down */
|
||||
#define ENETUNREACH 101 /* Network is unreachable */
|
||||
#define ENETRESET 102 /* Network dropped connection because of reset */
|
||||
#define ECONNABORTED 103 /* Software caused connection abort */
|
||||
#define ECONNRESET 104 /* Connection reset by peer */
|
||||
#define ENOBUFS 105 /* No buffer space available */
|
||||
#define EISCONN 106 /* Transport endpoint is already connected */
|
||||
#define ENOTCONN 107 /* Transport endpoint is not connected */
|
||||
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
|
||||
#define ETOOMANYREFS 109 /* Too many references: cannot splice */
|
||||
#define ETIMEDOUT 110 /* Connection timed out */
|
||||
#define ECONNREFUSED 111 /* Connection refused */
|
||||
#define EHOSTDOWN 112 /* Host is down */
|
||||
#define EHOSTUNREACH 113 /* No route to host */
|
||||
#define EALREADY 114 /* Operation already in progress */
|
||||
#define EINPROGRESS 115 /* Operation now in progress */
|
||||
#define ESTALE 116 /* Stale NFS file handle */
|
||||
#define EUCLEAN 117 /* Structure needs cleaning */
|
||||
#define ENOTNAM 118 /* Not a XENIX named type file */
|
||||
#define ENAVAIL 119 /* No XENIX semaphores available */
|
||||
#define EISNAM 120 /* Is a named type file */
|
||||
#define EREMOTEIO 121 /* Remote I/O error */
|
||||
#define EDQUOT 122 /* Quota exceeded */
|
||||
|
||||
#define ENOMEDIUM 123 /* No medium found */
|
||||
#define EMEDIUMTYPE 124 /* Wrong medium type */
|
||||
|
||||
#endif
|
||||
#ifndef _I386_ERRNO_H
|
||||
#define _I386_ERRNO_H
|
||||
|
||||
#define EPERM 1 /* Operation not permitted */
|
||||
#define ENOENT 2 /* No such file or directory */
|
||||
#define ESRCH 3 /* No such process */
|
||||
#define EINTR 4 /* Interrupted system call */
|
||||
#define EIO 5 /* I/O error */
|
||||
#define ENXIO 6 /* No such device or address */
|
||||
#define E2BIG 7 /* Argument list too long */
|
||||
#define ENOEXEC 8 /* Exec format error */
|
||||
#define EBADF 9 /* Bad file number */
|
||||
#define ECHILD 10 /* No child processes */
|
||||
#define EAGAIN 11 /* Try again */
|
||||
#define ENOMEM 12 /* Out of memory */
|
||||
#define EACCES 13 /* Permission denied */
|
||||
#define EFAULT 14 /* Bad address */
|
||||
#define ENOTBLK 15 /* Block device required */
|
||||
#define EBUSY 16 /* Device or resource busy */
|
||||
#define EEXIST 17 /* File exists */
|
||||
#define EXDEV 18 /* Cross-device link */
|
||||
#define ENODEV 19 /* No such device */
|
||||
#define ENOTDIR 20 /* Not a directory */
|
||||
#define EISDIR 21 /* Is a directory */
|
||||
#define EINVAL 22 /* Invalid argument */
|
||||
#define ENFILE 23 /* File table overflow */
|
||||
#define EMFILE 24 /* Too many open files */
|
||||
#define ENOTTY 25 /* Not a typewriter */
|
||||
#define ETXTBSY 26 /* Text file busy */
|
||||
#define EFBIG 27 /* File too large */
|
||||
#define ENOSPC 28 /* No space left on device */
|
||||
#define ESPIPE 29 /* Illegal seek */
|
||||
#define EROFS 30 /* Read-only file system */
|
||||
#define EMLINK 31 /* Too many links */
|
||||
#define EPIPE 32 /* Broken pipe */
|
||||
#define EDOM 33 /* Math argument out of domain of func */
|
||||
#define ERANGE 34 /* Math result not representable */
|
||||
#define EDEADLK 35 /* Resource deadlock would occur */
|
||||
#define ENAMETOOLONG 36 /* File name too long */
|
||||
#define ENOLCK 37 /* No record locks available */
|
||||
#define ENOSYS 38 /* Function not implemented */
|
||||
#define ENOTEMPTY 39 /* Directory not empty */
|
||||
#define ELOOP 40 /* Too many symbolic links encountered */
|
||||
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||
#define ENOMSG 42 /* No message of desired type */
|
||||
#define EIDRM 43 /* Identifier removed */
|
||||
#define ECHRNG 44 /* Channel number out of range */
|
||||
#define EL2NSYNC 45 /* Level 2 not synchronized */
|
||||
#define EL3HLT 46 /* Level 3 halted */
|
||||
#define EL3RST 47 /* Level 3 reset */
|
||||
#define ELNRNG 48 /* Link number out of range */
|
||||
#define EUNATCH 49 /* Protocol driver not attached */
|
||||
#define ENOCSI 50 /* No CSI structure available */
|
||||
#define EL2HLT 51 /* Level 2 halted */
|
||||
#define EBADE 52 /* Invalid exchange */
|
||||
#define EBADR 53 /* Invalid request descriptor */
|
||||
#define EXFULL 54 /* Exchange full */
|
||||
#define ENOANO 55 /* No anode */
|
||||
#define EBADRQC 56 /* Invalid request code */
|
||||
#define EBADSLT 57 /* Invalid slot */
|
||||
|
||||
#define EDEADLOCK EDEADLK
|
||||
|
||||
#define EBFONT 59 /* Bad font file format */
|
||||
#define ENOSTR 60 /* Device not a stream */
|
||||
#define ENODATA 61 /* No data available */
|
||||
#define ETIME 62 /* Timer expired */
|
||||
#define ENOSR 63 /* Out of streams resources */
|
||||
#define ENONET 64 /* Machine is not on the network */
|
||||
#define ENOPKG 65 /* Package not installed */
|
||||
#define EREMOTE 66 /* Object is remote */
|
||||
#define ENOLINK 67 /* Link has been severed */
|
||||
#define EADV 68 /* Advertise error */
|
||||
#define ESRMNT 69 /* Srmount error */
|
||||
#define ECOMM 70 /* Communication error on send */
|
||||
#define EPROTO 71 /* Protocol error */
|
||||
#define EMULTIHOP 72 /* Multihop attempted */
|
||||
#define EDOTDOT 73 /* RFS specific error */
|
||||
#define EBADMSG 74 /* Not a data message */
|
||||
#define EOVERFLOW 75 /* Value too large for defined data type */
|
||||
#define ENOTUNIQ 76 /* Name not unique on network */
|
||||
#define EBADFD 77 /* File descriptor in bad state */
|
||||
#define EREMCHG 78 /* Remote address changed */
|
||||
#define ELIBACC 79 /* Can not access a needed shared library */
|
||||
#define ELIBBAD 80 /* Accessing a corrupted shared library */
|
||||
#define ELIBSCN 81 /* .lib section in a.out corrupted */
|
||||
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
|
||||
#define ELIBEXEC 83 /* Cannot exec a shared library directly */
|
||||
#define EILSEQ 84 /* Illegal byte sequence */
|
||||
#define ERESTART 85 /* Interrupted system call should be restarted */
|
||||
#define ESTRPIPE 86 /* Streams pipe error */
|
||||
#define EUSERS 87 /* Too many users */
|
||||
#define ENOTSOCK 88 /* Socket operation on non-socket */
|
||||
#define EDESTADDRREQ 89 /* Destination address required */
|
||||
#define EMSGSIZE 90 /* Message too long */
|
||||
#define EPROTOTYPE 91 /* Protocol wrong type for socket */
|
||||
#define ENOPROTOOPT 92 /* Protocol not available */
|
||||
#define EPROTONOSUPPORT 93 /* Protocol not supported */
|
||||
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
|
||||
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
|
||||
#define EPFNOSUPPORT 96 /* Protocol family not supported */
|
||||
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
|
||||
#define EADDRINUSE 98 /* Address already in use */
|
||||
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
|
||||
#define ENETDOWN 100 /* Network is down */
|
||||
#define ENETUNREACH 101 /* Network is unreachable */
|
||||
#define ENETRESET 102 /* Network dropped connection because of reset */
|
||||
#define ECONNABORTED 103 /* Software caused connection abort */
|
||||
#define ECONNRESET 104 /* Connection reset by peer */
|
||||
#define ENOBUFS 105 /* No buffer space available */
|
||||
#define EISCONN 106 /* Transport endpoint is already connected */
|
||||
#define ENOTCONN 107 /* Transport endpoint is not connected */
|
||||
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
|
||||
#define ETOOMANYREFS 109 /* Too many references: cannot splice */
|
||||
#define ETIMEDOUT 110 /* Connection timed out */
|
||||
#define ECONNREFUSED 111 /* Connection refused */
|
||||
#define EHOSTDOWN 112 /* Host is down */
|
||||
#define EHOSTUNREACH 113 /* No route to host */
|
||||
#define EALREADY 114 /* Operation already in progress */
|
||||
#define EINPROGRESS 115 /* Operation now in progress */
|
||||
#define ESTALE 116 /* Stale NFS file handle */
|
||||
#define EUCLEAN 117 /* Structure needs cleaning */
|
||||
#define ENOTNAM 118 /* Not a XENIX named type file */
|
||||
#define ENAVAIL 119 /* No XENIX semaphores available */
|
||||
#define EISNAM 120 /* Is a named type file */
|
||||
#define EREMOTEIO 121 /* Remote I/O error */
|
||||
#define EDQUOT 122 /* Quota exceeded */
|
||||
|
||||
#define ENOMEDIUM 123 /* No medium found */
|
||||
#define EMEDIUMTYPE 124 /* Wrong medium type */
|
||||
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,46 +1,46 @@
|
|||
////////////////////// compile-time options ////////////////////////////////
|
||||
|
||||
// selects between the supported video modes, see boot.h for enum listing those available
|
||||
#define VIDEO_PREFERRED_MODE VIDEO_MODE_800x600
|
||||
|
||||
#define FLASH
|
||||
|
||||
//
|
||||
// uncomment to force CD boot mode even if MBR present
|
||||
// default is to boot from HDD if MBR present, else CD
|
||||
//#define FORCE_CD_BOOT
|
||||
//#define IS_XBE_CDLOADER
|
||||
#define MENU
|
||||
|
||||
// uncomment to default to FATX boot if you
|
||||
// run xromwell as bootloader for FATX
|
||||
|
||||
//#define DEFAULT_FATX
|
||||
|
||||
// Usefull combinations
|
||||
//
|
||||
// Booting from CD
|
||||
//
|
||||
// #define FORCE_CD_BOOT
|
||||
// #define IS_XBE_CDLOADER
|
||||
// #undef MENU
|
||||
//
|
||||
// Use xromwell as a normal bootselector from
|
||||
// HDD
|
||||
//
|
||||
// #undef FORCE_CD_BOOT
|
||||
// #undef IS_XBE_CDLOADER
|
||||
// #define MENU
|
||||
|
||||
// display a line like Composite 480 detected if uncommented
|
||||
#undef REPORT_VIDEO_MODE
|
||||
|
||||
// show the MBR table if the MBR is valid
|
||||
#undef DISPLAY_MBR_INFO
|
||||
|
||||
// uncomment to do Ethernet init
|
||||
//#define DO_ETHERNET 1
|
||||
|
||||
|
||||
#undef DEBUG_MODE
|
||||
#undef XPAD_VIBRA_STARTUP
|
||||
////////////////////// compile-time options ////////////////////////////////
|
||||
|
||||
// selects between the supported video modes, see boot.h for enum listing those available
|
||||
#define VIDEO_PREFERRED_MODE VIDEO_MODE_800x600
|
||||
|
||||
#define FLASH
|
||||
|
||||
//
|
||||
// uncomment to force CD boot mode even if MBR present
|
||||
// default is to boot from HDD if MBR present, else CD
|
||||
//#define FORCE_CD_BOOT
|
||||
//#define IS_XBE_CDLOADER
|
||||
#define MENU
|
||||
|
||||
// uncomment to default to FATX boot if you
|
||||
// run xromwell as bootloader for FATX
|
||||
|
||||
//#define DEFAULT_FATX
|
||||
|
||||
// Usefull combinations
|
||||
//
|
||||
// Booting from CD
|
||||
//
|
||||
// #define FORCE_CD_BOOT
|
||||
// #define IS_XBE_CDLOADER
|
||||
// #undef MENU
|
||||
//
|
||||
// Use xromwell as a normal bootselector from
|
||||
// HDD
|
||||
//
|
||||
// #undef FORCE_CD_BOOT
|
||||
// #undef IS_XBE_CDLOADER
|
||||
// #define MENU
|
||||
|
||||
// display a line like Composite 480 detected if uncommented
|
||||
#undef REPORT_VIDEO_MODE
|
||||
|
||||
// show the MBR table if the MBR is valid
|
||||
#undef DISPLAY_MBR_INFO
|
||||
|
||||
// uncomment to do Ethernet init
|
||||
//#define DO_ETHERNET 1
|
||||
|
||||
|
||||
#undef DEBUG_MODE
|
||||
#undef XPAD_VIBRA_STARTUP
|
||||
|
|
|
@ -1,86 +1,86 @@
|
|||
#ifndef _Consts_H_
|
||||
#define _Consts_H_
|
||||
|
||||
/*
|
||||
*
|
||||
* includes for startup code in a form usable by the .S files
|
||||
*
|
||||
*/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#define VERSION "BASE:2.20"
|
||||
|
||||
#define PCI_CFG_ADDR 0x0CF8
|
||||
#define PCI_CFG_DATA 0x0CFC
|
||||
|
||||
|
||||
#define I2C_IO_BASE 0xc000
|
||||
|
||||
#define BUS_0 0
|
||||
#define BUS_1 1
|
||||
|
||||
#define DEV_0 0
|
||||
#define DEV_1 1
|
||||
#define DEV_2 2
|
||||
#define DEV_3 3
|
||||
#define DEV_4 4
|
||||
#define DEV_5 5
|
||||
#define DEV_6 6
|
||||
#define DEV_7 7
|
||||
#define DEV_8 8
|
||||
#define DEV_9 9
|
||||
#define DEV_a 0xa
|
||||
#define DEV_b 0xb
|
||||
#define DEV_c 0xc
|
||||
#define DEV_d 0xd
|
||||
#define DEV_e 0xe
|
||||
#define DEV_f 0xf
|
||||
#define DEV_10 0x10
|
||||
#define DEV_11 0x11
|
||||
#define DEV_12 0x12
|
||||
#define DEV_13 0x13
|
||||
#define DEV_14 0x14
|
||||
#define DEV_15 0x15
|
||||
#define DEV_16 0x16
|
||||
#define DEV_17 0x17
|
||||
#define DEV_18 0x18
|
||||
#define DEV_19 0x19
|
||||
#define DEV_1a 0x1a
|
||||
#define DEV_1b 0x1b
|
||||
#define DEV_1c 0x1c
|
||||
#define DEV_1d 0x1d
|
||||
#define DEV_1e 0x1e
|
||||
#define DEV_1f 0x1f
|
||||
|
||||
#define FUNC_0 0
|
||||
/*
|
||||
#define boot_post_macro(value) \
|
||||
movb $(value), %al ;\
|
||||
outb %al, $0x80
|
||||
*/
|
||||
/* Filtror debug stuff 4K block used for communications */
|
||||
#define FILT_DEBUG_BASE 0xff0fe000
|
||||
#define FILT_DEBUG_FOOTPRINT 0x1000
|
||||
#define FILT_DEBUG_MAX_DATA ((FILT_DEBUG_FOOTPRINT/2)-4)
|
||||
#define FILT_DEBUG_TOPC_START (FILT_DEBUG_BASE+0)
|
||||
#define FILT_DEBUG_FROMPC_START (FILT_DEBUG_BASE+(FILT_DEBUG_FOOTPRINT/2))
|
||||
#define FILT_DEBUG_TOPC_LEN (FILT_DEBUG_BASE+(FILT_DEBUG_FOOTPRINT/2)-2)
|
||||
#define FILT_DEBUG_FROMPC_LEN (FILT_DEBUG_BASE+FILT_DEBUG_FOOTPRINT-2)
|
||||
#define FILT_DEBUG_TOPC_CHECKSUM (FILT_DEBUG_BASE+(FILT_DEBUG_FOOTPRINT/2)-4)
|
||||
#define FILT_DEBUG_FROMPC_CHECKSUM (FILT_DEBUG_BASE+FILT_DEBUG_FOOTPRINT-4)
|
||||
|
||||
#define MEMORYMANAGERSTART 0x01000000
|
||||
#define MEMORYMANAGERSIZE 0x1000000 // 16 MB
|
||||
#define MEMORYMANAGEREND 0x01FFFFFF
|
||||
|
||||
#endif // _Consts_H_
|
||||
|
||||
|
||||
#ifndef _Consts_H_
|
||||
#define _Consts_H_
|
||||
|
||||
/*
|
||||
*
|
||||
* includes for startup code in a form usable by the .S files
|
||||
*
|
||||
*/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#define VERSION "BASE:2.20"
|
||||
|
||||
#define PCI_CFG_ADDR 0x0CF8
|
||||
#define PCI_CFG_DATA 0x0CFC
|
||||
|
||||
|
||||
#define I2C_IO_BASE 0xc000
|
||||
|
||||
#define BUS_0 0
|
||||
#define BUS_1 1
|
||||
|
||||
#define DEV_0 0
|
||||
#define DEV_1 1
|
||||
#define DEV_2 2
|
||||
#define DEV_3 3
|
||||
#define DEV_4 4
|
||||
#define DEV_5 5
|
||||
#define DEV_6 6
|
||||
#define DEV_7 7
|
||||
#define DEV_8 8
|
||||
#define DEV_9 9
|
||||
#define DEV_a 0xa
|
||||
#define DEV_b 0xb
|
||||
#define DEV_c 0xc
|
||||
#define DEV_d 0xd
|
||||
#define DEV_e 0xe
|
||||
#define DEV_f 0xf
|
||||
#define DEV_10 0x10
|
||||
#define DEV_11 0x11
|
||||
#define DEV_12 0x12
|
||||
#define DEV_13 0x13
|
||||
#define DEV_14 0x14
|
||||
#define DEV_15 0x15
|
||||
#define DEV_16 0x16
|
||||
#define DEV_17 0x17
|
||||
#define DEV_18 0x18
|
||||
#define DEV_19 0x19
|
||||
#define DEV_1a 0x1a
|
||||
#define DEV_1b 0x1b
|
||||
#define DEV_1c 0x1c
|
||||
#define DEV_1d 0x1d
|
||||
#define DEV_1e 0x1e
|
||||
#define DEV_1f 0x1f
|
||||
|
||||
#define FUNC_0 0
|
||||
/*
|
||||
#define boot_post_macro(value) \
|
||||
movb $(value), %al ;\
|
||||
outb %al, $0x80
|
||||
*/
|
||||
/* Filtror debug stuff 4K block used for communications */
|
||||
#define FILT_DEBUG_BASE 0xff0fe000
|
||||
#define FILT_DEBUG_FOOTPRINT 0x1000
|
||||
#define FILT_DEBUG_MAX_DATA ((FILT_DEBUG_FOOTPRINT/2)-4)
|
||||
#define FILT_DEBUG_TOPC_START (FILT_DEBUG_BASE+0)
|
||||
#define FILT_DEBUG_FROMPC_START (FILT_DEBUG_BASE+(FILT_DEBUG_FOOTPRINT/2))
|
||||
#define FILT_DEBUG_TOPC_LEN (FILT_DEBUG_BASE+(FILT_DEBUG_FOOTPRINT/2)-2)
|
||||
#define FILT_DEBUG_FROMPC_LEN (FILT_DEBUG_BASE+FILT_DEBUG_FOOTPRINT-2)
|
||||
#define FILT_DEBUG_TOPC_CHECKSUM (FILT_DEBUG_BASE+(FILT_DEBUG_FOOTPRINT/2)-4)
|
||||
#define FILT_DEBUG_FROMPC_CHECKSUM (FILT_DEBUG_BASE+FILT_DEBUG_FOOTPRINT-4)
|
||||
|
||||
#define MEMORYMANAGERSTART 0x01000000
|
||||
#define MEMORYMANAGERSIZE 0x1000000 // 16 MB
|
||||
#define MEMORYMANAGEREND 0x01FFFFFF
|
||||
|
||||
#endif // _Consts_H_
|
||||
|
||||
|
||||
|
|
|
@ -1,430 +1,430 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2002 by David Brownell
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* This file contains declarations of usbcore internals that are mostly
|
||||
* used or exposed by Host Controller Drivers.
|
||||
*/
|
||||
|
||||
/*
|
||||
* USB Packet IDs (PIDs)
|
||||
*/
|
||||
#define USB_PID_UNDEF_0 0xf0
|
||||
#define USB_PID_OUT 0xe1
|
||||
#define USB_PID_ACK 0xd2
|
||||
#define USB_PID_DATA0 0xc3
|
||||
#define USB_PID_PING 0xb4 /* USB 2.0 */
|
||||
#define USB_PID_SOF 0xa5
|
||||
#define USB_PID_NYET 0x96 /* USB 2.0 */
|
||||
#define USB_PID_DATA2 0x87 /* USB 2.0 */
|
||||
#define USB_PID_SPLIT 0x78 /* USB 2.0 */
|
||||
#define USB_PID_IN 0x69
|
||||
#define USB_PID_NAK 0x5a
|
||||
#define USB_PID_DATA1 0x4b
|
||||
#define USB_PID_PREAMBLE 0x3c /* Token mode */
|
||||
#define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */
|
||||
#define USB_PID_SETUP 0x2d
|
||||
#define USB_PID_STALL 0x1e
|
||||
#define USB_PID_MDATA 0x0f /* USB 2.0 */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* USB Host Controller Driver (usb_hcd) framework
|
||||
*
|
||||
* Since "struct usb_bus" is so thin, you can't share much code in it.
|
||||
* This framework is a layer over that, and should be more sharable.
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
struct usb_hcd { /* usb_bus.hcpriv points to this */
|
||||
|
||||
/*
|
||||
* housekeeping
|
||||
*/
|
||||
struct usb_bus self; /* hcd is-a bus */
|
||||
|
||||
const char *product_desc; /* product/vendor string */
|
||||
const char *description; /* "ehci-hcd" etc */
|
||||
|
||||
struct timer_list rh_timer; /* drives root hub */
|
||||
struct list_head dev_list; /* devices on this bus */
|
||||
struct work_struct work;
|
||||
|
||||
/*
|
||||
* hardware info/state
|
||||
*/
|
||||
struct hc_driver *driver; /* hw-specific hooks */
|
||||
int irq; /* irq allocated */
|
||||
void *regs; /* device memory/io */
|
||||
struct device *controller; /* handle to hardware */
|
||||
|
||||
/* a few non-PCI controllers exist, mostly for OHCI */
|
||||
struct pci_dev *pdev; /* pci is typical */
|
||||
#ifdef CONFIG_PCI
|
||||
int region; /* pci region for regs */
|
||||
u32 pci_state [16]; /* for PM state save */
|
||||
atomic_t resume_count; /* multiple resumes issue */
|
||||
#endif
|
||||
|
||||
#define HCD_BUFFER_POOLS 4
|
||||
struct pci_pool *pool [HCD_BUFFER_POOLS];
|
||||
|
||||
int state;
|
||||
# define __ACTIVE 0x01
|
||||
# define __SLEEPY 0x02
|
||||
# define __SUSPEND 0x04
|
||||
# define __TRANSIENT 0x80
|
||||
|
||||
# define USB_STATE_HALT 0
|
||||
# define USB_STATE_RUNNING (__ACTIVE)
|
||||
# define USB_STATE_READY (__ACTIVE|__SLEEPY)
|
||||
# define USB_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE)
|
||||
# define USB_STATE_RESUMING (__SUSPEND|__TRANSIENT)
|
||||
# define USB_STATE_SUSPENDED (__SUSPEND)
|
||||
|
||||
#define HCD_IS_RUNNING(state) ((state) & __ACTIVE)
|
||||
#define HCD_IS_SUSPENDED(state) ((state) & __SUSPEND)
|
||||
|
||||
/* more shared queuing code would be good; it should support
|
||||
* smarter scheduling, handle transaction translators, etc;
|
||||
* input size of periodic table to an interrupt scheduler.
|
||||
* (ohci 32, uhci 1024, ehci 256/512/1024).
|
||||
*/
|
||||
};
|
||||
|
||||
/* 2.4 does this a bit differently ... */
|
||||
static _inline struct usb_bus *hcd_to_bus (struct usb_hcd *hcd)
|
||||
{
|
||||
return &hcd->self;
|
||||
}
|
||||
|
||||
|
||||
struct hcd_dev { /* usb_device.hcpriv points to this */
|
||||
struct list_head dev_list; /* on this hcd */
|
||||
struct list_head urb_list; /* pending on this dev */
|
||||
|
||||
/* per-configuration HC/HCD state, such as QH or ED */
|
||||
void *ep[32];
|
||||
};
|
||||
|
||||
// urb.hcpriv is really hardware-specific
|
||||
|
||||
struct hcd_timeout { /* timeouts we allocate */
|
||||
struct list_head timeout_list;
|
||||
struct timer_list timer;
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* FIXME usb_operations should vanish or become hc_driver,
|
||||
* when usb_bus and usb_hcd become the same thing.
|
||||
*/
|
||||
|
||||
struct usb_operations {
|
||||
int (*allocate)(struct usb_device *);
|
||||
int (*deallocate)(struct usb_device *);
|
||||
int (*get_frame_number) (struct usb_device *usb_dev);
|
||||
int (*submit_urb) (struct urb *urb, int mem_flags);
|
||||
int (*unlink_urb) (struct urb *urb);
|
||||
|
||||
/* allocate dma-consistent buffer for URB_DMA_NOMAPPING */
|
||||
void *(*buffer_alloc)(struct usb_bus *bus, size_t size,
|
||||
int mem_flags,
|
||||
dma_addr_t *dma);
|
||||
void (*buffer_free)(struct usb_bus *bus, size_t size,
|
||||
void *addr, dma_addr_t dma);
|
||||
|
||||
void (*disable)(struct usb_device *udev, int bEndpointAddress);
|
||||
};
|
||||
|
||||
/* each driver provides one of these, and hardware init support */
|
||||
|
||||
struct pt_regs;
|
||||
|
||||
struct hc_driver {
|
||||
const char *description; /* "ehci-hcd" etc */
|
||||
|
||||
/* irq handler */
|
||||
void (*irq) (struct usb_hcd *hcd, struct pt_regs *regs);
|
||||
|
||||
int flags;
|
||||
#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */
|
||||
#define HCD_USB11 0x0010 /* USB 1.1 */
|
||||
#define HCD_USB2 0x0020 /* USB 2.0 */
|
||||
|
||||
/* called to init HCD and root hub */
|
||||
int (*start) (struct usb_hcd *hcd);
|
||||
|
||||
/* called after all devices were suspended */
|
||||
int (*suspend) (struct usb_hcd *hcd, u32 state);
|
||||
|
||||
/* called before any devices get resumed */
|
||||
int (*resume) (struct usb_hcd *hcd);
|
||||
|
||||
/* cleanly make HCD stop writing memory and doing I/O */
|
||||
void (*stop) (struct usb_hcd *hcd);
|
||||
|
||||
/* return current frame number */
|
||||
int (*get_frame_number) (struct usb_hcd *hcd);
|
||||
|
||||
/* memory lifecycle */
|
||||
struct usb_hcd *(*hcd_alloc) (void);
|
||||
void (*hcd_free) (struct usb_hcd *hcd);
|
||||
|
||||
/* manage i/o requests, device state */
|
||||
int (*urb_enqueue) (struct usb_hcd *hcd, struct urb *urb,
|
||||
int mem_flags);
|
||||
int (*urb_dequeue) (struct usb_hcd *hcd, struct urb *urb);
|
||||
|
||||
/* hw synch, freeing endpoint resources that urb_dequeue can't */
|
||||
void (*endpoint_disable)(struct usb_hcd *hcd,
|
||||
struct hcd_dev *dev, int bEndpointAddress);
|
||||
|
||||
/* root hub support */
|
||||
int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
|
||||
int (*hub_control) (struct usb_hcd *hcd,
|
||||
u16 typeReq, u16 wValue, u16 wIndex,
|
||||
char *buf, u16 wLength);
|
||||
};
|
||||
|
||||
extern void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs);
|
||||
extern void usb_bus_init (struct usb_bus *bus);
|
||||
extern void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
struct pci_dev;
|
||||
struct pci_device_id;
|
||||
extern int usb_hcd_pci_probe (struct pci_dev *dev,
|
||||
const struct pci_device_id *id);
|
||||
extern void usb_hcd_pci_remove (struct pci_dev *dev);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
// FIXME: see Documentation/power/pci.txt (2.4.6 and later?)
|
||||
// extern int usb_hcd_pci_save_state (struct pci_dev *dev, u32 state);
|
||||
extern int usb_hcd_pci_suspend (struct pci_dev *dev, u32 state);
|
||||
extern int usb_hcd_pci_resume (struct pci_dev *dev);
|
||||
// extern int usb_hcd_pci_enable_wake (struct pci_dev *dev, u32 state, int flg);
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
/* pci-ish (pdev null is ok) buffer alloc/mapping support */
|
||||
int hcd_buffer_create (struct usb_hcd *hcd);
|
||||
void hcd_buffer_destroy (struct usb_hcd *hcd);
|
||||
|
||||
void *hcd_buffer_alloc (struct usb_bus *bus, size_t size,
|
||||
int mem_flags, dma_addr_t *dma);
|
||||
void hcd_buffer_free (struct usb_bus *bus, size_t size,
|
||||
void *addr, dma_addr_t dma);
|
||||
|
||||
/* generic bus glue, needed for host controllers that don't use PCI */
|
||||
extern struct usb_operations usb_hcd_operations;
|
||||
extern irqreturn_t usb_hcd_irq (int irq, void *__hcd, struct pt_regs *r);
|
||||
extern void usb_hc_died (struct usb_hcd *hcd);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/* Enumeration is only for the hub driver, or HCD virtual root hubs */
|
||||
extern int usb_new_device(struct usb_device *dev, struct device *parent);
|
||||
extern void usb_connect(struct usb_device *dev);
|
||||
extern void usb_disconnect(struct usb_device **);
|
||||
|
||||
/* exported to hub driver ONLY to support usb_reset_device () */
|
||||
extern int usb_get_configuration(struct usb_device *dev);
|
||||
extern void usb_set_maxpacket(struct usb_device *dev);
|
||||
extern void usb_destroy_configuration(struct usb_device *dev);
|
||||
extern int usb_set_address(struct usb_device *dev);
|
||||
|
||||
/* use these only before the device's address has been set */
|
||||
#define usb_snddefctrl(dev) ((PIPE_CONTROL << 30))
|
||||
#define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | USB_DIR_IN)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* HCD Root Hub support
|
||||
*/
|
||||
|
||||
#include "hub.h"
|
||||
|
||||
/* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */
|
||||
#define DeviceRequest \
|
||||
((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
|
||||
#define DeviceOutRequest \
|
||||
((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
|
||||
|
||||
#define InterfaceRequest \
|
||||
((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
|
||||
|
||||
#define EndpointRequest \
|
||||
((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
|
||||
#define EndpointOutRequest \
|
||||
((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
|
||||
|
||||
/* table 9.6 standard features */
|
||||
#define DEVICE_REMOTE_WAKEUP 1
|
||||
#define ENDPOINT_HALT 0
|
||||
|
||||
/* class requests from the USB 2.0 hub spec, table 11-15 */
|
||||
/* GetBusState and SetHubDescriptor are optional, omitted */
|
||||
#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
|
||||
#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE)
|
||||
#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR)
|
||||
#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS)
|
||||
#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS)
|
||||
#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE)
|
||||
#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Generic bandwidth allocation constants/support
|
||||
*/
|
||||
#define FRAME_TIME_USECS 1000L
|
||||
#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */
|
||||
/* Trying not to use worst-case bit-stuffing
|
||||
of (7/6 * 8 * bytecount) = 9.33 * bytecount */
|
||||
/* bytecount = data payload byte count */
|
||||
|
||||
#define NS_TO_US(ns) ((ns + 500L) / 1000L)
|
||||
/* convert & round nanoseconds to microseconds */
|
||||
|
||||
extern void usb_claim_bandwidth (struct usb_device *dev, struct urb *urb,
|
||||
int bustime, int isoc);
|
||||
extern void usb_release_bandwidth (struct usb_device *dev, struct urb *urb,
|
||||
int isoc);
|
||||
|
||||
/*
|
||||
* Full/low speed bandwidth allocation constants/support.
|
||||
*/
|
||||
#define BW_HOST_DELAY 1000L /* nanoseconds */
|
||||
#define BW_HUB_LS_SETUP 333L /* nanoseconds */
|
||||
/* 4 full-speed bit times (est.) */
|
||||
|
||||
#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */
|
||||
#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
|
||||
#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
|
||||
|
||||
extern int usb_check_bandwidth (struct usb_device *dev, struct urb *urb);
|
||||
|
||||
/*
|
||||
* Ceiling microseconds (typical) for that many bytes at high speed
|
||||
* ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed
|
||||
* to preallocate bandwidth)
|
||||
*/
|
||||
#define USB2_HOST_DELAY 5 /* nsec, guess */
|
||||
#define HS_USECS(bytes) NS_TO_US ( ((55 * 8 * 2083)/1000) \
|
||||
+ ((2083UL * (3167 + BitTime (bytes)))/1000) \
|
||||
+ USB2_HOST_DELAY)
|
||||
#define HS_USECS_ISO(bytes) NS_TO_US ( ((long)(38 * 8 * 2.083)) \
|
||||
+ ((2083UL * (3167 + BitTime (bytes)))/1000) \
|
||||
+ USB2_HOST_DELAY)
|
||||
|
||||
extern long usb_calc_bus_time (int speed, int is_input,
|
||||
int isoc, int bytecount);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
extern struct usb_bus *usb_alloc_bus (struct usb_operations *);
|
||||
extern void usb_free_bus (struct usb_bus *);
|
||||
|
||||
extern void usb_register_bus (struct usb_bus *);
|
||||
extern void usb_deregister_bus (struct usb_bus *);
|
||||
|
||||
extern int usb_register_root_hub (struct usb_device *usb_dev,
|
||||
struct device *parent_dev);
|
||||
|
||||
/* for portability to 2.4, hcds should call this */
|
||||
static _inline int hcd_register_root (struct usb_hcd *hcd)
|
||||
{
|
||||
return usb_register_root_hub (
|
||||
hcd_to_bus (hcd)->root_hub, hcd->controller);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* exported only within usbcore */
|
||||
|
||||
extern struct list_head usb_bus_list;
|
||||
extern struct semaphore usb_bus_list_lock;
|
||||
|
||||
extern void usb_bus_get (struct usb_bus *bus);
|
||||
extern void usb_bus_put (struct usb_bus *bus);
|
||||
|
||||
extern int usb_find_interface_driver (struct usb_device *dev,
|
||||
struct usb_interface *interface);
|
||||
|
||||
#define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
|
||||
|
||||
#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
|
||||
|
||||
/*
|
||||
* USB device fs stuff
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_USB_DEVICEFS
|
||||
|
||||
/*
|
||||
* these are expected to be called from the USB core/hub thread
|
||||
* with the kernel lock held
|
||||
*/
|
||||
extern void usbfs_add_bus(struct usb_bus *bus);
|
||||
extern void usbfs_remove_bus(struct usb_bus *bus);
|
||||
extern void usbfs_add_device(struct usb_device *dev);
|
||||
extern void usbfs_remove_device(struct usb_device *dev);
|
||||
extern void usbfs_update_special (void);
|
||||
|
||||
extern int usbfs_init(void);
|
||||
extern void usbfs_cleanup(void);
|
||||
|
||||
#else /* CONFIG_USB_DEVICEFS */
|
||||
|
||||
static _inline void usbfs_add_bus(struct usb_bus *bus) {}
|
||||
static _inline void usbfs_remove_bus(struct usb_bus *bus) {}
|
||||
static _inline void usbfs_add_device(struct usb_device *dev) {}
|
||||
static _inline void usbfs_remove_device(struct usb_device *dev) {}
|
||||
static _inline void usbfs_update_special (void) {}
|
||||
|
||||
static _inline int usbfs_init(void) { return 0; }
|
||||
static _inline void usbfs_cleanup(void) { }
|
||||
|
||||
#endif /* CONFIG_USB_DEVICEFS */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */
|
||||
// bleech -- resurfaced in 2.4.11 or 2.4.12
|
||||
#define bitmap DeviceRemovable
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* random stuff */
|
||||
|
||||
#define RUN_CONTEXT (in_irq () ? "in_irq" \
|
||||
: (in_interrupt () ? "in_interrupt" : "can sleep"))
|
||||
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2002 by David Brownell
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* This file contains declarations of usbcore internals that are mostly
|
||||
* used or exposed by Host Controller Drivers.
|
||||
*/
|
||||
|
||||
/*
|
||||
* USB Packet IDs (PIDs)
|
||||
*/
|
||||
#define USB_PID_UNDEF_0 0xf0
|
||||
#define USB_PID_OUT 0xe1
|
||||
#define USB_PID_ACK 0xd2
|
||||
#define USB_PID_DATA0 0xc3
|
||||
#define USB_PID_PING 0xb4 /* USB 2.0 */
|
||||
#define USB_PID_SOF 0xa5
|
||||
#define USB_PID_NYET 0x96 /* USB 2.0 */
|
||||
#define USB_PID_DATA2 0x87 /* USB 2.0 */
|
||||
#define USB_PID_SPLIT 0x78 /* USB 2.0 */
|
||||
#define USB_PID_IN 0x69
|
||||
#define USB_PID_NAK 0x5a
|
||||
#define USB_PID_DATA1 0x4b
|
||||
#define USB_PID_PREAMBLE 0x3c /* Token mode */
|
||||
#define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */
|
||||
#define USB_PID_SETUP 0x2d
|
||||
#define USB_PID_STALL 0x1e
|
||||
#define USB_PID_MDATA 0x0f /* USB 2.0 */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* USB Host Controller Driver (usb_hcd) framework
|
||||
*
|
||||
* Since "struct usb_bus" is so thin, you can't share much code in it.
|
||||
* This framework is a layer over that, and should be more sharable.
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
struct usb_hcd { /* usb_bus.hcpriv points to this */
|
||||
|
||||
/*
|
||||
* housekeeping
|
||||
*/
|
||||
struct usb_bus self; /* hcd is-a bus */
|
||||
|
||||
const char *product_desc; /* product/vendor string */
|
||||
const char *description; /* "ehci-hcd" etc */
|
||||
|
||||
struct timer_list rh_timer; /* drives root hub */
|
||||
struct list_head dev_list; /* devices on this bus */
|
||||
struct work_struct work;
|
||||
|
||||
/*
|
||||
* hardware info/state
|
||||
*/
|
||||
struct hc_driver *driver; /* hw-specific hooks */
|
||||
int irq; /* irq allocated */
|
||||
void *regs; /* device memory/io */
|
||||
struct device *controller; /* handle to hardware */
|
||||
|
||||
/* a few non-PCI controllers exist, mostly for OHCI */
|
||||
struct pci_dev *pdev; /* pci is typical */
|
||||
#ifdef CONFIG_PCI
|
||||
int region; /* pci region for regs */
|
||||
u32 pci_state [16]; /* for PM state save */
|
||||
atomic_t resume_count; /* multiple resumes issue */
|
||||
#endif
|
||||
|
||||
#define HCD_BUFFER_POOLS 4
|
||||
struct pci_pool *pool [HCD_BUFFER_POOLS];
|
||||
|
||||
int state;
|
||||
# define __ACTIVE 0x01
|
||||
# define __SLEEPY 0x02
|
||||
# define __SUSPEND 0x04
|
||||
# define __TRANSIENT 0x80
|
||||
|
||||
# define USB_STATE_HALT 0
|
||||
# define USB_STATE_RUNNING (__ACTIVE)
|
||||
# define USB_STATE_READY (__ACTIVE|__SLEEPY)
|
||||
# define USB_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE)
|
||||
# define USB_STATE_RESUMING (__SUSPEND|__TRANSIENT)
|
||||
# define USB_STATE_SUSPENDED (__SUSPEND)
|
||||
|
||||
#define HCD_IS_RUNNING(state) ((state) & __ACTIVE)
|
||||
#define HCD_IS_SUSPENDED(state) ((state) & __SUSPEND)
|
||||
|
||||
/* more shared queuing code would be good; it should support
|
||||
* smarter scheduling, handle transaction translators, etc;
|
||||
* input size of periodic table to an interrupt scheduler.
|
||||
* (ohci 32, uhci 1024, ehci 256/512/1024).
|
||||
*/
|
||||
};
|
||||
|
||||
/* 2.4 does this a bit differently ... */
|
||||
static _inline struct usb_bus *hcd_to_bus (struct usb_hcd *hcd)
|
||||
{
|
||||
return &hcd->self;
|
||||
}
|
||||
|
||||
|
||||
struct hcd_dev { /* usb_device.hcpriv points to this */
|
||||
struct list_head dev_list; /* on this hcd */
|
||||
struct list_head urb_list; /* pending on this dev */
|
||||
|
||||
/* per-configuration HC/HCD state, such as QH or ED */
|
||||
void *ep[32];
|
||||
};
|
||||
|
||||
// urb.hcpriv is really hardware-specific
|
||||
|
||||
struct hcd_timeout { /* timeouts we allocate */
|
||||
struct list_head timeout_list;
|
||||
struct timer_list timer;
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* FIXME usb_operations should vanish or become hc_driver,
|
||||
* when usb_bus and usb_hcd become the same thing.
|
||||
*/
|
||||
|
||||
struct usb_operations {
|
||||
int (*allocate)(struct usb_device *);
|
||||
int (*deallocate)(struct usb_device *);
|
||||
int (*get_frame_number) (struct usb_device *usb_dev);
|
||||
int (*submit_urb) (struct urb *urb, int mem_flags);
|
||||
int (*unlink_urb) (struct urb *urb);
|
||||
|
||||
/* allocate dma-consistent buffer for URB_DMA_NOMAPPING */
|
||||
void *(*buffer_alloc)(struct usb_bus *bus, size_t size,
|
||||
int mem_flags,
|
||||
dma_addr_t *dma);
|
||||
void (*buffer_free)(struct usb_bus *bus, size_t size,
|
||||
void *addr, dma_addr_t dma);
|
||||
|
||||
void (*disable)(struct usb_device *udev, int bEndpointAddress);
|
||||
};
|
||||
|
||||
/* each driver provides one of these, and hardware init support */
|
||||
|
||||
struct pt_regs;
|
||||
|
||||
struct hc_driver {
|
||||
const char *description; /* "ehci-hcd" etc */
|
||||
|
||||
/* irq handler */
|
||||
void (*irq) (struct usb_hcd *hcd, struct pt_regs *regs);
|
||||
|
||||
int flags;
|
||||
#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */
|
||||
#define HCD_USB11 0x0010 /* USB 1.1 */
|
||||
#define HCD_USB2 0x0020 /* USB 2.0 */
|
||||
|
||||
/* called to init HCD and root hub */
|
||||
int (*start) (struct usb_hcd *hcd);
|
||||
|
||||
/* called after all devices were suspended */
|
||||
int (*suspend) (struct usb_hcd *hcd, u32 state);
|
||||
|
||||
/* called before any devices get resumed */
|
||||
int (*resume) (struct usb_hcd *hcd);
|
||||
|
||||
/* cleanly make HCD stop writing memory and doing I/O */
|
||||
void (*stop) (struct usb_hcd *hcd);
|
||||
|
||||
/* return current frame number */
|
||||
int (*get_frame_number) (struct usb_hcd *hcd);
|
||||
|
||||
/* memory lifecycle */
|
||||
struct usb_hcd *(*hcd_alloc) (void);
|
||||
void (*hcd_free) (struct usb_hcd *hcd);
|
||||
|
||||
/* manage i/o requests, device state */
|
||||
int (*urb_enqueue) (struct usb_hcd *hcd, struct urb *urb,
|
||||
int mem_flags);
|
||||
int (*urb_dequeue) (struct usb_hcd *hcd, struct urb *urb);
|
||||
|
||||
/* hw synch, freeing endpoint resources that urb_dequeue can't */
|
||||
void (*endpoint_disable)(struct usb_hcd *hcd,
|
||||
struct hcd_dev *dev, int bEndpointAddress);
|
||||
|
||||
/* root hub support */
|
||||
int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
|
||||
int (*hub_control) (struct usb_hcd *hcd,
|
||||
u16 typeReq, u16 wValue, u16 wIndex,
|
||||
char *buf, u16 wLength);
|
||||
};
|
||||
|
||||
extern void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs);
|
||||
extern void usb_bus_init (struct usb_bus *bus);
|
||||
extern void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
struct pci_dev;
|
||||
struct pci_device_id;
|
||||
extern int usb_hcd_pci_probe (struct pci_dev *dev,
|
||||
const struct pci_device_id *id);
|
||||
extern void usb_hcd_pci_remove (struct pci_dev *dev);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
// FIXME: see Documentation/power/pci.txt (2.4.6 and later?)
|
||||
// extern int usb_hcd_pci_save_state (struct pci_dev *dev, u32 state);
|
||||
extern int usb_hcd_pci_suspend (struct pci_dev *dev, u32 state);
|
||||
extern int usb_hcd_pci_resume (struct pci_dev *dev);
|
||||
// extern int usb_hcd_pci_enable_wake (struct pci_dev *dev, u32 state, int flg);
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
/* pci-ish (pdev null is ok) buffer alloc/mapping support */
|
||||
int hcd_buffer_create (struct usb_hcd *hcd);
|
||||
void hcd_buffer_destroy (struct usb_hcd *hcd);
|
||||
|
||||
void *hcd_buffer_alloc (struct usb_bus *bus, size_t size,
|
||||
int mem_flags, dma_addr_t *dma);
|
||||
void hcd_buffer_free (struct usb_bus *bus, size_t size,
|
||||
void *addr, dma_addr_t dma);
|
||||
|
||||
/* generic bus glue, needed for host controllers that don't use PCI */
|
||||
extern struct usb_operations usb_hcd_operations;
|
||||
extern irqreturn_t usb_hcd_irq (int irq, void *__hcd, struct pt_regs *r);
|
||||
extern void usb_hc_died (struct usb_hcd *hcd);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/* Enumeration is only for the hub driver, or HCD virtual root hubs */
|
||||
extern int usb_new_device(struct usb_device *dev, struct device *parent);
|
||||
extern void usb_connect(struct usb_device *dev);
|
||||
extern void usb_disconnect(struct usb_device **);
|
||||
|
||||
/* exported to hub driver ONLY to support usb_reset_device () */
|
||||
extern int usb_get_configuration(struct usb_device *dev);
|
||||
extern void usb_set_maxpacket(struct usb_device *dev);
|
||||
extern void usb_destroy_configuration(struct usb_device *dev);
|
||||
extern int usb_set_address(struct usb_device *dev);
|
||||
|
||||
/* use these only before the device's address has been set */
|
||||
#define usb_snddefctrl(dev) ((PIPE_CONTROL << 30))
|
||||
#define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | USB_DIR_IN)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* HCD Root Hub support
|
||||
*/
|
||||
|
||||
#include "hub.h"
|
||||
|
||||
/* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */
|
||||
#define DeviceRequest \
|
||||
((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
|
||||
#define DeviceOutRequest \
|
||||
((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
|
||||
|
||||
#define InterfaceRequest \
|
||||
((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
|
||||
|
||||
#define EndpointRequest \
|
||||
((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
|
||||
#define EndpointOutRequest \
|
||||
((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
|
||||
|
||||
/* table 9.6 standard features */
|
||||
#define DEVICE_REMOTE_WAKEUP 1
|
||||
#define ENDPOINT_HALT 0
|
||||
|
||||
/* class requests from the USB 2.0 hub spec, table 11-15 */
|
||||
/* GetBusState and SetHubDescriptor are optional, omitted */
|
||||
#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
|
||||
#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE)
|
||||
#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR)
|
||||
#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS)
|
||||
#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS)
|
||||
#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE)
|
||||
#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Generic bandwidth allocation constants/support
|
||||
*/
|
||||
#define FRAME_TIME_USECS 1000L
|
||||
#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */
|
||||
/* Trying not to use worst-case bit-stuffing
|
||||
of (7/6 * 8 * bytecount) = 9.33 * bytecount */
|
||||
/* bytecount = data payload byte count */
|
||||
|
||||
#define NS_TO_US(ns) ((ns + 500L) / 1000L)
|
||||
/* convert & round nanoseconds to microseconds */
|
||||
|
||||
extern void usb_claim_bandwidth (struct usb_device *dev, struct urb *urb,
|
||||
int bustime, int isoc);
|
||||
extern void usb_release_bandwidth (struct usb_device *dev, struct urb *urb,
|
||||
int isoc);
|
||||
|
||||
/*
|
||||
* Full/low speed bandwidth allocation constants/support.
|
||||
*/
|
||||
#define BW_HOST_DELAY 1000L /* nanoseconds */
|
||||
#define BW_HUB_LS_SETUP 333L /* nanoseconds */
|
||||
/* 4 full-speed bit times (est.) */
|
||||
|
||||
#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */
|
||||
#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
|
||||
#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
|
||||
|
||||
extern int usb_check_bandwidth (struct usb_device *dev, struct urb *urb);
|
||||
|
||||
/*
|
||||
* Ceiling microseconds (typical) for that many bytes at high speed
|
||||
* ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed
|
||||
* to preallocate bandwidth)
|
||||
*/
|
||||
#define USB2_HOST_DELAY 5 /* nsec, guess */
|
||||
#define HS_USECS(bytes) NS_TO_US ( ((55 * 8 * 2083)/1000) \
|
||||
+ ((2083UL * (3167 + BitTime (bytes)))/1000) \
|
||||
+ USB2_HOST_DELAY)
|
||||
#define HS_USECS_ISO(bytes) NS_TO_US ( ((long)(38 * 8 * 2.083)) \
|
||||
+ ((2083UL * (3167 + BitTime (bytes)))/1000) \
|
||||
+ USB2_HOST_DELAY)
|
||||
|
||||
extern long usb_calc_bus_time (int speed, int is_input,
|
||||
int isoc, int bytecount);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
extern struct usb_bus *usb_alloc_bus (struct usb_operations *);
|
||||
extern void usb_free_bus (struct usb_bus *);
|
||||
|
||||
extern void usb_register_bus (struct usb_bus *);
|
||||
extern void usb_deregister_bus (struct usb_bus *);
|
||||
|
||||
extern int usb_register_root_hub (struct usb_device *usb_dev,
|
||||
struct device *parent_dev);
|
||||
|
||||
/* for portability to 2.4, hcds should call this */
|
||||
static _inline int hcd_register_root (struct usb_hcd *hcd)
|
||||
{
|
||||
return usb_register_root_hub (
|
||||
hcd_to_bus (hcd)->root_hub, hcd->controller);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* exported only within usbcore */
|
||||
|
||||
extern struct list_head usb_bus_list;
|
||||
extern struct semaphore usb_bus_list_lock;
|
||||
|
||||
extern void usb_bus_get (struct usb_bus *bus);
|
||||
extern void usb_bus_put (struct usb_bus *bus);
|
||||
|
||||
extern int usb_find_interface_driver (struct usb_device *dev,
|
||||
struct usb_interface *interface);
|
||||
|
||||
#define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
|
||||
|
||||
#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
|
||||
|
||||
/*
|
||||
* USB device fs stuff
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_USB_DEVICEFS
|
||||
|
||||
/*
|
||||
* these are expected to be called from the USB core/hub thread
|
||||
* with the kernel lock held
|
||||
*/
|
||||
extern void usbfs_add_bus(struct usb_bus *bus);
|
||||
extern void usbfs_remove_bus(struct usb_bus *bus);
|
||||
extern void usbfs_add_device(struct usb_device *dev);
|
||||
extern void usbfs_remove_device(struct usb_device *dev);
|
||||
extern void usbfs_update_special (void);
|
||||
|
||||
extern int usbfs_init(void);
|
||||
extern void usbfs_cleanup(void);
|
||||
|
||||
#else /* CONFIG_USB_DEVICEFS */
|
||||
|
||||
static _inline void usbfs_add_bus(struct usb_bus *bus) {}
|
||||
static _inline void usbfs_remove_bus(struct usb_bus *bus) {}
|
||||
static _inline void usbfs_add_device(struct usb_device *dev) {}
|
||||
static _inline void usbfs_remove_device(struct usb_device *dev) {}
|
||||
static _inline void usbfs_update_special (void) {}
|
||||
|
||||
static _inline int usbfs_init(void) { return 0; }
|
||||
static _inline void usbfs_cleanup(void) { }
|
||||
|
||||
#endif /* CONFIG_USB_DEVICEFS */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */
|
||||
// bleech -- resurfaced in 2.4.11 or 2.4.12
|
||||
#define bitmap DeviceRemovable
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* random stuff */
|
||||
|
||||
#define RUN_CONTEXT (in_irq () ? "in_irq" \
|
||||
: (in_interrupt () ? "in_interrupt" : "can sleep"))
|
||||
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -1,201 +1,201 @@
|
|||
#ifndef __LINUX_HUB_H
|
||||
#define __LINUX_HUB_H
|
||||
|
||||
/*
|
||||
* Hub protocol and driver data structures.
|
||||
*
|
||||
* Some of these are known to the "virtual root hub" code
|
||||
* in host controller drivers.
|
||||
*/
|
||||
#if 0
|
||||
#include <linux/list.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/compiler.h> /* likely()/unlikely() */
|
||||
#endif
|
||||
/*
|
||||
* Hub request types
|
||||
*/
|
||||
|
||||
#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)
|
||||
#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)
|
||||
|
||||
/*
|
||||
* Hub class requests
|
||||
* See USB 2.0 spec Table 11-16
|
||||
*/
|
||||
#define HUB_CLEAR_TT_BUFFER 8
|
||||
#define HUB_RESET_TT 9
|
||||
#define HUB_GET_TT_STATE 10
|
||||
#define HUB_STOP_TT 11
|
||||
|
||||
/*
|
||||
* Hub Class feature numbers
|
||||
* See USB 2.0 spec Table 11-17
|
||||
*/
|
||||
#define C_HUB_LOCAL_POWER 0
|
||||
#define C_HUB_OVER_CURRENT 1
|
||||
|
||||
/*
|
||||
* Port feature numbers
|
||||
* See USB 2.0 spec Table 11-17
|
||||
*/
|
||||
#define USB_PORT_FEAT_CONNECTION 0
|
||||
#define USB_PORT_FEAT_ENABLE 1
|
||||
#define USB_PORT_FEAT_SUSPEND 2
|
||||
#define USB_PORT_FEAT_OVER_CURRENT 3
|
||||
#define USB_PORT_FEAT_RESET 4
|
||||
#define USB_PORT_FEAT_POWER 8
|
||||
#define USB_PORT_FEAT_LOWSPEED 9
|
||||
#define USB_PORT_FEAT_HIGHSPEED 10
|
||||
#define USB_PORT_FEAT_C_CONNECTION 16
|
||||
#define USB_PORT_FEAT_C_ENABLE 17
|
||||
#define USB_PORT_FEAT_C_SUSPEND 18
|
||||
#define USB_PORT_FEAT_C_OVER_CURRENT 19
|
||||
#define USB_PORT_FEAT_C_RESET 20
|
||||
#define USB_PORT_FEAT_TEST 21
|
||||
#define USB_PORT_FEAT_INDICATOR 22
|
||||
|
||||
/*
|
||||
* Hub Status and Hub Change results
|
||||
* See USB 2.0 spec Table 11-19 and Table 11-20
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct usb_port_status {
|
||||
__u16 wPortStatus;
|
||||
__u16 wPortChange;
|
||||
}; // __attribute__ ((packed));
|
||||
#pragma pack(1)
|
||||
|
||||
/*
|
||||
* wPortStatus bit field
|
||||
* See USB 2.0 spec Table 11-21
|
||||
*/
|
||||
#define USB_PORT_STAT_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_RESET 0x0010
|
||||
/* bits 5 to 7 are reserved */
|
||||
#define USB_PORT_STAT_POWER 0x0100
|
||||
#define USB_PORT_STAT_LOW_SPEED 0x0200
|
||||
#define USB_PORT_STAT_HIGH_SPEED 0x0400
|
||||
#define USB_PORT_STAT_TEST 0x0800
|
||||
#define USB_PORT_STAT_INDICATOR 0x1000
|
||||
/* bits 13 to 15 are reserved */
|
||||
|
||||
/*
|
||||
* wPortChange bit field
|
||||
* See USB 2.0 spec Table 11-22
|
||||
* Bits 0 to 4 shown, bits 5 to 15 are reserved
|
||||
*/
|
||||
#define USB_PORT_STAT_C_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_C_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_C_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_C_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_C_RESET 0x0010
|
||||
|
||||
/*
|
||||
* wHubCharacteristics (masks)
|
||||
* See USB 2.0 spec Table 11-13, offset 3
|
||||
*/
|
||||
#define HUB_CHAR_LPSM 0x0003 /* D1 .. D0 */
|
||||
#define HUB_CHAR_COMPOUND 0x0004 /* D2 */
|
||||
#define HUB_CHAR_OCPM 0x0018 /* D4 .. D3 */
|
||||
#define HUB_CHAR_TTTT 0x0060 /* D6 .. D5 */
|
||||
#define HUB_CHAR_PORTIND 0x0080 /* D7 */
|
||||
|
||||
#pragma pack(1)
|
||||
struct usb_hub_status {
|
||||
__u16 wHubStatus;
|
||||
__u16 wHubChange;
|
||||
};// __attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
/*
|
||||
* Hub Status & Hub Change bit masks
|
||||
* See USB 2.0 spec Table 11-19 and Table 11-20
|
||||
* Bits 0 and 1 for wHubStatus and wHubChange
|
||||
* Bits 2 to 15 are reserved for both
|
||||
*/
|
||||
#define HUB_STATUS_LOCAL_POWER 0x0001
|
||||
#define HUB_STATUS_OVERCURRENT 0x0002
|
||||
#define HUB_CHANGE_LOCAL_POWER 0x0001
|
||||
#define HUB_CHANGE_OVERCURRENT 0x0002
|
||||
|
||||
|
||||
/*
|
||||
* Hub descriptor
|
||||
* See USB 2.0 spec Table 11-13
|
||||
*/
|
||||
|
||||
#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
|
||||
#define USB_DT_HUB_NONVAR_SIZE 7
|
||||
|
||||
#pragma pack(1)
|
||||
struct usb_hub_descriptor {
|
||||
__u8 bDescLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bNbrPorts;
|
||||
__u16 wHubCharacteristics;
|
||||
__u8 bPwrOn2PwrGood;
|
||||
__u8 bHubContrCurrent;
|
||||
/* add 1 bit for hub status change; round to bytes */
|
||||
__u8 DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
|
||||
__u8 PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
struct usb_device;
|
||||
|
||||
/*
|
||||
* As of USB 2.0, full/low speed devices are segregated into trees.
|
||||
* One type grows from USB 1.1 host controllers (OHCI, UHCI etc).
|
||||
* The other type grows from high speed hubs when they connect to
|
||||
* full/low speed devices using "Transaction Translators" (TTs).
|
||||
*
|
||||
* TTs should only be known to the hub driver, and high speed bus
|
||||
* drivers (only EHCI for now). They affect periodic scheduling and
|
||||
* sometimes control/bulk error recovery.
|
||||
*/
|
||||
struct usb_tt {
|
||||
struct usb_device *hub; /* upstream highspeed hub */
|
||||
int multi; /* true means one TT per port */
|
||||
|
||||
/* for control/bulk error recovery (CLEAR_TT_BUFFER) */
|
||||
spinlock_t lock;
|
||||
struct list_head clear_list; /* of usb_tt_clear */
|
||||
struct work_struct kevent;
|
||||
};
|
||||
|
||||
struct usb_tt_clear {
|
||||
struct list_head clear_list;
|
||||
unsigned tt;
|
||||
u16 devinfo;
|
||||
};
|
||||
|
||||
extern void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe);
|
||||
|
||||
struct usb_hub {
|
||||
struct usb_interface *intf; /* the "real" device */
|
||||
struct urb *urb; /* for interrupt polling pipe */
|
||||
|
||||
/* buffer for urb ... 1 bit each for hub and children, rounded up */
|
||||
char (*buffer)[(USB_MAXCHILDREN + 1 + 7) / 8];
|
||||
dma_addr_t buffer_dma; /* DMA address for buffer */
|
||||
union {
|
||||
struct usb_hub_status hub;
|
||||
struct usb_port_status port;
|
||||
} *status; /* buffer for status reports */
|
||||
|
||||
int error; /* last reported error */
|
||||
int nerrors; /* track consecutive errors */
|
||||
|
||||
struct list_head hub_list; /* all hubs */
|
||||
struct list_head event_list; /* hubs w/data or errs ready */
|
||||
|
||||
struct usb_hub_descriptor *descriptor; /* class descriptor */
|
||||
struct semaphore khubd_sem;
|
||||
struct usb_tt tt; /* Transaction Translator */
|
||||
};
|
||||
|
||||
#endif /* __LINUX_HUB_H */
|
||||
#ifndef __LINUX_HUB_H
|
||||
#define __LINUX_HUB_H
|
||||
|
||||
/*
|
||||
* Hub protocol and driver data structures.
|
||||
*
|
||||
* Some of these are known to the "virtual root hub" code
|
||||
* in host controller drivers.
|
||||
*/
|
||||
#if 0
|
||||
#include <linux/list.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/compiler.h> /* likely()/unlikely() */
|
||||
#endif
|
||||
/*
|
||||
* Hub request types
|
||||
*/
|
||||
|
||||
#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)
|
||||
#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)
|
||||
|
||||
/*
|
||||
* Hub class requests
|
||||
* See USB 2.0 spec Table 11-16
|
||||
*/
|
||||
#define HUB_CLEAR_TT_BUFFER 8
|
||||
#define HUB_RESET_TT 9
|
||||
#define HUB_GET_TT_STATE 10
|
||||
#define HUB_STOP_TT 11
|
||||
|
||||
/*
|
||||
* Hub Class feature numbers
|
||||
* See USB 2.0 spec Table 11-17
|
||||
*/
|
||||
#define C_HUB_LOCAL_POWER 0
|
||||
#define C_HUB_OVER_CURRENT 1
|
||||
|
||||
/*
|
||||
* Port feature numbers
|
||||
* See USB 2.0 spec Table 11-17
|
||||
*/
|
||||
#define USB_PORT_FEAT_CONNECTION 0
|
||||
#define USB_PORT_FEAT_ENABLE 1
|
||||
#define USB_PORT_FEAT_SUSPEND 2
|
||||
#define USB_PORT_FEAT_OVER_CURRENT 3
|
||||
#define USB_PORT_FEAT_RESET 4
|
||||
#define USB_PORT_FEAT_POWER 8
|
||||
#define USB_PORT_FEAT_LOWSPEED 9
|
||||
#define USB_PORT_FEAT_HIGHSPEED 10
|
||||
#define USB_PORT_FEAT_C_CONNECTION 16
|
||||
#define USB_PORT_FEAT_C_ENABLE 17
|
||||
#define USB_PORT_FEAT_C_SUSPEND 18
|
||||
#define USB_PORT_FEAT_C_OVER_CURRENT 19
|
||||
#define USB_PORT_FEAT_C_RESET 20
|
||||
#define USB_PORT_FEAT_TEST 21
|
||||
#define USB_PORT_FEAT_INDICATOR 22
|
||||
|
||||
/*
|
||||
* Hub Status and Hub Change results
|
||||
* See USB 2.0 spec Table 11-19 and Table 11-20
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct usb_port_status {
|
||||
__u16 wPortStatus;
|
||||
__u16 wPortChange;
|
||||
}; // __attribute__ ((packed));
|
||||
#pragma pack(1)
|
||||
|
||||
/*
|
||||
* wPortStatus bit field
|
||||
* See USB 2.0 spec Table 11-21
|
||||
*/
|
||||
#define USB_PORT_STAT_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_RESET 0x0010
|
||||
/* bits 5 to 7 are reserved */
|
||||
#define USB_PORT_STAT_POWER 0x0100
|
||||
#define USB_PORT_STAT_LOW_SPEED 0x0200
|
||||
#define USB_PORT_STAT_HIGH_SPEED 0x0400
|
||||
#define USB_PORT_STAT_TEST 0x0800
|
||||
#define USB_PORT_STAT_INDICATOR 0x1000
|
||||
/* bits 13 to 15 are reserved */
|
||||
|
||||
/*
|
||||
* wPortChange bit field
|
||||
* See USB 2.0 spec Table 11-22
|
||||
* Bits 0 to 4 shown, bits 5 to 15 are reserved
|
||||
*/
|
||||
#define USB_PORT_STAT_C_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_C_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_C_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_C_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_C_RESET 0x0010
|
||||
|
||||
/*
|
||||
* wHubCharacteristics (masks)
|
||||
* See USB 2.0 spec Table 11-13, offset 3
|
||||
*/
|
||||
#define HUB_CHAR_LPSM 0x0003 /* D1 .. D0 */
|
||||
#define HUB_CHAR_COMPOUND 0x0004 /* D2 */
|
||||
#define HUB_CHAR_OCPM 0x0018 /* D4 .. D3 */
|
||||
#define HUB_CHAR_TTTT 0x0060 /* D6 .. D5 */
|
||||
#define HUB_CHAR_PORTIND 0x0080 /* D7 */
|
||||
|
||||
#pragma pack(1)
|
||||
struct usb_hub_status {
|
||||
__u16 wHubStatus;
|
||||
__u16 wHubChange;
|
||||
};// __attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
/*
|
||||
* Hub Status & Hub Change bit masks
|
||||
* See USB 2.0 spec Table 11-19 and Table 11-20
|
||||
* Bits 0 and 1 for wHubStatus and wHubChange
|
||||
* Bits 2 to 15 are reserved for both
|
||||
*/
|
||||
#define HUB_STATUS_LOCAL_POWER 0x0001
|
||||
#define HUB_STATUS_OVERCURRENT 0x0002
|
||||
#define HUB_CHANGE_LOCAL_POWER 0x0001
|
||||
#define HUB_CHANGE_OVERCURRENT 0x0002
|
||||
|
||||
|
||||
/*
|
||||
* Hub descriptor
|
||||
* See USB 2.0 spec Table 11-13
|
||||
*/
|
||||
|
||||
#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
|
||||
#define USB_DT_HUB_NONVAR_SIZE 7
|
||||
|
||||
#pragma pack(1)
|
||||
struct usb_hub_descriptor {
|
||||
__u8 bDescLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bNbrPorts;
|
||||
__u16 wHubCharacteristics;
|
||||
__u8 bPwrOn2PwrGood;
|
||||
__u8 bHubContrCurrent;
|
||||
/* add 1 bit for hub status change; round to bytes */
|
||||
__u8 DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
|
||||
__u8 PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
struct usb_device;
|
||||
|
||||
/*
|
||||
* As of USB 2.0, full/low speed devices are segregated into trees.
|
||||
* One type grows from USB 1.1 host controllers (OHCI, UHCI etc).
|
||||
* The other type grows from high speed hubs when they connect to
|
||||
* full/low speed devices using "Transaction Translators" (TTs).
|
||||
*
|
||||
* TTs should only be known to the hub driver, and high speed bus
|
||||
* drivers (only EHCI for now). They affect periodic scheduling and
|
||||
* sometimes control/bulk error recovery.
|
||||
*/
|
||||
struct usb_tt {
|
||||
struct usb_device *hub; /* upstream highspeed hub */
|
||||
int multi; /* true means one TT per port */
|
||||
|
||||
/* for control/bulk error recovery (CLEAR_TT_BUFFER) */
|
||||
spinlock_t lock;
|
||||
struct list_head clear_list; /* of usb_tt_clear */
|
||||
struct work_struct kevent;
|
||||
};
|
||||
|
||||
struct usb_tt_clear {
|
||||
struct list_head clear_list;
|
||||
unsigned tt;
|
||||
u16 devinfo;
|
||||
};
|
||||
|
||||
extern void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe);
|
||||
|
||||
struct usb_hub {
|
||||
struct usb_interface *intf; /* the "real" device */
|
||||
struct urb *urb; /* for interrupt polling pipe */
|
||||
|
||||
/* buffer for urb ... 1 bit each for hub and children, rounded up */
|
||||
char (*buffer)[(USB_MAXCHILDREN + 1 + 7) / 8];
|
||||
dma_addr_t buffer_dma; /* DMA address for buffer */
|
||||
union {
|
||||
struct usb_hub_status hub;
|
||||
struct usb_port_status port;
|
||||
} *status; /* buffer for status reports */
|
||||
|
||||
int error; /* last reported error */
|
||||
int nerrors; /* track consecutive errors */
|
||||
|
||||
struct list_head hub_list; /* all hubs */
|
||||
struct list_head event_list; /* hubs w/data or errs ready */
|
||||
|
||||
struct usb_hub_descriptor *descriptor; /* class descriptor */
|
||||
struct semaphore khubd_sem;
|
||||
struct usb_tt tt; /* Transaction Translator */
|
||||
};
|
||||
|
||||
#endif /* __LINUX_HUB_H */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Functions local to drivers/usb/core/ */
|
||||
|
||||
extern void usb_create_driverfs_dev_files (struct usb_device *dev);
|
||||
extern void usb_create_driverfs_intf_files (struct usb_interface *intf);
|
||||
|
||||
/* Functions local to drivers/usb/core/ */
|
||||
|
||||
extern void usb_create_driverfs_dev_files (struct usb_device *dev);
|
||||
extern void usb_create_driverfs_intf_files (struct usb_interface *intf);
|
||||
|
||||
|
|
|
@ -1,417 +1,417 @@
|
|||
/*
|
||||
* OHCI HCD (Host Controller Driver) for USB.
|
||||
*
|
||||
* (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
|
||||
* (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
|
||||
*
|
||||
* This file is licenced under the GPL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* OHCI Endpoint Descriptor (ED) ... holds TD queue
|
||||
* See OHCI spec, section 4.2
|
||||
*
|
||||
* This is a "Queue Head" for those transfers, which is why
|
||||
* both EHCI and UHCI call similar structures a "QH".
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct ed {
|
||||
/* first fields are hardware-specified, le32 */
|
||||
__u32 hwINFO; /* endpoint config bitmap */
|
||||
/* info bits defined by hcd */
|
||||
#define ED_DEQUEUE __constant_cpu_to_le32(1 << 27)
|
||||
/* info bits defined by the hardware */
|
||||
#define ED_ISO __constant_cpu_to_le32(1 << 15)
|
||||
#define ED_SKIP __constant_cpu_to_le32(1 << 14)
|
||||
#define ED_LOWSPEED __constant_cpu_to_le32(1 << 13)
|
||||
#define ED_OUT __constant_cpu_to_le32(0x01 << 11)
|
||||
#define ED_IN __constant_cpu_to_le32(0x02 << 11)
|
||||
__u32 hwTailP; /* tail of TD list */
|
||||
__u32 hwHeadP; /* head of TD list (hc r/w) */
|
||||
#define ED_C __constant_cpu_to_le32(0x02) /* toggle carry */
|
||||
#define ED_H __constant_cpu_to_le32(0x01) /* halted */
|
||||
__u32 hwNextED; /* next ED in list */
|
||||
|
||||
/* rest are purely for the driver's use */
|
||||
dma_addr_t dma; /* addr of ED */
|
||||
struct td *dummy; /* next TD to activate */
|
||||
|
||||
/* host's view of schedule */
|
||||
struct ed *ed_next; /* on schedule or rm_list */
|
||||
struct ed *ed_prev; /* for non-interrupt EDs */
|
||||
struct list_head td_list; /* "shadow list" of our TDs */
|
||||
|
||||
/* create --> IDLE --> OPER --> ... --> IDLE --> destroy
|
||||
* usually: OPER --> UNLINK --> (IDLE | OPER) --> ...
|
||||
* some special cases : OPER --> IDLE ...
|
||||
*/
|
||||
u8 state; /* ED_{IDLE,UNLINK,OPER} */
|
||||
#define ED_IDLE 0x00 /* NOT linked to HC */
|
||||
#define ED_UNLINK 0x01 /* being unlinked from hc */
|
||||
#define ED_OPER 0x02 /* IS linked to hc */
|
||||
|
||||
u8 type; /* PIPE_{BULK,...} */
|
||||
|
||||
/* periodic scheduling params (for intr and iso) */
|
||||
u8 branch;
|
||||
u16 interval;
|
||||
u16 load;
|
||||
u16 last_iso; /* iso only */
|
||||
|
||||
/* HC may see EDs on rm_list until next frame (frame_no == tick) */
|
||||
u16 tick;
|
||||
}; // __attribute__ ((aligned(16)));
|
||||
#pragma pack()
|
||||
|
||||
#define ED_MASK ((u32)~0x0f) /* strip hw status in low addr bits */
|
||||
|
||||
|
||||
/*
|
||||
* OHCI Transfer Descriptor (TD) ... one per transfer segment
|
||||
* See OHCI spec, sections 4.3.1 (general = control/bulk/interrupt)
|
||||
* and 4.3.2 (iso)
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct td {
|
||||
/* first fields are hardware-specified, le32 */
|
||||
__u32 hwINFO; /* transfer info bitmask */
|
||||
|
||||
/* hwINFO bits for both general and iso tds: */
|
||||
#define TD_CC 0xf0000000 /* condition code */
|
||||
#define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
|
||||
//#define TD_CC_SET(td_p, cc) (td_p) = ((td_p) & 0x0fffffff) | (((cc) & 0x0f) << 28)
|
||||
#define TD_DI 0x00E00000 /* frames before interrupt */
|
||||
#define TD_DI_SET(X) (((X) & 0x07)<< 21)
|
||||
/* these two bits are available for definition/use by HCDs in both
|
||||
* general and iso tds ... others are available for only one type
|
||||
*/
|
||||
#define TD_DONE 0x00020000 /* retired to donelist */
|
||||
#define TD_ISO 0x00010000 /* copy of ED_ISO */
|
||||
|
||||
/* hwINFO bits for general tds: */
|
||||
#define TD_EC 0x0C000000 /* error count */
|
||||
#define TD_T 0x03000000 /* data toggle state */
|
||||
#define TD_T_DATA0 0x02000000 /* DATA0 */
|
||||
#define TD_T_DATA1 0x03000000 /* DATA1 */
|
||||
#define TD_T_TOGGLE 0x00000000 /* uses ED_C */
|
||||
#define TD_DP 0x00180000 /* direction/pid */
|
||||
#define TD_DP_SETUP 0x00000000 /* SETUP pid */
|
||||
#define TD_DP_IN 0x00100000 /* IN pid */
|
||||
#define TD_DP_OUT 0x00080000 /* OUT pid */
|
||||
/* 0x00180000 rsvd */
|
||||
#define TD_R 0x00040000 /* round: short packets OK? */
|
||||
|
||||
/* (no hwINFO #defines yet for iso tds) */
|
||||
|
||||
__u32 hwCBP; /* Current Buffer Pointer (or 0) */
|
||||
__u32 hwNextTD; /* Next TD Pointer */
|
||||
__u32 hwBE; /* Memory Buffer End Pointer */
|
||||
|
||||
/* PSW is only for ISO */
|
||||
#define MAXPSW 1 /* hardware allows 8 */
|
||||
__u16 hwPSW [MAXPSW];
|
||||
|
||||
/* rest are purely for the driver's use */
|
||||
__u8 index;
|
||||
struct ed *ed;
|
||||
struct td *td_hash; /* dma-->td hashtable */
|
||||
struct td *next_dl_td;
|
||||
struct urb *urb;
|
||||
|
||||
dma_addr_t td_dma; /* addr of this TD */
|
||||
dma_addr_t data_dma; /* addr of data it points to */
|
||||
|
||||
struct list_head td_list; /* "shadow list", TDs on same ED */
|
||||
}; // __attribute__ ((aligned(32))); /* c/b/i need 16; only iso needs 32 */
|
||||
#pragma pack()
|
||||
|
||||
#define TD_MASK ((u32)~0x1f) /* strip hw status in low addr bits */
|
||||
|
||||
/*
|
||||
* Hardware transfer status codes -- CC from td->hwINFO or td->hwPSW
|
||||
*/
|
||||
#define TD_CC_NOERROR 0x00
|
||||
#define TD_CC_CRC 0x01
|
||||
#define TD_CC_BITSTUFFING 0x02
|
||||
#define TD_CC_DATATOGGLEM 0x03
|
||||
#define TD_CC_STALL 0x04
|
||||
#define TD_DEVNOTRESP 0x05
|
||||
#define TD_PIDCHECKFAIL 0x06
|
||||
#define TD_UNEXPECTEDPID 0x07
|
||||
#define TD_DATAOVERRUN 0x08
|
||||
#define TD_DATAUNDERRUN 0x09
|
||||
/* 0x0A, 0x0B reserved for hardware */
|
||||
#define TD_BUFFEROVERRUN 0x0C
|
||||
#define TD_BUFFERUNDERRUN 0x0D
|
||||
/* 0x0E, 0x0F reserved for HCD */
|
||||
#define TD_NOTACCESSED 0x0F
|
||||
|
||||
|
||||
/* map OHCI TD status codes (CC) to errno values */
|
||||
static const int cc_to_error [16] = {
|
||||
/* No Error */ 0,
|
||||
/* CRC Error */ -EILSEQ,
|
||||
/* Bit Stuff */ -EPROTO,
|
||||
/* Data Togg */ -EILSEQ,
|
||||
/* Stall */ -EPIPE,
|
||||
/* DevNotResp */ -ETIMEDOUT,
|
||||
/* PIDCheck */ -EPROTO,
|
||||
/* UnExpPID */ -EPROTO,
|
||||
/* DataOver */ -EOVERFLOW,
|
||||
/* DataUnder */ -EREMOTEIO,
|
||||
/* (for hw) */ -EIO,
|
||||
/* (for hw) */ -EIO,
|
||||
/* BufferOver */ -ECOMM,
|
||||
/* BuffUnder */ -ENOSR,
|
||||
/* (for HCD) */ -EALREADY,
|
||||
/* (for HCD) */ -EALREADY
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* The HCCA (Host Controller Communications Area) is a 256 byte
|
||||
* structure defined section 4.4.1 of the OHCI spec. The HC is
|
||||
* told the base address of it. It must be 256-byte aligned.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct ohci_hcca {
|
||||
#define NUM_INTS 32
|
||||
__u32 int_table [NUM_INTS]; /* periodic schedule */
|
||||
__u16 frame_no; /* current frame number */
|
||||
__u16 pad1; /* set to 0 on each frame_no change */
|
||||
__u32 done_head; /* info returned for an interrupt */
|
||||
u8 reserved_for_hc [116];
|
||||
u8 what [4]; /* spec only identifies 252 bytes :) */
|
||||
}; // __attribute__ ((aligned(256)));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*
|
||||
* This is the structure of the OHCI controller's memory mapped I/O region.
|
||||
* You must use readl() and writel() (in <asm/io.h>) to access these fields!!
|
||||
* Layout is in section 7 (and appendix B) of the spec.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct ohci_regs {
|
||||
/* control and status registers (section 7.1) */
|
||||
__u32 revision;
|
||||
__u32 control;
|
||||
__u32 cmdstatus;
|
||||
__u32 intrstatus;
|
||||
__u32 intrenable;
|
||||
__u32 intrdisable;
|
||||
|
||||
/* memory pointers (section 7.2) */
|
||||
__u32 hcca;
|
||||
__u32 ed_periodcurrent;
|
||||
__u32 ed_controlhead;
|
||||
__u32 ed_controlcurrent;
|
||||
__u32 ed_bulkhead;
|
||||
__u32 ed_bulkcurrent;
|
||||
__u32 donehead;
|
||||
|
||||
/* frame counters (section 7.3) */
|
||||
__u32 fminterval;
|
||||
__u32 fmremaining;
|
||||
__u32 fmnumber;
|
||||
__u32 periodicstart;
|
||||
__u32 lsthresh;
|
||||
|
||||
/* Root hub ports (section 7.4) */
|
||||
struct ohci_roothub_regs {
|
||||
__u32 a;
|
||||
__u32 b;
|
||||
__u32 status;
|
||||
#define MAX_ROOT_PORTS 15 /* maximum OHCI root hub ports (RH_A_NDP) */
|
||||
__u32 portstatus [MAX_ROOT_PORTS];
|
||||
} roothub;
|
||||
|
||||
/* and optional "legacy support" registers (appendix B) at 0x0100 */
|
||||
|
||||
}; // __attribute__ ((aligned(32)));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/* OHCI CONTROL AND STATUS REGISTER MASKS */
|
||||
|
||||
/*
|
||||
* HcControl (control) register masks
|
||||
*/
|
||||
#define OHCI_CTRL_CBSR (3 << 0) /* control/bulk service ratio */
|
||||
#define OHCI_CTRL_PLE (1 << 2) /* periodic list enable */
|
||||
#define OHCI_CTRL_IE (1 << 3) /* isochronous enable */
|
||||
#define OHCI_CTRL_CLE (1 << 4) /* control list enable */
|
||||
#define OHCI_CTRL_BLE (1 << 5) /* bulk list enable */
|
||||
#define OHCI_CTRL_HCFS (3 << 6) /* host controller functional state */
|
||||
#define OHCI_CTRL_IR (1 << 8) /* interrupt routing */
|
||||
#define OHCI_CTRL_RWC (1 << 9) /* remote wakeup connected */
|
||||
#define OHCI_CTRL_RWE (1 << 10) /* remote wakeup enable */
|
||||
|
||||
/* pre-shifted values for HCFS */
|
||||
# define OHCI_USB_RESET (0 << 6)
|
||||
# define OHCI_USB_RESUME (1 << 6)
|
||||
# define OHCI_USB_OPER (2 << 6)
|
||||
# define OHCI_USB_SUSPEND (3 << 6)
|
||||
|
||||
/*
|
||||
* HcCommandStatus (cmdstatus) register masks
|
||||
*/
|
||||
#define OHCI_HCR (1 << 0) /* host controller reset */
|
||||
#define OHCI_CLF (1 << 1) /* control list filled */
|
||||
#define OHCI_BLF (1 << 2) /* bulk list filled */
|
||||
#define OHCI_OCR (1 << 3) /* ownership change request */
|
||||
#define OHCI_SOC (3 << 16) /* scheduling overrun count */
|
||||
|
||||
/*
|
||||
* masks used with interrupt registers:
|
||||
* HcInterruptStatus (intrstatus)
|
||||
* HcInterruptEnable (intrenable)
|
||||
* HcInterruptDisable (intrdisable)
|
||||
*/
|
||||
#define OHCI_INTR_SO (1 << 0) /* scheduling overrun */
|
||||
#define OHCI_INTR_WDH (1 << 1) /* writeback of done_head */
|
||||
#define OHCI_INTR_SF (1 << 2) /* start frame */
|
||||
#define OHCI_INTR_RD (1 << 3) /* resume detect */
|
||||
#define OHCI_INTR_UE (1 << 4) /* unrecoverable error */
|
||||
#define OHCI_INTR_FNO (1 << 5) /* frame number overflow */
|
||||
#define OHCI_INTR_RHSC (1 << 6) /* root hub status change */
|
||||
#define OHCI_INTR_OC (1 << 30) /* ownership change */
|
||||
#define OHCI_INTR_MIE (1 << 31) /* master interrupt enable */
|
||||
|
||||
|
||||
/* OHCI ROOT HUB REGISTER MASKS */
|
||||
|
||||
/* roothub.portstatus [i] bits */
|
||||
#define RH_PS_CCS 0x00000001 /* current connect status */
|
||||
#define RH_PS_PES 0x00000002 /* port enable status*/
|
||||
#define RH_PS_PSS 0x00000004 /* port suspend status */
|
||||
#define RH_PS_POCI 0x00000008 /* port over current indicator */
|
||||
#define RH_PS_PRS 0x00000010 /* port reset status */
|
||||
#define RH_PS_PPS 0x00000100 /* port power status */
|
||||
#define RH_PS_LSDA 0x00000200 /* low speed device attached */
|
||||
#define RH_PS_CSC 0x00010000 /* connect status change */
|
||||
#define RH_PS_PESC 0x00020000 /* port enable status change */
|
||||
#define RH_PS_PSSC 0x00040000 /* port suspend status change */
|
||||
#define RH_PS_OCIC 0x00080000 /* over current indicator change */
|
||||
#define RH_PS_PRSC 0x00100000 /* port reset status change */
|
||||
|
||||
/* roothub.status bits */
|
||||
#define RH_HS_LPS 0x00000001 /* local power status */
|
||||
#define RH_HS_OCI 0x00000002 /* over current indicator */
|
||||
#define RH_HS_DRWE 0x00008000 /* device remote wakeup enable */
|
||||
#define RH_HS_LPSC 0x00010000 /* local power status change */
|
||||
#define RH_HS_OCIC 0x00020000 /* over current indicator change */
|
||||
#define RH_HS_CRWE 0x80000000 /* clear remote wakeup enable */
|
||||
|
||||
/* roothub.b masks */
|
||||
#define RH_B_DR 0x0000ffff /* device removable flags */
|
||||
#define RH_B_PPCM 0xffff0000 /* port power control mask */
|
||||
|
||||
/* roothub.a masks */
|
||||
#define RH_A_NDP (0xff << 0) /* number of downstream ports */
|
||||
#define RH_A_PSM (1 << 8) /* power switching mode */
|
||||
#define RH_A_NPS (1 << 9) /* no power switching */
|
||||
#define RH_A_DT (1 << 10) /* device type (mbz) */
|
||||
#define RH_A_OCPM (1 << 11) /* over current protection mode */
|
||||
#define RH_A_NOCP (1 << 12) /* no over current protection */
|
||||
#define RH_A_POTPGT (0xff << 24) /* power on to power good time */
|
||||
|
||||
|
||||
/* hcd-private per-urb state */
|
||||
typedef struct urb_priv {
|
||||
struct ed *ed;
|
||||
__u16 length; // # tds in this request
|
||||
__u16 td_cnt; // tds already serviced
|
||||
int state;
|
||||
struct td *td [0]; // all TDs in this request
|
||||
|
||||
} urb_priv_t;
|
||||
|
||||
#define URB_DEL 1
|
||||
|
||||
#define TD_HASH_SIZE 64 /* power'o'two */
|
||||
// sizeof (struct td) ~= 64 == 2^6 ...
|
||||
#define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
|
||||
|
||||
|
||||
/*
|
||||
* This is the full ohci controller description
|
||||
*
|
||||
* Note how the "proper" USB information is just
|
||||
* a subset of what the full implementation needs. (Linus)
|
||||
*/
|
||||
|
||||
struct ohci_hcd {
|
||||
spinlock_t lock;
|
||||
|
||||
/*
|
||||
* I/O memory used to communicate with the HC (dma-consistent)
|
||||
*/
|
||||
struct ohci_regs *regs;
|
||||
|
||||
/*
|
||||
* main memory used to communicate with the HC (dma-consistent).
|
||||
* hcd adds to schedule for a live hc any time, but removals finish
|
||||
* only at the start of the next frame.
|
||||
*/
|
||||
struct ohci_hcca *hcca;
|
||||
dma_addr_t hcca_dma;
|
||||
|
||||
struct ed *ed_rm_list; /* to be removed */
|
||||
|
||||
struct ed *ed_bulktail; /* last in bulk list */
|
||||
struct ed *ed_controltail; /* last in ctrl list */
|
||||
struct ed *periodic [NUM_INTS]; /* shadow int_table */
|
||||
|
||||
/*
|
||||
* memory management for queue data structures
|
||||
*/
|
||||
struct pci_pool *td_cache;
|
||||
struct pci_pool *ed_cache;
|
||||
struct td *td_hash [TD_HASH_SIZE];
|
||||
|
||||
/*
|
||||
* driver state
|
||||
*/
|
||||
int disabled; /* e.g. got a UE, we're hung */
|
||||
int sleeping;
|
||||
int load [NUM_INTS];
|
||||
u32 hc_control; /* copy of hc control reg */
|
||||
|
||||
unsigned long flags; /* for HC bugs */
|
||||
#define OHCI_QUIRK_AMD756 0x01 /* erratum #4 */
|
||||
#define OHCI_QUIRK_SUPERIO 0x02 /* natsemi */
|
||||
// there are also chip quirks/bugs in init logic
|
||||
|
||||
/*
|
||||
* framework state
|
||||
*/
|
||||
struct usb_hcd hcd;
|
||||
};
|
||||
|
||||
#define hcd_to_ohci(hcd_ptr) container_of(hcd_ptr, struct ohci_hcd, hcd)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef DEBUG
|
||||
#define STUB_DEBUG_FILES
|
||||
#endif /* DEBUG */
|
||||
|
||||
//#define ohci_dbg(ohci, fmt, args...) dev_dbg ((ohci)->hcd.controller , fmt , ## args )
|
||||
//#define ohci_err(ohci, fmt, args...) dev_err ((ohci)->hcd.controller , fmt , ## args )
|
||||
//#define ohci_info(ohci, fmt, args...) dev_info ((ohci)->hcd.controller , fmt , ## args )
|
||||
//#define ohci_warn(ohci, fmt, args...) dev_warn ((ohci)->hcd.controller , fmt , ## args )
|
||||
|
||||
int ohci_dbg(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_err(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_info(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_warn(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_vdbg(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
|
||||
|
||||
//#ifdef OHCI_VERBOSE_DEBUG
|
||||
//# define ohci_vdbg ohci_dbg
|
||||
//#else
|
||||
//# define ohci_vdbg(ohci, fmt, args...) do { } while (0)
|
||||
//#endif
|
||||
|
||||
/*
|
||||
* OHCI HCD (Host Controller Driver) for USB.
|
||||
*
|
||||
* (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
|
||||
* (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
|
||||
*
|
||||
* This file is licenced under the GPL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* OHCI Endpoint Descriptor (ED) ... holds TD queue
|
||||
* See OHCI spec, section 4.2
|
||||
*
|
||||
* This is a "Queue Head" for those transfers, which is why
|
||||
* both EHCI and UHCI call similar structures a "QH".
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct ed {
|
||||
/* first fields are hardware-specified, le32 */
|
||||
__u32 hwINFO; /* endpoint config bitmap */
|
||||
/* info bits defined by hcd */
|
||||
#define ED_DEQUEUE __constant_cpu_to_le32(1 << 27)
|
||||
/* info bits defined by the hardware */
|
||||
#define ED_ISO __constant_cpu_to_le32(1 << 15)
|
||||
#define ED_SKIP __constant_cpu_to_le32(1 << 14)
|
||||
#define ED_LOWSPEED __constant_cpu_to_le32(1 << 13)
|
||||
#define ED_OUT __constant_cpu_to_le32(0x01 << 11)
|
||||
#define ED_IN __constant_cpu_to_le32(0x02 << 11)
|
||||
__u32 hwTailP; /* tail of TD list */
|
||||
__u32 hwHeadP; /* head of TD list (hc r/w) */
|
||||
#define ED_C __constant_cpu_to_le32(0x02) /* toggle carry */
|
||||
#define ED_H __constant_cpu_to_le32(0x01) /* halted */
|
||||
__u32 hwNextED; /* next ED in list */
|
||||
|
||||
/* rest are purely for the driver's use */
|
||||
dma_addr_t dma; /* addr of ED */
|
||||
struct td *dummy; /* next TD to activate */
|
||||
|
||||
/* host's view of schedule */
|
||||
struct ed *ed_next; /* on schedule or rm_list */
|
||||
struct ed *ed_prev; /* for non-interrupt EDs */
|
||||
struct list_head td_list; /* "shadow list" of our TDs */
|
||||
|
||||
/* create --> IDLE --> OPER --> ... --> IDLE --> destroy
|
||||
* usually: OPER --> UNLINK --> (IDLE | OPER) --> ...
|
||||
* some special cases : OPER --> IDLE ...
|
||||
*/
|
||||
u8 state; /* ED_{IDLE,UNLINK,OPER} */
|
||||
#define ED_IDLE 0x00 /* NOT linked to HC */
|
||||
#define ED_UNLINK 0x01 /* being unlinked from hc */
|
||||
#define ED_OPER 0x02 /* IS linked to hc */
|
||||
|
||||
u8 type; /* PIPE_{BULK,...} */
|
||||
|
||||
/* periodic scheduling params (for intr and iso) */
|
||||
u8 branch;
|
||||
u16 interval;
|
||||
u16 load;
|
||||
u16 last_iso; /* iso only */
|
||||
|
||||
/* HC may see EDs on rm_list until next frame (frame_no == tick) */
|
||||
u16 tick;
|
||||
}; // __attribute__ ((aligned(16)));
|
||||
#pragma pack()
|
||||
|
||||
#define ED_MASK ((u32)~0x0f) /* strip hw status in low addr bits */
|
||||
|
||||
|
||||
/*
|
||||
* OHCI Transfer Descriptor (TD) ... one per transfer segment
|
||||
* See OHCI spec, sections 4.3.1 (general = control/bulk/interrupt)
|
||||
* and 4.3.2 (iso)
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct td {
|
||||
/* first fields are hardware-specified, le32 */
|
||||
__u32 hwINFO; /* transfer info bitmask */
|
||||
|
||||
/* hwINFO bits for both general and iso tds: */
|
||||
#define TD_CC 0xf0000000 /* condition code */
|
||||
#define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
|
||||
//#define TD_CC_SET(td_p, cc) (td_p) = ((td_p) & 0x0fffffff) | (((cc) & 0x0f) << 28)
|
||||
#define TD_DI 0x00E00000 /* frames before interrupt */
|
||||
#define TD_DI_SET(X) (((X) & 0x07)<< 21)
|
||||
/* these two bits are available for definition/use by HCDs in both
|
||||
* general and iso tds ... others are available for only one type
|
||||
*/
|
||||
#define TD_DONE 0x00020000 /* retired to donelist */
|
||||
#define TD_ISO 0x00010000 /* copy of ED_ISO */
|
||||
|
||||
/* hwINFO bits for general tds: */
|
||||
#define TD_EC 0x0C000000 /* error count */
|
||||
#define TD_T 0x03000000 /* data toggle state */
|
||||
#define TD_T_DATA0 0x02000000 /* DATA0 */
|
||||
#define TD_T_DATA1 0x03000000 /* DATA1 */
|
||||
#define TD_T_TOGGLE 0x00000000 /* uses ED_C */
|
||||
#define TD_DP 0x00180000 /* direction/pid */
|
||||
#define TD_DP_SETUP 0x00000000 /* SETUP pid */
|
||||
#define TD_DP_IN 0x00100000 /* IN pid */
|
||||
#define TD_DP_OUT 0x00080000 /* OUT pid */
|
||||
/* 0x00180000 rsvd */
|
||||
#define TD_R 0x00040000 /* round: short packets OK? */
|
||||
|
||||
/* (no hwINFO #defines yet for iso tds) */
|
||||
|
||||
__u32 hwCBP; /* Current Buffer Pointer (or 0) */
|
||||
__u32 hwNextTD; /* Next TD Pointer */
|
||||
__u32 hwBE; /* Memory Buffer End Pointer */
|
||||
|
||||
/* PSW is only for ISO */
|
||||
#define MAXPSW 1 /* hardware allows 8 */
|
||||
__u16 hwPSW [MAXPSW];
|
||||
|
||||
/* rest are purely for the driver's use */
|
||||
__u8 index;
|
||||
struct ed *ed;
|
||||
struct td *td_hash; /* dma-->td hashtable */
|
||||
struct td *next_dl_td;
|
||||
struct urb *urb;
|
||||
|
||||
dma_addr_t td_dma; /* addr of this TD */
|
||||
dma_addr_t data_dma; /* addr of data it points to */
|
||||
|
||||
struct list_head td_list; /* "shadow list", TDs on same ED */
|
||||
}; // __attribute__ ((aligned(32))); /* c/b/i need 16; only iso needs 32 */
|
||||
#pragma pack()
|
||||
|
||||
#define TD_MASK ((u32)~0x1f) /* strip hw status in low addr bits */
|
||||
|
||||
/*
|
||||
* Hardware transfer status codes -- CC from td->hwINFO or td->hwPSW
|
||||
*/
|
||||
#define TD_CC_NOERROR 0x00
|
||||
#define TD_CC_CRC 0x01
|
||||
#define TD_CC_BITSTUFFING 0x02
|
||||
#define TD_CC_DATATOGGLEM 0x03
|
||||
#define TD_CC_STALL 0x04
|
||||
#define TD_DEVNOTRESP 0x05
|
||||
#define TD_PIDCHECKFAIL 0x06
|
||||
#define TD_UNEXPECTEDPID 0x07
|
||||
#define TD_DATAOVERRUN 0x08
|
||||
#define TD_DATAUNDERRUN 0x09
|
||||
/* 0x0A, 0x0B reserved for hardware */
|
||||
#define TD_BUFFEROVERRUN 0x0C
|
||||
#define TD_BUFFERUNDERRUN 0x0D
|
||||
/* 0x0E, 0x0F reserved for HCD */
|
||||
#define TD_NOTACCESSED 0x0F
|
||||
|
||||
|
||||
/* map OHCI TD status codes (CC) to errno values */
|
||||
static const int cc_to_error [16] = {
|
||||
/* No Error */ 0,
|
||||
/* CRC Error */ -EILSEQ,
|
||||
/* Bit Stuff */ -EPROTO,
|
||||
/* Data Togg */ -EILSEQ,
|
||||
/* Stall */ -EPIPE,
|
||||
/* DevNotResp */ -ETIMEDOUT,
|
||||
/* PIDCheck */ -EPROTO,
|
||||
/* UnExpPID */ -EPROTO,
|
||||
/* DataOver */ -EOVERFLOW,
|
||||
/* DataUnder */ -EREMOTEIO,
|
||||
/* (for hw) */ -EIO,
|
||||
/* (for hw) */ -EIO,
|
||||
/* BufferOver */ -ECOMM,
|
||||
/* BuffUnder */ -ENOSR,
|
||||
/* (for HCD) */ -EALREADY,
|
||||
/* (for HCD) */ -EALREADY
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* The HCCA (Host Controller Communications Area) is a 256 byte
|
||||
* structure defined section 4.4.1 of the OHCI spec. The HC is
|
||||
* told the base address of it. It must be 256-byte aligned.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct ohci_hcca {
|
||||
#define NUM_INTS 32
|
||||
__u32 int_table [NUM_INTS]; /* periodic schedule */
|
||||
__u16 frame_no; /* current frame number */
|
||||
__u16 pad1; /* set to 0 on each frame_no change */
|
||||
__u32 done_head; /* info returned for an interrupt */
|
||||
u8 reserved_for_hc [116];
|
||||
u8 what [4]; /* spec only identifies 252 bytes :) */
|
||||
}; // __attribute__ ((aligned(256)));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*
|
||||
* This is the structure of the OHCI controller's memory mapped I/O region.
|
||||
* You must use readl() and writel() (in <asm/io.h>) to access these fields!!
|
||||
* Layout is in section 7 (and appendix B) of the spec.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct ohci_regs {
|
||||
/* control and status registers (section 7.1) */
|
||||
__u32 revision;
|
||||
__u32 control;
|
||||
__u32 cmdstatus;
|
||||
__u32 intrstatus;
|
||||
__u32 intrenable;
|
||||
__u32 intrdisable;
|
||||
|
||||
/* memory pointers (section 7.2) */
|
||||
__u32 hcca;
|
||||
__u32 ed_periodcurrent;
|
||||
__u32 ed_controlhead;
|
||||
__u32 ed_controlcurrent;
|
||||
__u32 ed_bulkhead;
|
||||
__u32 ed_bulkcurrent;
|
||||
__u32 donehead;
|
||||
|
||||
/* frame counters (section 7.3) */
|
||||
__u32 fminterval;
|
||||
__u32 fmremaining;
|
||||
__u32 fmnumber;
|
||||
__u32 periodicstart;
|
||||
__u32 lsthresh;
|
||||
|
||||
/* Root hub ports (section 7.4) */
|
||||
struct ohci_roothub_regs {
|
||||
__u32 a;
|
||||
__u32 b;
|
||||
__u32 status;
|
||||
#define MAX_ROOT_PORTS 15 /* maximum OHCI root hub ports (RH_A_NDP) */
|
||||
__u32 portstatus [MAX_ROOT_PORTS];
|
||||
} roothub;
|
||||
|
||||
/* and optional "legacy support" registers (appendix B) at 0x0100 */
|
||||
|
||||
}; // __attribute__ ((aligned(32)));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/* OHCI CONTROL AND STATUS REGISTER MASKS */
|
||||
|
||||
/*
|
||||
* HcControl (control) register masks
|
||||
*/
|
||||
#define OHCI_CTRL_CBSR (3 << 0) /* control/bulk service ratio */
|
||||
#define OHCI_CTRL_PLE (1 << 2) /* periodic list enable */
|
||||
#define OHCI_CTRL_IE (1 << 3) /* isochronous enable */
|
||||
#define OHCI_CTRL_CLE (1 << 4) /* control list enable */
|
||||
#define OHCI_CTRL_BLE (1 << 5) /* bulk list enable */
|
||||
#define OHCI_CTRL_HCFS (3 << 6) /* host controller functional state */
|
||||
#define OHCI_CTRL_IR (1 << 8) /* interrupt routing */
|
||||
#define OHCI_CTRL_RWC (1 << 9) /* remote wakeup connected */
|
||||
#define OHCI_CTRL_RWE (1 << 10) /* remote wakeup enable */
|
||||
|
||||
/* pre-shifted values for HCFS */
|
||||
# define OHCI_USB_RESET (0 << 6)
|
||||
# define OHCI_USB_RESUME (1 << 6)
|
||||
# define OHCI_USB_OPER (2 << 6)
|
||||
# define OHCI_USB_SUSPEND (3 << 6)
|
||||
|
||||
/*
|
||||
* HcCommandStatus (cmdstatus) register masks
|
||||
*/
|
||||
#define OHCI_HCR (1 << 0) /* host controller reset */
|
||||
#define OHCI_CLF (1 << 1) /* control list filled */
|
||||
#define OHCI_BLF (1 << 2) /* bulk list filled */
|
||||
#define OHCI_OCR (1 << 3) /* ownership change request */
|
||||
#define OHCI_SOC (3 << 16) /* scheduling overrun count */
|
||||
|
||||
/*
|
||||
* masks used with interrupt registers:
|
||||
* HcInterruptStatus (intrstatus)
|
||||
* HcInterruptEnable (intrenable)
|
||||
* HcInterruptDisable (intrdisable)
|
||||
*/
|
||||
#define OHCI_INTR_SO (1 << 0) /* scheduling overrun */
|
||||
#define OHCI_INTR_WDH (1 << 1) /* writeback of done_head */
|
||||
#define OHCI_INTR_SF (1 << 2) /* start frame */
|
||||
#define OHCI_INTR_RD (1 << 3) /* resume detect */
|
||||
#define OHCI_INTR_UE (1 << 4) /* unrecoverable error */
|
||||
#define OHCI_INTR_FNO (1 << 5) /* frame number overflow */
|
||||
#define OHCI_INTR_RHSC (1 << 6) /* root hub status change */
|
||||
#define OHCI_INTR_OC (1 << 30) /* ownership change */
|
||||
#define OHCI_INTR_MIE (1 << 31) /* master interrupt enable */
|
||||
|
||||
|
||||
/* OHCI ROOT HUB REGISTER MASKS */
|
||||
|
||||
/* roothub.portstatus [i] bits */
|
||||
#define RH_PS_CCS 0x00000001 /* current connect status */
|
||||
#define RH_PS_PES 0x00000002 /* port enable status*/
|
||||
#define RH_PS_PSS 0x00000004 /* port suspend status */
|
||||
#define RH_PS_POCI 0x00000008 /* port over current indicator */
|
||||
#define RH_PS_PRS 0x00000010 /* port reset status */
|
||||
#define RH_PS_PPS 0x00000100 /* port power status */
|
||||
#define RH_PS_LSDA 0x00000200 /* low speed device attached */
|
||||
#define RH_PS_CSC 0x00010000 /* connect status change */
|
||||
#define RH_PS_PESC 0x00020000 /* port enable status change */
|
||||
#define RH_PS_PSSC 0x00040000 /* port suspend status change */
|
||||
#define RH_PS_OCIC 0x00080000 /* over current indicator change */
|
||||
#define RH_PS_PRSC 0x00100000 /* port reset status change */
|
||||
|
||||
/* roothub.status bits */
|
||||
#define RH_HS_LPS 0x00000001 /* local power status */
|
||||
#define RH_HS_OCI 0x00000002 /* over current indicator */
|
||||
#define RH_HS_DRWE 0x00008000 /* device remote wakeup enable */
|
||||
#define RH_HS_LPSC 0x00010000 /* local power status change */
|
||||
#define RH_HS_OCIC 0x00020000 /* over current indicator change */
|
||||
#define RH_HS_CRWE 0x80000000 /* clear remote wakeup enable */
|
||||
|
||||
/* roothub.b masks */
|
||||
#define RH_B_DR 0x0000ffff /* device removable flags */
|
||||
#define RH_B_PPCM 0xffff0000 /* port power control mask */
|
||||
|
||||
/* roothub.a masks */
|
||||
#define RH_A_NDP (0xff << 0) /* number of downstream ports */
|
||||
#define RH_A_PSM (1 << 8) /* power switching mode */
|
||||
#define RH_A_NPS (1 << 9) /* no power switching */
|
||||
#define RH_A_DT (1 << 10) /* device type (mbz) */
|
||||
#define RH_A_OCPM (1 << 11) /* over current protection mode */
|
||||
#define RH_A_NOCP (1 << 12) /* no over current protection */
|
||||
#define RH_A_POTPGT (0xff << 24) /* power on to power good time */
|
||||
|
||||
|
||||
/* hcd-private per-urb state */
|
||||
typedef struct urb_priv {
|
||||
struct ed *ed;
|
||||
__u16 length; // # tds in this request
|
||||
__u16 td_cnt; // tds already serviced
|
||||
int state;
|
||||
struct td *td [0]; // all TDs in this request
|
||||
|
||||
} urb_priv_t;
|
||||
|
||||
#define URB_DEL 1
|
||||
|
||||
#define TD_HASH_SIZE 64 /* power'o'two */
|
||||
// sizeof (struct td) ~= 64 == 2^6 ...
|
||||
#define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
|
||||
|
||||
|
||||
/*
|
||||
* This is the full ohci controller description
|
||||
*
|
||||
* Note how the "proper" USB information is just
|
||||
* a subset of what the full implementation needs. (Linus)
|
||||
*/
|
||||
|
||||
struct ohci_hcd {
|
||||
spinlock_t lock;
|
||||
|
||||
/*
|
||||
* I/O memory used to communicate with the HC (dma-consistent)
|
||||
*/
|
||||
struct ohci_regs *regs;
|
||||
|
||||
/*
|
||||
* main memory used to communicate with the HC (dma-consistent).
|
||||
* hcd adds to schedule for a live hc any time, but removals finish
|
||||
* only at the start of the next frame.
|
||||
*/
|
||||
struct ohci_hcca *hcca;
|
||||
dma_addr_t hcca_dma;
|
||||
|
||||
struct ed *ed_rm_list; /* to be removed */
|
||||
|
||||
struct ed *ed_bulktail; /* last in bulk list */
|
||||
struct ed *ed_controltail; /* last in ctrl list */
|
||||
struct ed *periodic [NUM_INTS]; /* shadow int_table */
|
||||
|
||||
/*
|
||||
* memory management for queue data structures
|
||||
*/
|
||||
struct pci_pool *td_cache;
|
||||
struct pci_pool *ed_cache;
|
||||
struct td *td_hash [TD_HASH_SIZE];
|
||||
|
||||
/*
|
||||
* driver state
|
||||
*/
|
||||
int disabled; /* e.g. got a UE, we're hung */
|
||||
int sleeping;
|
||||
int load [NUM_INTS];
|
||||
u32 hc_control; /* copy of hc control reg */
|
||||
|
||||
unsigned long flags; /* for HC bugs */
|
||||
#define OHCI_QUIRK_AMD756 0x01 /* erratum #4 */
|
||||
#define OHCI_QUIRK_SUPERIO 0x02 /* natsemi */
|
||||
// there are also chip quirks/bugs in init logic
|
||||
|
||||
/*
|
||||
* framework state
|
||||
*/
|
||||
struct usb_hcd hcd;
|
||||
};
|
||||
|
||||
#define hcd_to_ohci(hcd_ptr) container_of(hcd_ptr, struct ohci_hcd, hcd)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef DEBUG
|
||||
#define STUB_DEBUG_FILES
|
||||
#endif /* DEBUG */
|
||||
|
||||
//#define ohci_dbg(ohci, fmt, args...) dev_dbg ((ohci)->hcd.controller , fmt , ## args )
|
||||
//#define ohci_err(ohci, fmt, args...) dev_err ((ohci)->hcd.controller , fmt , ## args )
|
||||
//#define ohci_info(ohci, fmt, args...) dev_info ((ohci)->hcd.controller , fmt , ## args )
|
||||
//#define ohci_warn(ohci, fmt, args...) dev_warn ((ohci)->hcd.controller , fmt , ## args )
|
||||
|
||||
int ohci_dbg(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_err(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_info(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_warn(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
int ohci_vdbg(struct ohci_hcd* ohci, char *str, const char *format, ...);
|
||||
|
||||
|
||||
//#ifdef OHCI_VERBOSE_DEBUG
|
||||
//# define ohci_vdbg ohci_dbg
|
||||
//#else
|
||||
//# define ohci_vdbg(ohci, fmt, args...) do { } while (0)
|
||||
//#endif
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Configs for OHCI
|
||||
*/
|
||||
|
||||
#define CONFIG_PCI
|
||||
/*
|
||||
* Configs for OHCI
|
||||
*/
|
||||
|
||||
#define CONFIG_PCI
|
||||
|
|
|
@ -1,72 +1,72 @@
|
|||
#ifndef _LINUX_BITOPS_H
|
||||
#define _LINUX_BITOPS_H
|
||||
|
||||
|
||||
/*
|
||||
* ffs: find first bit set. This is defined the same way as
|
||||
* the libc and compiler builtin ffs routines, therefore
|
||||
* differs in spirit from the above ffz (man ffs).
|
||||
*/
|
||||
|
||||
static __inline int generic_ffs(int x)
|
||||
{
|
||||
int r = 1;
|
||||
|
||||
if (!x)
|
||||
return 0;
|
||||
if (!(x & 0xffff)) {
|
||||
x >>= 16;
|
||||
r += 16;
|
||||
}
|
||||
if (!(x & 0xff)) {
|
||||
x >>= 8;
|
||||
r += 8;
|
||||
}
|
||||
if (!(x & 0xf)) {
|
||||
x >>= 4;
|
||||
r += 4;
|
||||
}
|
||||
if (!(x & 3)) {
|
||||
x >>= 2;
|
||||
r += 2;
|
||||
}
|
||||
if (!(x & 1)) {
|
||||
x >>= 1;
|
||||
r += 1;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* hweightN: returns the hamming weight (i.e. the number
|
||||
* of bits set) of a N-bit word
|
||||
*/
|
||||
|
||||
static __inline unsigned int generic_hweight32(unsigned int w)
|
||||
{
|
||||
unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555);
|
||||
res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
|
||||
res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F);
|
||||
res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF);
|
||||
return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF);
|
||||
}
|
||||
|
||||
static __inline unsigned int generic_hweight16(unsigned int w)
|
||||
{
|
||||
unsigned int res = (w & 0x5555) + ((w >> 1) & 0x5555);
|
||||
res = (res & 0x3333) + ((res >> 2) & 0x3333);
|
||||
res = (res & 0x0F0F) + ((res >> 4) & 0x0F0F);
|
||||
return (res & 0x00FF) + ((res >> 8) & 0x00FF);
|
||||
}
|
||||
|
||||
static __inline unsigned int generic_hweight8(unsigned int w)
|
||||
{
|
||||
unsigned int res = (w & 0x55) + ((w >> 1) & 0x55);
|
||||
res = (res & 0x33) + ((res >> 2) & 0x33);
|
||||
return (res & 0x0F) + ((res >> 4) & 0x0F);
|
||||
}
|
||||
|
||||
#include "asm/bitops.h"
|
||||
|
||||
|
||||
#endif
|
||||
#ifndef _LINUX_BITOPS_H
|
||||
#define _LINUX_BITOPS_H
|
||||
|
||||
|
||||
/*
|
||||
* ffs: find first bit set. This is defined the same way as
|
||||
* the libc and compiler builtin ffs routines, therefore
|
||||
* differs in spirit from the above ffz (man ffs).
|
||||
*/
|
||||
|
||||
static __inline int generic_ffs(int x)
|
||||
{
|
||||
int r = 1;
|
||||
|
||||
if (!x)
|
||||
return 0;
|
||||
if (!(x & 0xffff)) {
|
||||
x >>= 16;
|
||||
r += 16;
|
||||
}
|
||||
if (!(x & 0xff)) {
|
||||
x >>= 8;
|
||||
r += 8;
|
||||
}
|
||||
if (!(x & 0xf)) {
|
||||
x >>= 4;
|
||||
r += 4;
|
||||
}
|
||||
if (!(x & 3)) {
|
||||
x >>= 2;
|
||||
r += 2;
|
||||
}
|
||||
if (!(x & 1)) {
|
||||
x >>= 1;
|
||||
r += 1;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* hweightN: returns the hamming weight (i.e. the number
|
||||
* of bits set) of a N-bit word
|
||||
*/
|
||||
|
||||
static __inline unsigned int generic_hweight32(unsigned int w)
|
||||
{
|
||||
unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555);
|
||||
res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
|
||||
res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F);
|
||||
res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF);
|
||||
return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF);
|
||||
}
|
||||
|
||||
static __inline unsigned int generic_hweight16(unsigned int w)
|
||||
{
|
||||
unsigned int res = (w & 0x5555) + ((w >> 1) & 0x5555);
|
||||
res = (res & 0x3333) + ((res >> 2) & 0x3333);
|
||||
res = (res & 0x0F0F) + ((res >> 4) & 0x0F0F);
|
||||
return (res & 0x00FF) + ((res >> 8) & 0x00FF);
|
||||
}
|
||||
|
||||
static __inline unsigned int generic_hweight8(unsigned int w)
|
||||
{
|
||||
unsigned int res = (w & 0x55) + ((w >> 1) & 0x55);
|
||||
res = (res & 0x33) + ((res >> 2) & 0x33);
|
||||
return (res & 0x0F) + ((res >> 4) & 0x0F);
|
||||
}
|
||||
|
||||
#include "asm/bitops.h"
|
||||
|
||||
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,332 +1,332 @@
|
|||
/*
|
||||
* This file holds USB constants and structures that are needed for USB
|
||||
* device APIs. These are used by the USB device model, which is defined
|
||||
* in chapter 9 of the USB 2.0 specification. Linux has several APIs in C
|
||||
* that need these:
|
||||
*
|
||||
* - the master/host side Linux-USB kernel driver API;
|
||||
* - the "usbfs" user space API; and
|
||||
* - (eventually) a Linux "gadget" slave/device side driver API.
|
||||
*
|
||||
* USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
|
||||
* act either as a USB master/host or as a USB slave/device. That means
|
||||
* the master and slave side APIs will benefit from working well together.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_CH9_H
|
||||
#define __LINUX_USB_CH9_H
|
||||
#if 0
|
||||
#include <asm/types.h> /* __u8 etc */
|
||||
#endif
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* CONTROL REQUEST SUPPORT */
|
||||
|
||||
/*
|
||||
* USB directions
|
||||
*
|
||||
* This bit flag is used in endpoint descriptors' bEndpointAddress field.
|
||||
* It's also one of three fields in control requests bRequestType.
|
||||
*/
|
||||
#define USB_DIR_OUT 0 /* to device */
|
||||
#define USB_DIR_IN 0x80 /* to host */
|
||||
|
||||
/*
|
||||
* USB types, the second of three bRequestType fields
|
||||
*/
|
||||
#define USB_TYPE_MASK (0x03 << 5)
|
||||
#define USB_TYPE_STANDARD (0x00 << 5)
|
||||
#define USB_TYPE_CLASS (0x01 << 5)
|
||||
#define USB_TYPE_VENDOR (0x02 << 5)
|
||||
#define USB_TYPE_RESERVED (0x03 << 5)
|
||||
|
||||
/*
|
||||
* USB recipients, the third of three bRequestType fields
|
||||
*/
|
||||
#define USB_RECIP_MASK 0x1f
|
||||
#define USB_RECIP_DEVICE 0x00
|
||||
#define USB_RECIP_INTERFACE 0x01
|
||||
#define USB_RECIP_ENDPOINT 0x02
|
||||
#define USB_RECIP_OTHER 0x03
|
||||
|
||||
/*
|
||||
* Standard requests, for the bRequest field of a SETUP packet.
|
||||
*
|
||||
* These are qualified by the bRequestType field, so that for example
|
||||
* TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
|
||||
* by a GET_STATUS request.
|
||||
*/
|
||||
#define USB_REQ_GET_STATUS 0x00
|
||||
#define USB_REQ_CLEAR_FEATURE 0x01
|
||||
#define USB_REQ_SET_FEATURE 0x03
|
||||
#define USB_REQ_SET_ADDRESS 0x05
|
||||
#define USB_REQ_GET_DESCRIPTOR 0x06
|
||||
#define USB_REQ_SET_DESCRIPTOR 0x07
|
||||
#define USB_REQ_GET_CONFIGURATION 0x08
|
||||
#define USB_REQ_SET_CONFIGURATION 0x09
|
||||
#define USB_REQ_GET_INTERFACE 0x0A
|
||||
#define USB_REQ_SET_INTERFACE 0x0B
|
||||
#define USB_REQ_SYNCH_FRAME 0x0C
|
||||
|
||||
|
||||
/**
|
||||
* struct usb_ctrlrequest - SETUP data for a USB device control request
|
||||
* @bRequestType: matches the USB bmRequestType field
|
||||
* @bRequest: matches the USB bRequest field
|
||||
* @wValue: matches the USB wValue field (le16 byte order)
|
||||
* @wIndex: matches the USB wIndex field (le16 byte order)
|
||||
* @wLength: matches the USB wLength field (le16 byte order)
|
||||
*
|
||||
* This structure is used to send control requests to a USB device. It matches
|
||||
* the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the
|
||||
* USB spec for a fuller description of the different fields, and what they are
|
||||
* used for.
|
||||
*
|
||||
* Note that the driver for any interface can issue control requests.
|
||||
* For most devices, interfaces don't coordinate with each other, so
|
||||
* such requests may be made at any time.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct usb_ctrlrequest {
|
||||
__u8 bRequestType;
|
||||
__u8 bRequest;
|
||||
__u16 wValue;
|
||||
__u16 wIndex;
|
||||
__u16 wLength;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
|
||||
* (rarely) accepted by SET_DESCRIPTOR.
|
||||
*
|
||||
* Note that all multi-byte values here are encoded in little endian
|
||||
* byte order "on the wire". But when exposed through Linux-USB APIs,
|
||||
* they've been converted to cpu byte order.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Descriptor types ... USB 2.0 spec table 9.5
|
||||
*/
|
||||
#define USB_DT_DEVICE 0x01
|
||||
#define USB_DT_CONFIG 0x02
|
||||
#define USB_DT_STRING 0x03
|
||||
#define USB_DT_INTERFACE 0x04
|
||||
#define USB_DT_ENDPOINT 0x05
|
||||
#define USB_DT_DEVICE_QUALIFIER 0x06
|
||||
#define USB_DT_OTHER_SPEED_CONFIG 0x07
|
||||
#define USB_DT_INTERFACE_POWER 0x08
|
||||
|
||||
/* All standard descriptors have these 2 fields at the beginning */
|
||||
#pragma pack(1)
|
||||
struct usb_descriptor_header {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_DEVICE: Device descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_device_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 bcdUSB;
|
||||
__u8 bDeviceClass;
|
||||
__u8 bDeviceSubClass;
|
||||
__u8 bDeviceProtocol;
|
||||
__u8 bMaxPacketSize0;
|
||||
__u16 idVendor;
|
||||
__u16 idProduct;
|
||||
__u16 bcdDevice;
|
||||
__u8 iManufacturer;
|
||||
__u8 iProduct;
|
||||
__u8 iSerialNumber;
|
||||
__u8 bNumConfigurations;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_DEVICE_SIZE 18
|
||||
|
||||
|
||||
/*
|
||||
* Device and/or Interface Class codes
|
||||
* as found in bDeviceClass or bInterfaceClass
|
||||
* and defined by www.usb.org documents
|
||||
*/
|
||||
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
|
||||
#define USB_CLASS_AUDIO 1
|
||||
#define USB_CLASS_COMM 2
|
||||
#define USB_CLASS_HID 3
|
||||
#define USB_CLASS_PHYSICAL 5
|
||||
#define USB_CLASS_STILL_IMAGE 6
|
||||
#define USB_CLASS_PRINTER 7
|
||||
#define USB_CLASS_MASS_STORAGE 8
|
||||
#define USB_CLASS_HUB 9
|
||||
#define USB_CLASS_CDC_DATA 0x0a
|
||||
#define USB_CLASS_CSCID 0x0b /* chip+ smart card */
|
||||
#define USB_CLASS_CONTENT_SEC 0x0d /* content security */
|
||||
#define USB_CLASS_APP_SPEC 0xfe
|
||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_CONFIG: Configuration descriptor information.
|
||||
*
|
||||
* USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
|
||||
* descriptor type is different. Highspeed-capable devices can look
|
||||
* different depending on what speed they're currently running. Only
|
||||
* devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
|
||||
* descriptors.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct usb_config_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 wTotalLength;
|
||||
__u8 bNumInterfaces;
|
||||
__u8 bConfigurationValue;
|
||||
__u8 iConfiguration;
|
||||
__u8 bmAttributes;
|
||||
__u8 bMaxPower;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_CONFIG_SIZE 9
|
||||
|
||||
/* from config descriptor bmAttributes */
|
||||
#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */
|
||||
#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */
|
||||
#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_STRING: String descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_string_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 wData[1]; /* UTF-16LE encoded */
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/* note that "string" zero is special, it holds language codes that
|
||||
* the device supports, not Unicode characters.
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_INTERFACE: Interface descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_interface_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u8 bInterfaceNumber;
|
||||
__u8 bAlternateSetting;
|
||||
__u8 bNumEndpoints;
|
||||
__u8 bInterfaceClass;
|
||||
__u8 bInterfaceSubClass;
|
||||
__u8 bInterfaceProtocol;
|
||||
__u8 iInterface;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_INTERFACE_SIZE 9
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_ENDPOINT: Endpoint descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_endpoint_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u8 bEndpointAddress;
|
||||
__u8 bmAttributes;
|
||||
__u16 wMaxPacketSize;
|
||||
__u8 bInterval;
|
||||
|
||||
// NOTE: these two are _only_ in audio endpoints.
|
||||
// use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof.
|
||||
__u8 bRefresh;
|
||||
__u8 bSynchAddress;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_ENDPOINT_SIZE 7
|
||||
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
|
||||
|
||||
|
||||
/*
|
||||
* Endpoints
|
||||
*/
|
||||
#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
|
||||
#define USB_ENDPOINT_DIR_MASK 0x80
|
||||
|
||||
#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
|
||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
||||
#define USB_ENDPOINT_XFER_ISOC 1
|
||||
#define USB_ENDPOINT_XFER_BULK 2
|
||||
#define USB_ENDPOINT_XFER_INT 3
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_qualifier_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 bcdUSB;
|
||||
__u8 bDeviceClass;
|
||||
__u8 bDeviceSubClass;
|
||||
__u8 bDeviceProtocol;
|
||||
__u8 bMaxPacketSize0;
|
||||
__u8 bNumConfigurations;
|
||||
__u8 bRESERVED;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB 2.0 defines three speeds, here's how Linux identifies them */
|
||||
|
||||
enum usb_device_speed {
|
||||
USB_SPEED_UNKNOWN = 0, /* enumerating */
|
||||
USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
|
||||
USB_SPEED_HIGH /* usb 2.0 */
|
||||
};
|
||||
|
||||
enum usb_device_state {
|
||||
/* NOTATTACHED isn't in the USB spec, and this state acts
|
||||
* the same as ATTACHED ... but it's clearer this way.
|
||||
*/
|
||||
USB_STATE_NOTATTACHED = 0,
|
||||
|
||||
/* the chapter 9 device states */
|
||||
USB_STATE_ATTACHED,
|
||||
USB_STATE_POWERED,
|
||||
USB_STATE_DEFAULT, /* limited function */
|
||||
USB_STATE_ADDRESS,
|
||||
USB_STATE_CONFIGURED, /* most functions */
|
||||
|
||||
USB_STATE_SUSPENDED
|
||||
|
||||
/* NOTE: there are actually four different SUSPENDED
|
||||
* states, returning to POWERED, DEFAULT, ADDRESS, or
|
||||
* CONFIGURED respectively when SOF tokens flow again.
|
||||
*/
|
||||
};
|
||||
|
||||
#endif /* __LINUX_USB_CH9_H */
|
||||
/*
|
||||
* This file holds USB constants and structures that are needed for USB
|
||||
* device APIs. These are used by the USB device model, which is defined
|
||||
* in chapter 9 of the USB 2.0 specification. Linux has several APIs in C
|
||||
* that need these:
|
||||
*
|
||||
* - the master/host side Linux-USB kernel driver API;
|
||||
* - the "usbfs" user space API; and
|
||||
* - (eventually) a Linux "gadget" slave/device side driver API.
|
||||
*
|
||||
* USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
|
||||
* act either as a USB master/host or as a USB slave/device. That means
|
||||
* the master and slave side APIs will benefit from working well together.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_CH9_H
|
||||
#define __LINUX_USB_CH9_H
|
||||
#if 0
|
||||
#include <asm/types.h> /* __u8 etc */
|
||||
#endif
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* CONTROL REQUEST SUPPORT */
|
||||
|
||||
/*
|
||||
* USB directions
|
||||
*
|
||||
* This bit flag is used in endpoint descriptors' bEndpointAddress field.
|
||||
* It's also one of three fields in control requests bRequestType.
|
||||
*/
|
||||
#define USB_DIR_OUT 0 /* to device */
|
||||
#define USB_DIR_IN 0x80 /* to host */
|
||||
|
||||
/*
|
||||
* USB types, the second of three bRequestType fields
|
||||
*/
|
||||
#define USB_TYPE_MASK (0x03 << 5)
|
||||
#define USB_TYPE_STANDARD (0x00 << 5)
|
||||
#define USB_TYPE_CLASS (0x01 << 5)
|
||||
#define USB_TYPE_VENDOR (0x02 << 5)
|
||||
#define USB_TYPE_RESERVED (0x03 << 5)
|
||||
|
||||
/*
|
||||
* USB recipients, the third of three bRequestType fields
|
||||
*/
|
||||
#define USB_RECIP_MASK 0x1f
|
||||
#define USB_RECIP_DEVICE 0x00
|
||||
#define USB_RECIP_INTERFACE 0x01
|
||||
#define USB_RECIP_ENDPOINT 0x02
|
||||
#define USB_RECIP_OTHER 0x03
|
||||
|
||||
/*
|
||||
* Standard requests, for the bRequest field of a SETUP packet.
|
||||
*
|
||||
* These are qualified by the bRequestType field, so that for example
|
||||
* TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
|
||||
* by a GET_STATUS request.
|
||||
*/
|
||||
#define USB_REQ_GET_STATUS 0x00
|
||||
#define USB_REQ_CLEAR_FEATURE 0x01
|
||||
#define USB_REQ_SET_FEATURE 0x03
|
||||
#define USB_REQ_SET_ADDRESS 0x05
|
||||
#define USB_REQ_GET_DESCRIPTOR 0x06
|
||||
#define USB_REQ_SET_DESCRIPTOR 0x07
|
||||
#define USB_REQ_GET_CONFIGURATION 0x08
|
||||
#define USB_REQ_SET_CONFIGURATION 0x09
|
||||
#define USB_REQ_GET_INTERFACE 0x0A
|
||||
#define USB_REQ_SET_INTERFACE 0x0B
|
||||
#define USB_REQ_SYNCH_FRAME 0x0C
|
||||
|
||||
|
||||
/**
|
||||
* struct usb_ctrlrequest - SETUP data for a USB device control request
|
||||
* @bRequestType: matches the USB bmRequestType field
|
||||
* @bRequest: matches the USB bRequest field
|
||||
* @wValue: matches the USB wValue field (le16 byte order)
|
||||
* @wIndex: matches the USB wIndex field (le16 byte order)
|
||||
* @wLength: matches the USB wLength field (le16 byte order)
|
||||
*
|
||||
* This structure is used to send control requests to a USB device. It matches
|
||||
* the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the
|
||||
* USB spec for a fuller description of the different fields, and what they are
|
||||
* used for.
|
||||
*
|
||||
* Note that the driver for any interface can issue control requests.
|
||||
* For most devices, interfaces don't coordinate with each other, so
|
||||
* such requests may be made at any time.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct usb_ctrlrequest {
|
||||
__u8 bRequestType;
|
||||
__u8 bRequest;
|
||||
__u16 wValue;
|
||||
__u16 wIndex;
|
||||
__u16 wLength;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
|
||||
* (rarely) accepted by SET_DESCRIPTOR.
|
||||
*
|
||||
* Note that all multi-byte values here are encoded in little endian
|
||||
* byte order "on the wire". But when exposed through Linux-USB APIs,
|
||||
* they've been converted to cpu byte order.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Descriptor types ... USB 2.0 spec table 9.5
|
||||
*/
|
||||
#define USB_DT_DEVICE 0x01
|
||||
#define USB_DT_CONFIG 0x02
|
||||
#define USB_DT_STRING 0x03
|
||||
#define USB_DT_INTERFACE 0x04
|
||||
#define USB_DT_ENDPOINT 0x05
|
||||
#define USB_DT_DEVICE_QUALIFIER 0x06
|
||||
#define USB_DT_OTHER_SPEED_CONFIG 0x07
|
||||
#define USB_DT_INTERFACE_POWER 0x08
|
||||
|
||||
/* All standard descriptors have these 2 fields at the beginning */
|
||||
#pragma pack(1)
|
||||
struct usb_descriptor_header {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_DEVICE: Device descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_device_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 bcdUSB;
|
||||
__u8 bDeviceClass;
|
||||
__u8 bDeviceSubClass;
|
||||
__u8 bDeviceProtocol;
|
||||
__u8 bMaxPacketSize0;
|
||||
__u16 idVendor;
|
||||
__u16 idProduct;
|
||||
__u16 bcdDevice;
|
||||
__u8 iManufacturer;
|
||||
__u8 iProduct;
|
||||
__u8 iSerialNumber;
|
||||
__u8 bNumConfigurations;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_DEVICE_SIZE 18
|
||||
|
||||
|
||||
/*
|
||||
* Device and/or Interface Class codes
|
||||
* as found in bDeviceClass or bInterfaceClass
|
||||
* and defined by www.usb.org documents
|
||||
*/
|
||||
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
|
||||
#define USB_CLASS_AUDIO 1
|
||||
#define USB_CLASS_COMM 2
|
||||
#define USB_CLASS_HID 3
|
||||
#define USB_CLASS_PHYSICAL 5
|
||||
#define USB_CLASS_STILL_IMAGE 6
|
||||
#define USB_CLASS_PRINTER 7
|
||||
#define USB_CLASS_MASS_STORAGE 8
|
||||
#define USB_CLASS_HUB 9
|
||||
#define USB_CLASS_CDC_DATA 0x0a
|
||||
#define USB_CLASS_CSCID 0x0b /* chip+ smart card */
|
||||
#define USB_CLASS_CONTENT_SEC 0x0d /* content security */
|
||||
#define USB_CLASS_APP_SPEC 0xfe
|
||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_CONFIG: Configuration descriptor information.
|
||||
*
|
||||
* USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
|
||||
* descriptor type is different. Highspeed-capable devices can look
|
||||
* different depending on what speed they're currently running. Only
|
||||
* devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
|
||||
* descriptors.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct usb_config_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 wTotalLength;
|
||||
__u8 bNumInterfaces;
|
||||
__u8 bConfigurationValue;
|
||||
__u8 iConfiguration;
|
||||
__u8 bmAttributes;
|
||||
__u8 bMaxPower;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_CONFIG_SIZE 9
|
||||
|
||||
/* from config descriptor bmAttributes */
|
||||
#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */
|
||||
#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */
|
||||
#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_STRING: String descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_string_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 wData[1]; /* UTF-16LE encoded */
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/* note that "string" zero is special, it holds language codes that
|
||||
* the device supports, not Unicode characters.
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_INTERFACE: Interface descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_interface_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u8 bInterfaceNumber;
|
||||
__u8 bAlternateSetting;
|
||||
__u8 bNumEndpoints;
|
||||
__u8 bInterfaceClass;
|
||||
__u8 bInterfaceSubClass;
|
||||
__u8 bInterfaceProtocol;
|
||||
__u8 iInterface;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_INTERFACE_SIZE 9
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_ENDPOINT: Endpoint descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_endpoint_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u8 bEndpointAddress;
|
||||
__u8 bmAttributes;
|
||||
__u16 wMaxPacketSize;
|
||||
__u8 bInterval;
|
||||
|
||||
// NOTE: these two are _only_ in audio endpoints.
|
||||
// use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof.
|
||||
__u8 bRefresh;
|
||||
__u8 bSynchAddress;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
#define USB_DT_ENDPOINT_SIZE 7
|
||||
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
|
||||
|
||||
|
||||
/*
|
||||
* Endpoints
|
||||
*/
|
||||
#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
|
||||
#define USB_ENDPOINT_DIR_MASK 0x80
|
||||
|
||||
#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
|
||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
||||
#define USB_ENDPOINT_XFER_ISOC 1
|
||||
#define USB_ENDPOINT_XFER_BULK 2
|
||||
#define USB_ENDPOINT_XFER_INT 3
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
|
||||
#pragma pack(1)
|
||||
struct usb_qualifier_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__u16 bcdUSB;
|
||||
__u8 bDeviceClass;
|
||||
__u8 bDeviceSubClass;
|
||||
__u8 bDeviceProtocol;
|
||||
__u8 bMaxPacketSize0;
|
||||
__u8 bNumConfigurations;
|
||||
__u8 bRESERVED;
|
||||
}; //__attribute__ ((packed));
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB 2.0 defines three speeds, here's how Linux identifies them */
|
||||
|
||||
enum usb_device_speed {
|
||||
USB_SPEED_UNKNOWN = 0, /* enumerating */
|
||||
USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
|
||||
USB_SPEED_HIGH /* usb 2.0 */
|
||||
};
|
||||
|
||||
enum usb_device_state {
|
||||
/* NOTATTACHED isn't in the USB spec, and this state acts
|
||||
* the same as ATTACHED ... but it's clearer this way.
|
||||
*/
|
||||
USB_STATE_NOTATTACHED = 0,
|
||||
|
||||
/* the chapter 9 device states */
|
||||
USB_STATE_ATTACHED,
|
||||
USB_STATE_POWERED,
|
||||
USB_STATE_DEFAULT, /* limited function */
|
||||
USB_STATE_ADDRESS,
|
||||
USB_STATE_CONFIGURED, /* most functions */
|
||||
|
||||
USB_STATE_SUSPENDED
|
||||
|
||||
/* NOTE: there are actually four different SUSPENDED
|
||||
* states, returning to POWERED, DEFAULT, ADDRESS, or
|
||||
* CONFIGURED respectively when SOF tokens flow again.
|
||||
*/
|
||||
};
|
||||
|
||||
#endif /* __LINUX_USB_CH9_H */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,224 +1,224 @@
|
|||
#ifndef _BOOT_LIST_H
|
||||
#define _BOOT_LIST_H
|
||||
|
||||
/*
|
||||
* Simple doubly linked list implementation.
|
||||
*
|
||||
* Some of the internal functions ("__xxx") are useful when
|
||||
* manipulating whole lists rather than single entries, as
|
||||
* sometimes we already know the next/prev entries and we can
|
||||
* generate better code by using them directly rather than
|
||||
* using the generic single-entry routines.
|
||||
*/
|
||||
|
||||
struct list_head {
|
||||
struct list_head *next, *prev;
|
||||
};
|
||||
|
||||
#define LIST_HEAD_INIT(name) { &(name), &(name) }
|
||||
|
||||
#define LIST_HEAD(name) \
|
||||
struct list_head name = LIST_HEAD_INIT(name)
|
||||
|
||||
#define INIT_LIST_HEAD(ptr) do { \
|
||||
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Insert a new entry between two known consecutive entries.
|
||||
*
|
||||
* This is only for internal list manipulation where we know
|
||||
* the prev/next entries already!
|
||||
*/
|
||||
static __inline void __list_add(struct list_head *new,
|
||||
struct list_head *prev,
|
||||
struct list_head *next)
|
||||
{
|
||||
next->prev = new;
|
||||
new->next = next;
|
||||
new->prev = prev;
|
||||
prev->next = new;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_add - add a new entry
|
||||
* @new: new entry to be added
|
||||
* @head: list head to add it after
|
||||
*
|
||||
* Insert a new entry after the specified head.
|
||||
* This is good for implementing stacks.
|
||||
*/
|
||||
static __inline void list_add(struct list_head *new, struct list_head *head)
|
||||
{
|
||||
__list_add(new, head, head->next);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_add_tail - add a new entry
|
||||
* @new: new entry to be added
|
||||
* @head: list head to add it before
|
||||
*
|
||||
* Insert a new entry before the specified head.
|
||||
* This is useful for implementing queues.
|
||||
*/
|
||||
static __inline void list_add_tail(struct list_head *new, struct list_head *head)
|
||||
{
|
||||
__list_add(new, head->prev, head);
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete a list entry by making the prev/next entries
|
||||
* point to each other.
|
||||
*
|
||||
* This is only for internal list manipulation where we know
|
||||
* the prev/next entries already!
|
||||
*/
|
||||
static __inline void __list_del(struct list_head *prev, struct list_head *next)
|
||||
{
|
||||
next->prev = prev;
|
||||
prev->next = next;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_del - deletes entry from list.
|
||||
* @entry: the element to delete from the list.
|
||||
* Note: list_empty on entry does not return true after this, the entry is in an undefined state.
|
||||
*/
|
||||
static __inline void list_del(struct list_head *entry)
|
||||
{
|
||||
__list_del(entry->prev, entry->next);
|
||||
entry->next = (void *) 0;
|
||||
entry->prev = (void *) 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_del_init - deletes entry from list and reinitialize it.
|
||||
* @entry: the element to delete from the list.
|
||||
*/
|
||||
static __inline void list_del_init(struct list_head *entry)
|
||||
{
|
||||
__list_del(entry->prev, entry->next);
|
||||
INIT_LIST_HEAD(entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_move - delete from one list and add as another's head
|
||||
* @list: the entry to move
|
||||
* @head: the head that will precede our entry
|
||||
*/
|
||||
static __inline void list_move(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
__list_del(list->prev, list->next);
|
||||
list_add(list, head);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_move_tail - delete from one list and add as another's tail
|
||||
* @list: the entry to move
|
||||
* @head: the head that will follow our entry
|
||||
*/
|
||||
static __inline void list_move_tail(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
__list_del(list->prev, list->next);
|
||||
list_add_tail(list, head);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_empty - tests whether a list is empty
|
||||
* @head: the list to test.
|
||||
*/
|
||||
static __inline int list_empty(struct list_head *head)
|
||||
{
|
||||
return head->next == head;
|
||||
}
|
||||
|
||||
static __inline void __list_splice(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
struct list_head *first = list->next;
|
||||
struct list_head *last = list->prev;
|
||||
struct list_head *at = head->next;
|
||||
|
||||
first->prev = head;
|
||||
head->next = first;
|
||||
|
||||
last->next = at;
|
||||
at->prev = last;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_splice - join two lists
|
||||
* @list: the new list to add.
|
||||
* @head: the place to add it in the first list.
|
||||
*/
|
||||
static __inline void list_splice(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
if (!list_empty(list))
|
||||
__list_splice(list, head);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_splice_init - join two lists and reinitialise the emptied list.
|
||||
* @list: the new list to add.
|
||||
* @head: the place to add it in the first list.
|
||||
*
|
||||
* The list at @list is reinitialised
|
||||
*/
|
||||
static __inline void list_splice_init(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
if (!list_empty(list)) {
|
||||
__list_splice(list, head);
|
||||
INIT_LIST_HEAD(list);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* list_entry - get the struct for this entry
|
||||
* @ptr: the &struct list_head pointer.
|
||||
* @type: the type of the struct this is embedded in.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_entry(ptr, type, member) \
|
||||
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
|
||||
|
||||
/**
|
||||
* list_for_each - iterate over a list
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each(pos, head) \
|
||||
for (pos = (head)->next; pos != (head); \
|
||||
pos = pos->next)
|
||||
/**
|
||||
* list_for_each_prev - iterate over a list backwards
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each_prev(pos, head) \
|
||||
for (pos = (head)->prev; pos != (head); \
|
||||
pos = pos->prev)
|
||||
|
||||
/**
|
||||
* list_for_each_safe - iterate over a list safe against removal of list entry
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
* @n: another &struct list_head to use as temporary storage
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each_safe(pos, n, head) \
|
||||
for (pos = (head)->next, n = pos->next; pos != (head); \
|
||||
pos = n, n = pos->next)
|
||||
|
||||
/**
|
||||
* list_for_each_entry - iterate over list of given type
|
||||
* @pos: the type * to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_for_each_entry(pos, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member) \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
|
||||
#endif
|
||||
#ifndef _BOOT_LIST_H
|
||||
#define _BOOT_LIST_H
|
||||
|
||||
/*
|
||||
* Simple doubly linked list implementation.
|
||||
*
|
||||
* Some of the internal functions ("__xxx") are useful when
|
||||
* manipulating whole lists rather than single entries, as
|
||||
* sometimes we already know the next/prev entries and we can
|
||||
* generate better code by using them directly rather than
|
||||
* using the generic single-entry routines.
|
||||
*/
|
||||
|
||||
struct list_head {
|
||||
struct list_head *next, *prev;
|
||||
};
|
||||
|
||||
#define LIST_HEAD_INIT(name) { &(name), &(name) }
|
||||
|
||||
#define LIST_HEAD(name) \
|
||||
struct list_head name = LIST_HEAD_INIT(name)
|
||||
|
||||
#define INIT_LIST_HEAD(ptr) do { \
|
||||
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Insert a new entry between two known consecutive entries.
|
||||
*
|
||||
* This is only for internal list manipulation where we know
|
||||
* the prev/next entries already!
|
||||
*/
|
||||
static __inline void __list_add(struct list_head *new,
|
||||
struct list_head *prev,
|
||||
struct list_head *next)
|
||||
{
|
||||
next->prev = new;
|
||||
new->next = next;
|
||||
new->prev = prev;
|
||||
prev->next = new;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_add - add a new entry
|
||||
* @new: new entry to be added
|
||||
* @head: list head to add it after
|
||||
*
|
||||
* Insert a new entry after the specified head.
|
||||
* This is good for implementing stacks.
|
||||
*/
|
||||
static __inline void list_add(struct list_head *new, struct list_head *head)
|
||||
{
|
||||
__list_add(new, head, head->next);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_add_tail - add a new entry
|
||||
* @new: new entry to be added
|
||||
* @head: list head to add it before
|
||||
*
|
||||
* Insert a new entry before the specified head.
|
||||
* This is useful for implementing queues.
|
||||
*/
|
||||
static __inline void list_add_tail(struct list_head *new, struct list_head *head)
|
||||
{
|
||||
__list_add(new, head->prev, head);
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete a list entry by making the prev/next entries
|
||||
* point to each other.
|
||||
*
|
||||
* This is only for internal list manipulation where we know
|
||||
* the prev/next entries already!
|
||||
*/
|
||||
static __inline void __list_del(struct list_head *prev, struct list_head *next)
|
||||
{
|
||||
next->prev = prev;
|
||||
prev->next = next;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_del - deletes entry from list.
|
||||
* @entry: the element to delete from the list.
|
||||
* Note: list_empty on entry does not return true after this, the entry is in an undefined state.
|
||||
*/
|
||||
static __inline void list_del(struct list_head *entry)
|
||||
{
|
||||
__list_del(entry->prev, entry->next);
|
||||
entry->next = (void *) 0;
|
||||
entry->prev = (void *) 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_del_init - deletes entry from list and reinitialize it.
|
||||
* @entry: the element to delete from the list.
|
||||
*/
|
||||
static __inline void list_del_init(struct list_head *entry)
|
||||
{
|
||||
__list_del(entry->prev, entry->next);
|
||||
INIT_LIST_HEAD(entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_move - delete from one list and add as another's head
|
||||
* @list: the entry to move
|
||||
* @head: the head that will precede our entry
|
||||
*/
|
||||
static __inline void list_move(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
__list_del(list->prev, list->next);
|
||||
list_add(list, head);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_move_tail - delete from one list and add as another's tail
|
||||
* @list: the entry to move
|
||||
* @head: the head that will follow our entry
|
||||
*/
|
||||
static __inline void list_move_tail(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
__list_del(list->prev, list->next);
|
||||
list_add_tail(list, head);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_empty - tests whether a list is empty
|
||||
* @head: the list to test.
|
||||
*/
|
||||
static __inline int list_empty(struct list_head *head)
|
||||
{
|
||||
return head->next == head;
|
||||
}
|
||||
|
||||
static __inline void __list_splice(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
struct list_head *first = list->next;
|
||||
struct list_head *last = list->prev;
|
||||
struct list_head *at = head->next;
|
||||
|
||||
first->prev = head;
|
||||
head->next = first;
|
||||
|
||||
last->next = at;
|
||||
at->prev = last;
|
||||
}
|
||||
|
||||
/**
|
||||
* list_splice - join two lists
|
||||
* @list: the new list to add.
|
||||
* @head: the place to add it in the first list.
|
||||
*/
|
||||
static __inline void list_splice(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
if (!list_empty(list))
|
||||
__list_splice(list, head);
|
||||
}
|
||||
|
||||
/**
|
||||
* list_splice_init - join two lists and reinitialise the emptied list.
|
||||
* @list: the new list to add.
|
||||
* @head: the place to add it in the first list.
|
||||
*
|
||||
* The list at @list is reinitialised
|
||||
*/
|
||||
static __inline void list_splice_init(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
if (!list_empty(list)) {
|
||||
__list_splice(list, head);
|
||||
INIT_LIST_HEAD(list);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* list_entry - get the struct for this entry
|
||||
* @ptr: the &struct list_head pointer.
|
||||
* @type: the type of the struct this is embedded in.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_entry(ptr, type, member) \
|
||||
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
|
||||
|
||||
/**
|
||||
* list_for_each - iterate over a list
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each(pos, head) \
|
||||
for (pos = (head)->next; pos != (head); \
|
||||
pos = pos->next)
|
||||
/**
|
||||
* list_for_each_prev - iterate over a list backwards
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each_prev(pos, head) \
|
||||
for (pos = (head)->prev; pos != (head); \
|
||||
pos = pos->prev)
|
||||
|
||||
/**
|
||||
* list_for_each_safe - iterate over a list safe against removal of list entry
|
||||
* @pos: the &struct list_head to use as a loop counter.
|
||||
* @n: another &struct list_head to use as temporary storage
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define list_for_each_safe(pos, n, head) \
|
||||
for (pos = (head)->next, n = pos->next; pos != (head); \
|
||||
pos = n, n = pos->next)
|
||||
|
||||
/**
|
||||
* list_for_each_entry - iterate over list of given type
|
||||
* @pos: the type * to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_for_each_entry(pos, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member) \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "linux_wrapper.h"
|
||||
#define __KERNEL__
|
||||
#undef CONFIG_PCI
|
||||
#define CONFIG_PCI
|
||||
|
||||
#include "linux/usb.h"
|
||||
#include "linux_wrapper.h"
|
||||
#define __KERNEL__
|
||||
#undef CONFIG_PCI
|
||||
#define CONFIG_PCI
|
||||
|
||||
#include "linux/usb.h"
|
||||
|
|
|
@ -1,33 +1,33 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xusb.h
|
||||
// *
|
||||
// * note : Xbox USB Support
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XUSB_H
|
||||
#define XUSB_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * Xbox USB Support by Georg Archer
|
||||
// ******************************************************************
|
||||
#include "linux_wrapper.h"
|
||||
#include "linux/usb.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : xusb.h
|
||||
// *
|
||||
// * note : Xbox USB Support
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XUSB_H
|
||||
#define XUSB_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// ******************************************************************
|
||||
// * Xbox USB Support by Georg Archer
|
||||
// ******************************************************************
|
||||
#include "linux_wrapper.h"
|
||||
#include "linux/usb.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue