unformat.c 1.34 KB

#include "ddwriteint.h"


/*
 * Prototypes
 */
static u32 __formatSystemAreaSp(void);


s32 ddUnformat(void *buffer, u32 bufSize)
{
  u32		result;
  

  /*
   * 呼ばれるのがはじめてなら、初期化する
   */
  if (! __ddWriteActive)
  {
    __ddInit();
  
    if (__ddWriteError)
      return __ddWriteError;
  }
  
  /*
   * システム領域のフォーマット
   */
  if ( (result = __formatSystemAreaSp()) != 0 )
  {
    return (s32)result;
  }
  
  /*
   * ユーザエリアのアンフォーマット
   */
  if ( (result = __ddUnformatUserArea(buffer, bufSize)) != 0 )
  {
    return (s32)result;
  }
  
#if 1
  /*
   * システム領域のアンフォーマット
   */
  if ( (result = __ddUnformatSystemArea(buffer, bufSize)) != 0 )
  {
    return (s32)result;
  }
#endif

  return 0;
  

} /* LeoUnformat() */


/*
 * システム領域をフォーマットする。
 * unformat 専用バージョン
 */
static u32 __formatSystemAreaSp(void)
{
  __SystemInfo_s	sys;
  __DefectInfo_s	def;
  u32			formatType;
  u32			result;
  

  if ( (result = __ddReadDefectBlock(&def, &formatType)) != 0 )
  {
    return result;
  }
  
  /*
   * とりあえず、下記の情報でフォーマットしておく
   */
  sys.country = 0;
  sys.diskType = 0;
  sys.iplSize = 1;
  sys.loadAddr = (void *)0x80000400;

  if ( (result = __ddWriteSystemBlock(&sys, &def, formatType)) != 0 )
  {
    return result;
  }
  
  return 0;

} /* __formatSystemAreaSp() */