Functions which call these helper functions always pass the last parameter as a va_list argument. Add a conditional block around a MSFT-only pragma so that stringlist.c will compile with GCC. Comment-out the Socket Library components within StdLib.dsc. These components are still in development. Signed-off-by: darylm503 Reviewed by: geekboy15A git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12369 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
    Device Abstraction: device creation utility functions.
 | 
						|
 | 
						|
    Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
 | 
						|
    This program and the accompanying materials are licensed and made available under
 | 
						|
    the terms and conditions of the BSD License that 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.
 | 
						|
**/
 | 
						|
#include  <Uefi.h>
 | 
						|
#include  <Library/BaseLib.h>
 | 
						|
#include  <Library/MemoryAllocationLib.h>
 | 
						|
 | 
						|
#include  <LibConfig.h>
 | 
						|
 | 
						|
#include  <errno.h>
 | 
						|
#include  <stdarg.h>
 | 
						|
#include  <sys/poll.h>
 | 
						|
#include  <kfile.h>
 | 
						|
#include  <Device/Device.h>
 | 
						|
#include  <MainData.h>
 | 
						|
 | 
						|
LIST_ENTRY    daDeviceList    = INITIALIZE_LIST_HEAD_VARIABLE(daDeviceList);
 | 
						|
DeviceNode   *daDefaultDevice = NULL;     ///< Device to use if nothing else found
 | 
						|
DeviceNode   *daRootDevice    = NULL;     ///< Device containing the root file system
 | 
						|
DeviceNode   *daCurrentDevice = NULL;     ///< Device currently being accessed
 | 
						|
 | 
						|
/* Commonly used fileops
 | 
						|
      fnullop_*   Does nothing and returns success.
 | 
						|
      fbadop_*    Does nothing and returns EPERM
 | 
						|
*/
 | 
						|
int     EFIAPI fnullop_fcntl (struct __filedes *filp, UINT32 Cmd, void *p3, void *p4)
 | 
						|
{ return 0; }
 | 
						|
 | 
						|
short  EFIAPI fnullop_poll  (struct __filedes *filp, short Events)
 | 
						|
{
 | 
						|
  return ((POLLIN | POLLRDNORM | POLLOUT) & Events);
 | 
						|
}
 | 
						|
 | 
						|
int     EFIAPI fnullop_flush (struct __filedes *filp)
 | 
						|
{ return 0; }
 | 
						|
 | 
						|
int     EFIAPI fbadop_stat   (struct __filedes *filp, struct stat *StatBuf, void *Buf)
 | 
						|
{ return -EPERM;  }
 | 
						|
 | 
						|
int     EFIAPI fbadop_ioctl  (struct __filedes *filp, ULONGN Cmd, va_list argp)
 | 
						|
{ return -EPERM;  }
 | 
						|
 | 
						|
int     EFIAPI fbadop_delete (struct __filedes *filp)
 | 
						|
{ return -EPERM;  }
 | 
						|
 | 
						|
int     EFIAPI fbadop_mkdir  (const char *path, __mode_t perms)
 | 
						|
{ return -EPERM;  }
 | 
						|
 | 
						|
int     EFIAPI fbadop_rename   (const char *from, const char *to)
 | 
						|
{ return -EPERM;  }
 | 
						|
 | 
						|
int     EFIAPI fbadop_rmdir    (struct __filedes *filp)
 | 
						|
{ return -EPERM;  }
 | 
						|
 | 
						|
/** Add a new device to the device list.
 | 
						|
    If both DevName and DevProto are NULL, register this as the Default device.
 | 
						|
 | 
						|
    @param  DevName       Name of the device to add.
 | 
						|
    @param  DevProto      Pointer to the GUID identifying the protocol associated with this device.
 | 
						|
                          If DevProto is NULL, startup code will not try to find instances
 | 
						|
                          of this device.
 | 
						|
    @param  OpenFunc      Pointer to the device's Open function.
 | 
						|
    @param  InstanceList  Optional pointer to the device's initialized instance list.
 | 
						|
                          If InstanceList is NULL, the application startup code will
 | 
						|
                          scan for instances of the protocol identified by DevProto and
 | 
						|
                          populate the InstanceList in the order those protocols are found.
 | 
						|
    @param  NumInstance   Number of instances in InstanceList.
 | 
						|
    @param  Modes         Bit-mapped flags indicating operations (R, W, RW, ...) permitted to this device.
 | 
						|
 | 
						|
**/
 | 
						|
DeviceNode *
 | 
						|
EFIAPI
 | 
						|
__DevRegister(
 | 
						|
  IN const CHAR16          *DevName,
 | 
						|
  IN GUID                  *DevProto,
 | 
						|
  IN FO_OPEN                OpenFunc,
 | 
						|
  IN void                  *InstanceList,
 | 
						|
  IN int                    NumInstance,
 | 
						|
  IN UINT32                 InstanceSize,
 | 
						|
  IN UINT32                 Modes
 | 
						|
  )
 | 
						|
{
 | 
						|
  DeviceNode         *Node;
 | 
						|
  GenericInstance    *GIp;
 | 
						|
  char               *GenPtr;
 | 
						|
  int                 i;
 | 
						|
 | 
						|
  /* Validate parameters */
 | 
						|
  if(((DevName == NULL) && (DevProto != NULL)) ||
 | 
						|
      (OpenFunc == NULL)) {
 | 
						|
    EFIerrno = RETURN_INVALID_PARAMETER;
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
  Node = (DeviceNode *)AllocateZeroPool(sizeof(DeviceNode));
 | 
						|
  if(Node == NULL) {
 | 
						|
    EFIerrno = RETURN_OUT_OF_RESOURCES;
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  Node->DevName       = DevName;
 | 
						|
  Node->DevProto      = DevProto;
 | 
						|
  Node->InstanceList  = InstanceList;
 | 
						|
  Node->OpenFunc      = OpenFunc;
 | 
						|
  Node->InstanceSize  = InstanceSize;
 | 
						|
  Node->NumInstances  = NumInstance;
 | 
						|
  Node->OpModes       = Modes;
 | 
						|
 | 
						|
  /* Update the Parent member of each element of the InstanceList */
 | 
						|
  if(InstanceList != NULL) {
 | 
						|
    GenPtr = InstanceList;
 | 
						|
 | 
						|
    for(i = 0; i < NumInstance; ++i) {    // Iterate through each element of InstanceList
 | 
						|
      GIp = (GenericInstance *)GenPtr;
 | 
						|
      GIp->Parent = Node;                     // Initializing the Parent member & InstanceNum
 | 
						|
      //GIp->InstanceNum = i;
 | 
						|
      GenPtr += InstanceSize;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  if(DevName == NULL) {
 | 
						|
    if(daDefaultDevice != NULL) {
 | 
						|
      EFIerrno = RETURN_INVALID_PARAMETER;
 | 
						|
      return NULL;
 | 
						|
    }
 | 
						|
    daDefaultDevice = Node;
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    (void) InsertTailList(&daDeviceList, &Node->DevList);
 | 
						|
  }
 | 
						|
  EFIerrno = RETURN_SUCCESS;
 | 
						|
  return Node;
 | 
						|
}
 |