📄 davrecip.c
字号:
/* Copyright (c) 1995-2002 Intel Corporation */
/* Intel Confidential */
/* ###########################################################################
### RECINPLC
###
### Module: recinplc.c - Reclaim In Place
###
### $Workfile: davRecip.c $
### $Revision: 1.1 $
### $NoKeywords: $
########################################################################### */
/****************************************************************************
INTEL OEM SOFTWARE LICENSE AGREEMENT (LICENSE.TXT)
BY USING THIS SOFTWARE, YOU ("You" or "Licensee") ARE AGREEING TO BE
BOUND BY THE TERMS OF THIS AGREEMENT. DO NOT USE THE SOFTWARE UNTIL
YOU HAVE CAREFULLY READ AND AGREED TO THE FOLLOWING TERMS AND
CONDITIONS. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT,
PROMPTLY RETURN THE SOFTWARE, PACKAGING, AND ANY ACCOMPANYING ITEMS.
YOU MUST BE AN ORIGINAL EQUIPMENT MANUFACTURER ("OEM") SYSTEM DEVELOPER
TO ACQUIRE ANY RIGHTS IN THE SOFTWARE UNDER THIS LICENSE AGREEMENT.
"Source Code" means source code that you receive from Intel under this
Agreement. "Derived Object Code" means executable code derived from
Intel Source Code. "Software" means the Intel Source Code and object
code (unmodified by you) and related documentation that You receive
from Intel under this Agreement.
LICENSE: Intel Corporation ("Intel") grants You the non-exclusive,
nontransferable, royalty free right under Intel copyright to:
1. Reproduce and modify the Software, only for your own development
and maintenance, provided that You may not modify the Software for
use with flash products other than Intel Flash memory products;
2. Install, use, reproduce and distribute Derived Object Code
internally, only for Your own development and maintenance purposes;
3. Allow authorized contractors ("Subcontractors") engaged by You for
the sole purpose of product development work to have access to the
Software and any modified Source Code solely for that purpose.
Subcontractors do NOT acquire any of Your rights to the Software or
any modified Source Code provided in this Agreement;
4. Distribute Derived Object Code externally to Your bona fide customers
("Customers"), provided that You may not distribute Derived Object
Code for use with flash products other than Intel Flash memory
products; and
5. Copy the Software for Your support, backup or archival purposes.
RESTRICTIONS:
YOU ARE NOT ALLOWED TO:
1. Use, copy, modify, rent, sell, license, transfer, disclose or
distribute the Software, in whole or in part, except as provided for
in this Agreement;
2. Remove or modify the "Compatibility" module, if any, in the Software
or in any Derived Object Code;
3. Decompile or reverse engineer any Software delivered in object code
form.
THIS ROYALTY FREE LICENSE ALLOWS YOU TO USE THE SOFTWARE WITH INTEL FLASH
PRODUCTS ONLY. YOUR USE OF THE SOFTWARE WITH ANY OTHER FLASH PRODUCTS IS
EXPRESSLY PROHIBITED UNLESS AND UNTIL YOU APPLY FOR, AND ARE GRANTED IN
INTEL'S SOLE DISCRETION, A SEPARATE WRITTEN SOFTWARE LICENSE FROM INTEL
LICENSING ANY SUCH USE
YOU MUST execute the "Compatibility" module if provided with the Software.
TRANSFER: Except as provided above, You may not transfer or disclose the
Software to any other party.
OWNERSHIP AND COPYRIGHT OF SOFTWARE: Title to the Software and all copies
thereof remain with Intel. The Software is copyrighted and is protected
by United States and international copyright laws. You will not remove
the copyright notice from the Software. You agree to prevent the
unauthorized copying of the Software. You are not required to provide
Intel with a copy of any modified Source Code or Derived Object Code
created by You. Title to modified Source Code, other than the portion(s)
of the modified code consisting of any portion of the Software, shall
remain with You.
Your sale or distribution of Derived Object Code is at Your own risk and
expense.
CONFIDENTIALITY. Source Code may include trade secrets of Intel. You will
not disclose or otherwise make any part of Source Code (whether or not
modified by You) available, in any form, to any person other than Your
employees whose job performance requires such access. You agree to
instruct all such employees on these obligations with respect to use,
copying, protection, and confidentiality of Source Code. Even after this
Agreement terminates, the obligations of this section shall remain in
effect until the Source Code rightfully becomes publicly known. You may
not disclose the terms or existence of this Agreement or use Intel's name
in any publications, advertisements, or other announcements without Intel's
prior written consent. You do not have any rights to use Intel's trademarks.
Any Subcontractors to whom You disclose the Source Code must sign a written
confidentiality agreement which contains terms regarding the Software no
less restrictive than those set forth in this Agreement.
NO WARRANTY. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING THE SOFTWARE.
THE SOFTWARE IS PROVIDED "AS IS". INTEL SPECIFICALLY DISCLAIMS ANY OTHER
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WARRANTIES OF MERCHANTABILITY,
NONINFRINGEMENT OR FITNESS FOR ANY PARTICULAR PURPOSE.
LIMITATION OF LIABILITY. INTEL SHALL NOT BE LIABLE FOR ANY INDIRECT,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE, NOR ANY LOSS OF PROFITS, LOSS
OF USE, LOSS OF DATA, INTERRUPTION OF BUSINESS, OF ANY KIND, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES.
TERMINATION OF THIS LICENSE. You may terminate this Agreement and the
license granted herein at any time by notifying Intel in writing. Intel
reserves the right to conduct or have conducted audits to verify Your
compliance with this Agreement. Intel may terminate this Agreement at any
time if You are in breach of any of its terms and conditions. If this
Agreement is terminated for any reason, You will cease distribution of
Derived Object Code and, at Intel's option and within thirty (30) days
following termination, either return to Intel or destroy the original and
all copies of the Software and undistributed copies of Derived Object Code,
and certify to Intel that they have been destroyed.
U.S. GOVERNMENT RESTRICTED RIGHTS. The Software and documentation were
developed at private expense and are provided with "RESTRICTED RIGHTS".
If You distribute Derived Object Code to the U.S. Government or contractor
You must include the following legend on the distributed copy(ies): "Use,
duplication, and disclosure by the Government is subject to restrictions
set forth in FAR 52.227-14, DFARS 252.227-7013 or their successors."
EXPORT LAWS. Source Code and Derived Object Code may be controlled for
export purposes by the U.S. Government. You will not export, either
directly or indirectly, any Derived Object Code without first obtaining
any required license or other approval from the U.S. Department of
Commerce or any other agency or department of the United States
Government as required.
ENTIRE AGREEMENT. This is the entire agreement between You and Intel
relating to this subject matter, and no amendments will be effective
unless in a writing signed by both parties.
APPLICABLE LAW. This Agreement is governed by the laws of the State of
Delaware and the United States, including patent and copyright laws.
Any claim arising out of this Agreement will be brought in Delaware.
AGREEMENT ACCEPTANCE AND FILE PASSWORD ACCESS: The archive file that
contains the code included with this license agreement is encrypted and
password protected. In entering the password I_AGREE and by opening the
archive file You indicate Your acceptance of the terms of the above
agreement. Please see the accompanying "read me" (READxxxx.TXT) file
for detailed instructions on how to use the password.
PRODUCT REGISTRATION
To register your product, please print out this document, fill out the
following and return the entire document to Intel as indicated below.
Intel Flash Software_________________________________
(fill in software type, PSM, FDI, etc.)
Version___________________
(fill in version number)
LICENSEE
__________________________________________________
Company Name
__________________________________________________
Printed Name
__________________________________________________
Signature
__________________________________________________
Title
__________________________________________________
Date
__________________________________________________
Address
__________________________________________________
City
__________________________________________________
State/province
ZIP/postal code___________________________________
Country___________________________________________
EMAIL _________________________
Phone __________________________ Ext______
(Please include your area code or country/city code as
appropriate)
FAX _________________________
Application Details (please tell us about your product,
the flash use, and software use):
_______________________________________________________
_______________________________________________________
_______________________________________________________
Please return COMPLETELY filled out to:
Intel Corporation FAX: 916-356-2803
Intel Flash Software Marketing
FM3-163
1900 Prairie City Road
Folsom, CA 95630
Atten: Flash S/W License
Intel reserves the right to use and/or include Your name in
public relations activities and marketing material and may
request You to submit endorsements for the Software. If You
wish to discuss participation in this program, please send a
fax to 916-356-2803 attn: "Software Marketing" with contact
information and an Intel representative will contact You.
Revised: 02/16/01
***************************************************************************/
/*### Include Files
#########################*/
#include "dav.h"
#if (DIRECT_ACCESS_VOLUME == TRUE)
/*### Local Declarations
#########################*/
typedef enum
{
RECINPLC_STEP_NoRestart,
RECINPLC_STEP_BottomSection_RecoveryState1,
RECINPLC_STEP_BottomSection_RecoveryState2,
RECINPLC_STEP_BottomSection_RecoveryState3,
RECINPLC_STEP_BottomSection_RecoveryState4,
RECINPLC_STEP_MiddleSection,
RECINPLC_STEP_TopSection_RecoveryState1,
RECINPLC_STEP_TopSection_RecoveryState2,
RECINPLC_STEP_TopSection_RecoveryState3,
RECINPLC_STEP_TopSection_RecoveryState4,
RECINPLC_STEP_DeallocateRAT,
RECINPLC_STEP_MarkCfgEntryDone
} RECINPLC_RestartStates;
typedef enum
{
RECINPLC_RAT_NoStatus_NoStatus =
((RECINPLC_ST_NoStatus << 8) | RECINPLC_ST_NoStatus),
RECINPLC_RAT_EIP_NoStatus =
((RECINPLC_ST_EraseInProgress << 8) | RECINPLC_ST_NoStatus),
RECINPLC_RAT_EC_NoStatus =
((RECINPLC_ST_EraseComplete << 8) | RECINPLC_ST_NoStatus),
RECINPLC_RAT_CC_NoStatus =
((RECINPLC_ST_CopyComplete << 8) | RECINPLC_ST_NoStatus),
RECINPLC_RAT_Done_NoStatus =
((RECINPLC_ST_BlockDone << 8) | RECINPLC_ST_NoStatus),
RECINPLC_RAT_Done_EIP =
((RECINPLC_ST_BlockDone << 8) | RECINPLC_ST_EraseInProgress),
RECINPLC_RAT_Done_EC =
((RECINPLC_ST_BlockDone << 8) | RECINPLC_ST_EraseComplete),
RECINPLC_RAT_Done_CC =
((RECINPLC_ST_BlockDone << 8) | RECINPLC_ST_CopyComplete),
RECINPLC_RAT_Done_Done =
((RECINPLC_ST_BlockDone << 8) | RECINPLC_ST_BlockDone)
} RECINPLC_RestartStatus;
UINT32 RECINPLC_BottomSectionAddr;
UINT32 RECINPLC_TopSectionAddr;
UINT8 RECINPLC_BottomStatus;
UINT8 RECINPLC_TopStatus;
/*### Global Declarations
#########################*/
/*### Local Functions
#########################*/
ERR_CODE RECINPLC_AllocateRAT(HDR_SearchInfoPtr obj_info_ptr,
BOOLEAN restart);
ERR_CODE RECINPLC_InitRAT(const HDR_SearchInfo *table_info_ptr,
const HDR_SearchInfo *obj_info_ptr );
ERR_CODE RECINPLC_ProcessBlock(FDI_Handle table_base_addr,
FDI_Handle start_addr_in_block,
FDI_Handle end_addr_in_block,
RECINPLC_RestartStates rip_restart_state);
ERR_CODE RECINPLC_AuthenticateRAT(FDI_Handle table_address,
UINT32_PTR top_address_ptr,
UINT32_PTR bottom_address_ptr,
UINT8_PTR top_status,
UINT8_PTR bottom_status,
BOOLEAN restart);
ERR_CODE RECINPLC_EntryFixISF_PLR(RECINPLC_ReAllocateTable *rat_table_ptr,
UINT32 flash_address,
BOOLEAN restart);
/*### Global Functions
#########################*/
/*#################################################################
### RECLAIM_ReclaimObjectInPlace
###
### DESCRIPTION:
### This function will use the object info specified by the
### obj_info_ptr parameter and will erase all of the
### data associated with that object. Any valid data
### around that object will be preserved in the manor
### prescribed by the power loss recover and normal
### reclaim process.
###
### PARAMETERS:
### obj_info_ptr - IN: CurrObj.ObjectAddress must be valid.
### CurrObj.ObjectSize must be valid.
### - OUT: No change.
### restart - BOOLEAN to determine if this is a restart.
### On restart
### CurrObj.HeaderAddress = cfg_entry
### CurrObj.ObjectAddress = cfg_entry_index
###
### RETURNS:
### When this function passes with no errors a value of 0 is
### returned otherwise, it returns a status of type ERR_CODE.
###*/
ERR_CODE RECINPLC_ReclaimObjectInPlace(const HDR_SearchInfo *obj_info_ptr,
BOOLEAN restart)
{
ERR_CODE status = ERR_NONE; /* DAV init */
RECINPLC_RestartStates rip_restart_state;
CFGHDR_ConfigurationEntry cfg_entry;
UINT8 cfg_entry_index = 0;
UINT32 block;
UINT32 bottom_block = 0xffffffff; /* DAV init to illegal value */
UINT32 top_block;
UINT32 start_addr_in_block;
UINT32 end_addr_in_block;
HDR_CompareInfo compare_info;
RECINPLC_RestartStatus bottom_status_top_status;
#ifdef ENABLE_REALLOCATE_TESTS
EVT_TestEvent(EVT_RECINPLC_ReclaimInPlace_Start);
#endif
HDR_InitSearchInfo(&FDI_GlobalInfo, &FDI_GlobalHeader);
if (restart)
{
cfg_entry_index = (UINT8)obj_info_ptr->CurrObj.ObjectAddress;
if (CFGHDR_GetOffsetStatus(obj_info_ptr->CurrObj.ConfigEntry) ==
CFGHDR_STATUS_ValidOffset)
{
/* Load table_info with data for RAT */
FDI_GlobalInfo.CurrObj.ObjectSize = RECINPLC_ReAllocateTableSize;
FDI_GlobalInfo.CurrObj.HeaderAddress =
CFGHDR_GetOffset(obj_info_ptr->CurrObj.ConfigEntry);
FDI_GlobalInfo.CurrObj.ObjectAddress =
FDI_GlobalInfo.CurrObj.HeaderAddress -
FDI_GlobalInfo.CurrObj.ObjectSize;
/* Find an authentic RAT */
if ((status =
RECINPLC_AuthenticateRAT(FDI_GlobalInfo.CurrObj.ObjectAddress,
&RECINPLC_TopSectionAddr,
&RECINPLC_BottomSectionAddr,
&RECINPLC_TopStatus,
&RECINPLC_BottomStatus, restart))
!= ERR_NONE)
{
/* RAT was not found */
if(status != (ERR_CODE)1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -