mirror of
https://github.com/xcat2/xNBA.git
synced 2025-04-13 16:57:25 +00:00
[PXEXT] Add FILE_API_CHECK API function
Add FILE_API_CHECK to the PXEXT API so the NBP can query the availability and status of the API.
This commit is contained in:
parent
83617e5b1c
commit
d62e89d776
@ -97,6 +97,7 @@ union pxenv_call {
|
||||
PXENV_EXIT_t ( * file_read ) ( struct s_PXENV_FILE_READ * );
|
||||
PXENV_EXIT_t ( * get_file_size ) ( struct s_PXENV_GET_FILE_SIZE * );
|
||||
PXENV_EXIT_t ( * file_exec ) ( struct s_PXENV_FILE_EXEC * );
|
||||
PXENV_EXIT_t ( * file_api_check ) ( struct s_PXENV_FILE_API_CHECK * );
|
||||
};
|
||||
|
||||
/**
|
||||
@ -299,6 +300,10 @@ __cdecl void pxe_api_call ( struct i386_all_regs *ix86 ) {
|
||||
pxenv_call.file_exec = pxenv_file_exec;
|
||||
param_len = sizeof ( pxenv_any.file_exec );
|
||||
break;
|
||||
case PXENV_FILE_API_CHECK:
|
||||
pxenv_call.file_api_check = pxenv_file_api_check;
|
||||
param_len = sizeof ( pxenv_any.file_api_check );
|
||||
break;
|
||||
default:
|
||||
DBG ( "PXENV_UNKNOWN_%hx", opcode );
|
||||
pxenv_call.unknown = pxenv_unknown;
|
||||
|
@ -64,6 +64,7 @@ union u_PXENV_ANY {
|
||||
struct s_PXENV_FILE_READ file_read;
|
||||
struct s_PXENV_GET_FILE_SIZE get_file_size;
|
||||
struct s_PXENV_FILE_EXEC file_exec;
|
||||
struct s_PXENV_FILE_API_CHECK file_api_check;
|
||||
};
|
||||
|
||||
typedef union u_PXENV_ANY PXENV_ANY_t;
|
||||
|
@ -1706,6 +1706,32 @@ extern PXENV_EXIT_t pxenv_file_exec ( struct s_PXENV_FILE_EXEC *file_exec );
|
||||
|
||||
/** @} */ /* pxenv_file_exec */
|
||||
|
||||
/** @defgroup pxenv_file_api_check PXENV_FILE_API_CHECK
|
||||
*
|
||||
* FILE API CHECK
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** PXE API function code for pxenv_file_api_check() */
|
||||
#define PXENV_FILE_API_CHECK 0x00e6
|
||||
|
||||
/** Parameter block for pxenv_file_api_check() */
|
||||
struct s_PXENV_FILE_API_CHECK {
|
||||
PXENV_STATUS_t Status; /**< PXE status code */
|
||||
UINT16_t Size; /**< Size of structure */
|
||||
UINT32_t Magic; /**< Magic number */
|
||||
UINT32_t Provider; /**< Implementation identifier */
|
||||
UINT32_t APIMask; /**< Supported API functions */
|
||||
UINT32_t Flags; /**< Reserved for the future */
|
||||
} PACKED;
|
||||
|
||||
typedef struct s_PXENV_FILE_API_CHECK PXENV_FILE_API_CHECK_t;
|
||||
|
||||
extern PXENV_EXIT_t pxenv_file_api_check ( struct s_PXENV_FILE_API_CHECK *file_api_check );
|
||||
|
||||
/** @} */ /* pxenv_file_api_check */
|
||||
|
||||
/** @} */ /* pxe_file_api */
|
||||
|
||||
/** @defgroup pxe_loader_api PXE Loader API
|
||||
|
@ -227,3 +227,38 @@ PXENV_EXIT_t pxenv_file_exec ( struct s_PXENV_FILE_EXEC *file_exec ) {
|
||||
file_exec->Status = PXENV_STATUS_SUCCESS;
|
||||
return PXENV_EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* FILE API CHECK
|
||||
*
|
||||
* @v file_exec Pointer to a struct s_PXENV_FILE_API_CHECK
|
||||
* @v s_PXENV_FILE_API_CHECK::Magic Inbound magic number (0x91d447b2)
|
||||
* @ret #PXENV_EXIT_SUCCESS Command was executed successfully
|
||||
* @ret #PXENV_EXIT_FAILURE Command was not executed successfully
|
||||
* @ret s_PXENV_FILE_API_CHECK::Status PXE status code
|
||||
* @ret s_PXENV_FILE_API_CHECK::Magic Outbound magic number (0xe9c17b20)
|
||||
* @ret s_PXENV_FILE_API_CHECK::Provider "gPXE" (0x45585067)
|
||||
* @ret s_PXENV_FILE_API_CHECK::APIMask API function bitmask
|
||||
* @ret s_PXENV_FILE_API_CHECK::Flags Reserved
|
||||
*
|
||||
*/
|
||||
PXENV_EXIT_t pxenv_file_api_check ( struct s_PXENV_FILE_API_CHECK *file_api_check ) {
|
||||
DBG ( "PXENV_FILE_API_CHECK" );
|
||||
|
||||
if ( file_api_check->Magic != 0x91d447b2 ) {
|
||||
file_api_check->Status = PXENV_STATUS_BAD_FUNC;
|
||||
return PXENV_EXIT_FAILURE;
|
||||
} else if ( file_api_check->Size <
|
||||
sizeof(struct s_PXENV_FILE_API_CHECK) ) {
|
||||
file_api_check->Status = PXENV_STATUS_OUT_OF_RESOURCES;
|
||||
return PXENV_EXIT_FAILURE;
|
||||
} else {
|
||||
file_api_check->Status = PXENV_STATUS_SUCCESS;
|
||||
file_api_check->Size = sizeof(struct s_PXENV_FILE_API_CHECK);
|
||||
file_api_check->Magic = 0xe9c17b20;
|
||||
file_api_check->Provider = 0x45585067; /* "gPXE" */
|
||||
file_api_check->APIMask = 0x0000007f; /* Functions e0-e6 */
|
||||
file_api_check->Flags = 0; /* None defined */
|
||||
return PXENV_EXIT_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user