======================
= Code Contributions =
======================

To make a contribution to a TianoCore project, follow these steps.
1. Create a change description in the format specified below to
   use in the source control commit log.
2. Your commit message must include your "Signed-off-by" signature,
   and "Contributed-under" message.
3. Your "Contributed-under" message explicitly states that the
   contribution is made under the terms of the specified
   contribution agreement.  Your "Contributed-under" message
   must include the name of contribution agreement and version.
   For example: Contributed-under: TianoCore Contribution Agreement 1.1
   The "TianoCore Contribution Agreement" is included below in
   this document.
4. Submit your code to the TianoCore project using the process
   that the project documents on its web page.  If the process is
   not documented, then submit the code on development email list
   for the project.
5. It is preferred that contributions are submitted using the same
   copyright license as the base project. When that is not possible,
   then contributions using the following licenses can be accepted:
   * BSD (2-clause): http://opensource.org/licenses/BSD-2-Clause
   * BSD (3-clause): http://opensource.org/licenses/BSD-3-Clause
   * MIT: http://opensource.org/licenses/MIT
   * Python-2.0: http://opensource.org/licenses/Python-2.0
   * Zlib: http://opensource.org/licenses/Zlib

   For documentation:
   * FreeBSD Documentation License
     https://www.freebsd.org/copyright/freebsd-doc-license.html

   Contributions of code put into the public domain can also be
   accepted.

   Contributions using other licenses might be accepted, but further
   review will be required.

=====================================================
= Change Description / Commit Message / Patch Email =
=====================================================

Your change description should use the standard format for a
commit message, and must include your "Signed-off-by" signature
and the "Contributed-under" message.

== Sample Change Description / Commit Message =

=== Start of sample patch email message ===

From: Contributor Name <contributor@example.com>
Subject: [Repository/Branch PATCH] Module: Brief-single-line-summary

Full-commit-message

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Contributor Name <contributor@example.com>
---

An extra message for the patch email which will not be considered part
of the commit message can be added here.

Patch content inline or attached

=== End of sample patch email message ===

=== Notes for sample patch email ===

* The first line of commit message is taken from the email's subject
  line following [Repository/Branch PATCH]. The remaining portion of the
  commit message is the email's content until the '---' line.
* git format-patch is one way to create this format

=== Definitions for sample patch email ===

* "Repository" is the identifier of the repository the patch applies.
  This identifier should only be provided for repositories other than
  'edk2'. For example 'edk2-BuildSpecification' or 'staging'.
* "Branch" is the identifier of the branch the patch applies. This
  identifier should only be provided for branches other than 'edk2/master'.
  For example 'edk2/UDK2015', 'edk2-BuildSpecification/release/1.27', or
  'staging/edk2-test'.
* "Module" is a short identifier for the affected code or documentation. For
  example 'MdePkg', 'MdeModulePkg/UsbBusDxe', 'Introduction', or
  'EDK II INF File Format'.
* "Brief-single-line-summary" is a short summary of the change.
* The entire first line should be less than ~70 characters.
* "Full-commit-message" a verbose multiple line comment describing
  the change.  Each line should be less than ~70 characters.
* "Contributed-under" explicitly states that the contribution is
  made under the terms of the contribution agreement. This
  agreement is included below in this document.
* "Signed-off-by" is the contributor's signature identifying them
  by their real/legal name and their email address.

========================================
= TianoCore Contribution Agreement 1.1 =
========================================

INTEL CORPORATION ("INTEL") MAKES AVAILABLE SOFTWARE, DOCUMENTATION
("DOCUMENTATION"), INFORMATION AND/OR OTHER MATERIALS FOR USE IN THE
TIANOCORE OPEN SOURCE PROJECT (COLLECTIVELY "CONTENT"). USE OF THE CONTENT
IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT BETWEEN YOU AND
INTEL AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES
INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR
USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND
CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR
REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
USE THE CONTENT.

Unless otherwise indicated, all Content (except Documentation) made available
on the TianoCore site is provided to you under the terms and conditions of the
BSD License ("BSD"). A copy of the BSD License is available at
http://opensource.org/licenses/bsd-license.php
or when applicable, in the associated License.txt file.

Unless otherwise indicated, all Documentation made available on the
TianoCore site is provided to you under the terms and conditions of the
FreeBSD Documentation License ("FreeBSD"). A copy of the license is
available at https://www.freebsd.org/copyright/freebsd-doc-license.html or,
when applicable, in the associated License.txt file.

