Home | History | Annotate | Download | only in BsdSocketLib
      1 /** @file
      2   Definitions for the socket library.
      3 
      4   Copyright (c) 2011, Intel Corporation
      5   All rights reserved. This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _SOCKET_INTERNALS_H_
     16 #define _SOCKET_INTERNALS_H_
     17 
     18 #include <Uefi.h>
     19 
     20 //----------------------------------------------------------------------
     21 //
     22 //  The following private files are required to support file descriptors
     23 //
     24 
     25 #include <kfile.h>
     26 #include <MainData.h>
     27 
     28 #include <Efi/SysEfi.h>
     29 
     30 //
     31 //  End of private files
     32 //
     33 //----------------------------------------------------------------------
     34 
     35 #include <Library/DebugLib.h>
     36 #include <Library/UefiBootServicesTableLib.h>
     37 #include <Library/UefiLib.h>
     38 
     39 #include <Protocol/EfiSocket.h>
     40 #include <Protocol/ServiceBinding.h>
     41 
     42 #include <sys/errno.h>
     43 #include <sys/poll.h>
     44 #include <sys/EfiSysCall.h>
     45 #include <sys/socket.h>
     46 
     47 //------------------------------------------------------------------------------
     48 //  Support Routines
     49 //------------------------------------------------------------------------------
     50 
     51 /**
     52   Translate from the socket file descriptor to the socket protocol.
     53 
     54   @param [in] s             Socket file descriptor returned from ::socket.
     55 
     56   @param [in] ppDescriptor  Address to receive the descriptor structure
     57                             address for the file
     58   @param [in] pErrno        Address of the errno variable
     59 
     60   @return   A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
     61             an invalid file descriptor was passed in.
     62 
     63  **/
     64 EFI_SOCKET_PROTOCOL *
     65 BslFdToSocketProtocol (
     66   int s,
     67   struct __filedes ** ppDescriptor,
     68   int * pErrno
     69   );
     70 
     71 /**
     72   Close the socket
     73 
     74   The BslSocketClose routine is called indirectly from the close file
     75   system routine.  This routine closes the socket and returns the
     76   status to the caller.
     77 
     78   @param[in] pDescriptor Descriptor address for the file
     79 
     80   @return   This routine returns 0 upon success and -1 upon failure.
     81             In the case of failure, ::errno contains more information.
     82 
     83 **/
     84 int
     85 EFIAPI
     86 BslSocketClose (
     87   struct __filedes * pDescriptor
     88   );
     89 
     90 /**
     91   Worker routine to close the socket.
     92 
     93   @param[in] pSocketProtocol   Socket protocol structure address
     94 
     95   @param[in] pErrno            Address of the ::errno variable
     96 
     97   @retval EFI_SUCCESS   Successfully closed the socket
     98 
     99 **/
    100 EFI_STATUS
    101 BslSocketCloseWork (
    102   IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
    103   IN int * pErrno
    104   );
    105 
    106 /**
    107   Poll the socket for activity
    108 
    109   @param [in] pDescriptor Descriptor address for the file
    110 
    111   @param [in] Events      Mask of events to detect
    112 
    113   @return     Detected events for the socket
    114 
    115  **/
    116 short
    117 EFIAPI
    118 BslSocketPoll (
    119   IN struct __filedes * pDescriptor,
    120   IN short Events
    121   );
    122 
    123 /**
    124   Build a file descriptor for a socket.
    125 
    126   @param [in] pSocketProtocol   Socket protocol structure address
    127 
    128   @param [in] pErrno            Address of the errno variable
    129 
    130   @return  The file descriptor for the socket or -1 if an error occurs.
    131 
    132  **/
    133 int
    134 BslSocketProtocolToFd (
    135   IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
    136   IN int * pErrno
    137   );
    138 
    139 /**
    140   Read support routine for sockets
    141 
    142   The BslSocketRead routine is called indirectly by the read file
    143   system routine.  This routine is typically used for SOCK_STREAM
    144   because it waits for receive data from the target system specified
    145   in the ::connect call.
    146 
    147   @param [in] pDescriptor   Descriptor address for the file
    148   @param [in] pOffset       File offset
    149   @param [in] LengthInBytes Number of bytes to read
    150   @param [in] pBuffer       Address of the buffer to receive the data
    151 
    152   @return   The number of bytes read or -1 if an error occurs.
    153             In the case of an error, ::errno contains more details.
    154 
    155 **/
    156 ssize_t
    157 EFIAPI
    158 BslSocketRead (
    159   struct __filedes *pDescriptor,
    160   off_t * pOffset,
    161   size_t LengthInBytes,
    162   void * pBuffer
    163   );
    164 
    165 /**
    166   Write support routine for sockets
    167 
    168   @param [in] pDescriptor   Descriptor address for the file
    169   @param [in] pOffset       File offset
    170   @param [in] LengthInBytes Number of bytes to write
    171   @param [in] pBuffer       Address of the data
    172 
    173   @return   The number of bytes written or -1 if an error occurs.
    174             In the case of an error, ::errno contains more details.
    175 
    176 **/
    177 ssize_t
    178 EFIAPI
    179 BslSocketWrite (
    180   struct __filedes *pDescriptor,
    181   off_t * pOffset,
    182   size_t LengthInBytes,
    183   const void * pBuffer
    184   );
    185 
    186 /**
    187   Validate the socket's file descriptor
    188 
    189   @param [in] pDescriptor Descriptor for the file
    190 
    191   @param [in] pErrno      Address of the errno variable
    192 
    193   @return   A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
    194             an invalid file descriptor was passed in.
    195 
    196  **/
    197 EFI_SOCKET_PROTOCOL *
    198 BslValidateSocketFd (
    199   struct __filedes * pDescriptor,
    200   int * pErrno
    201   );
    202 
    203 //------------------------------------------------------------------------------
    204 
    205 #endif  //  _SOCKET_INTERNALS_H_
    206