/** @file

Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution.  The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php

THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

Module Name:

  Mtftp4Option.h

Abstract:

  Mtftp4 option process routines.


**/

#ifndef __EFI_MTFTP4_OPTION_H__
#define __EFI_MTFTP4_OPTION_H__

enum {
  MTFTP4_SUPPORTED_OPTIONS = 4,
  MTFTP4_OPCODE_LEN        = 2,
  MTFTP4_ERRCODE_LEN       = 2,
  MTFTP4_BLKNO_LEN         = 2,
  MTFTP4_DATA_HEAD_LEN     = 4,

  MTFTP4_BLKSIZE_EXIST     = 0x01,
  MTFTP4_TIMEOUT_EXIST     = 0x02,
  MTFTP4_TSIZE_EXIST       = 0x04,
  MTFTP4_MCAST_EXIST       = 0x08
};

typedef struct {
  UINT16                    BlkSize;
  UINT8                     Timeout;
  UINT32                    Tsize;
  IP4_ADDR                  McastIp;
  UINT16                    McastPort;
  BOOLEAN                   Master;
  UINT32                    Exist;
} MTFTP4_OPTION;

EFI_STATUS
Mtftp4ExtractOptions (
  IN  EFI_MTFTP4_PACKET     *Packet,
  IN  UINT32                PacketLen,
  IN  OUT UINT32            *OptionCount,
  OUT EFI_MTFTP4_OPTION     **OptionList OPTIONAL
  );

EFI_STATUS
Mtftp4ParseOption (
  IN  EFI_MTFTP4_OPTION     *OptionList,
  IN  UINT32                Count,
  IN  BOOLEAN               Request,
  OUT MTFTP4_OPTION         *Option
  );

EFI_STATUS
Mtftp4ParseOptionOack (
  IN  EFI_MTFTP4_PACKET     *Packet,
  IN  UINT32                PacketLen,
  OUT MTFTP4_OPTION         *Option
  );

extern CHAR8  *mMtftp4SupportedOptions[MTFTP4_SUPPORTED_OPTIONS];
#endif