Certain other content may be made available under other licenses as
indicated in or with such Content (for example, in a License.txt file).

You accept and agree to the following terms and conditions for Your
present and future Contributions submitted to TianoCore site. Except
for the license granted to Intel hereunder, You reserve all right,
title, and interest in and to Your Contributions.

== SECTION 1: Definitions ==
* "You" or "Contributor" shall mean the copyright owner or legal
  entity authorized by the copyright owner that is making a
  Contribution hereunder. All other entities that control, are
  controlled by, or are under common control with that entity are
  considered to be a single Contributor. For the purposes of this
  definition, "control" means (i) the power, direct or indirect, to
  cause the direction or management of such entity, whether by
  contract or otherwise, or (ii) ownership of fifty percent (50%)
  or more of the outstanding shares, or (iii) beneficial ownership
  of such entity.
* "Contribution" shall mean any original work of authorship,
  including any modifications or additions to an existing work,
  that is intentionally submitted by You to the TinaoCore site for
  inclusion in, or documentation of, any of the Content. For the
  purposes of this definition, "submitted" means any form of
  electronic, verbal, or written communication sent to the
  TianoCore site or its representatives, including but not limited
  to communication on electronic mailing lists, source code
  control systems, and issue tracking systems that are managed by,
  or on behalf of, the TianoCore site for the purpose of
  discussing and improving the Content, but excluding
  communication that is conspicuously marked or otherwise
  designated in writing by You as "Not a Contribution."

== SECTION 2: License for Contributions ==
* Contributor hereby agrees that redistribution and use of the
  Contribution in source and binary forms, with or without
  modification, are permitted provided that the following
  conditions are met:
** Redistributions of source code must retain the Contributor's
   copyright notice, this list of conditions and the following
   disclaimer.
** Redistributions in binary form must reproduce the Contributor's
   copyright notice, this list of conditions and the following
   disclaimer in the documentation and/or other materials provided
   with the distribution.
* Disclaimer. None of the names of Contributor, Intel, or the names
  of their respective contributors may be used to endorse or
  promote products derived from this software without specific
  prior written permission.
* Contributor grants a license (with the right to sublicense) under
  claims of Contributor's patents that Contributor can license that
  are infringed by the Contribution (as delivered by Contributor) to
  make, use, distribute, sell, offer for sale, and import the
  Contribution and derivative works thereof solely to the minimum
  extent necessary for licensee to exercise the granted copyright
  license; this patent license applies solely to those portions of
  the Contribution that are unmodified. No hardware per se is
  licensed.
* EXCEPT AS EXPRESSLY SET FORTH IN SECTION 3 BELOW, THE
  CONTRIBUTION IS PROVIDED BY THE CONTRIBUTOR "AS IS" AND ANY
  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  CONTRIBUTOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
  CONTRIBUTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  DAMAGE.

== SECTION 3: Representations ==
* You represent that You are legally entitled to grant the above
  license. If your employer(s) has rights to intellectual property
  that You create that includes Your Contributions, You represent
  that You have received permission to make Contributions on behalf
  of that employer, that Your employer has waived such rights for
  Your Contributions.
* You represent that each of Your Contributions is Your original
  creation (see Section 4 for submissions on behalf of others).
  You represent that Your Contribution submissions include complete
  details of any third-party license or other restriction
  (including, but not limited to, related patents and trademarks)
  of which You are personally aware and which are associated with
  any part of Your Contributions.

== SECTION 4: Third Party Contributions ==
* Should You wish to submit work that is not Your original creation,
  You may submit it to TianoCore site separately from any
  Contribution, identifying the complete details of its source
  and of any license or other restriction (including, but not
  limited to, related patents, trademarks, and license agreements)
  of which You are personally aware, and conspicuously marking the
  work as "Submitted on behalf of a third-party: [named here]".

== SECTION 5: Miscellaneous ==
* Applicable Laws. Any claims arising under or relating to this
  Agreement shall be governed by the internal substantive laws of
  the State of Delaware or federal courts located in Delaware,
  without regard to principles of conflict of laws.
* Language. This Agreement is in the English language only, which
  language shall be controlling in all respects, and all versions
  of this Agreement in any other language shall be for accommodation
  only and shall not be binding. All communications and notices made
  or given pursuant to this Agreement, and all documentation and
  support to be provided, unless otherwise noted, shall be in the
  English language.

