diff options
Diffstat (limited to 'src/arch/i386/include')
| -rw-r--r-- | src/arch/i386/include/pxe.h | 49 | ||||
| -rw-r--r-- | src/arch/i386/include/pxe_api.h | 118 |
2 files changed, 47 insertions, 120 deletions
diff --git a/src/arch/i386/include/pxe.h b/src/arch/i386/include/pxe.h index 909c8d818..a6bb65c00 100644 --- a/src/arch/i386/include/pxe.h +++ b/src/arch/i386/include/pxe.h @@ -6,8 +6,12 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include "pxe_types.h" #include "pxe_api.h" #include <ipxe/device.h> +#include <ipxe/tables.h> -/* Parameter block for pxenv_unknown() */ +/** PXE API invalid function code */ +#define PXENV_UNKNOWN 0xffff + +/** Parameter block for pxenv_unknown() */ struct s_PXENV_UNKNOWN { PXENV_STATUS_t Status; /**< PXE status code */ } __attribute__ (( packed )); @@ -72,6 +76,45 @@ union u_PXENV_ANY { typedef union u_PXENV_ANY PXENV_ANY_t; +/** A PXE API call */ +struct pxe_api_call { + /** Entry point + * + * @v params PXE API call parameters + * @ret exit PXE API call exit code + */ + PXENV_EXIT_t ( * entry ) ( union u_PXENV_ANY *params ); + /** Length of parameters */ + uint16_t params_len; + /** Opcode */ + uint16_t opcode; +}; + +/** PXE API call table */ +#define PXE_API_CALLS __table ( struct pxe_api_call, "pxe_api_calls" ) + +/** Declare a PXE API call */ +#define __pxe_api_call __table_entry ( PXE_API_CALLS, 01 ) + +/** + * Define a PXE API call + * + * @v _opcode Opcode + * @v _entry Entry point + * @v _params_type Type of parameter structure + * @ret call PXE API call + */ +#define PXE_API_CALL( _opcode, _entry, _params_type ) { \ + .entry = ( ( ( ( PXENV_EXIT_t ( * ) ( _params_type *params ) ) NULL ) \ + == ( ( typeof ( _entry ) * ) NULL ) ) \ + ? ( ( PXENV_EXIT_t ( * ) \ + ( union u_PXENV_ANY *params ) ) _entry ) \ + : ( ( PXENV_EXIT_t ( * ) \ + ( union u_PXENV_ANY *params ) ) _entry ) ), \ + .params_len = sizeof ( _params_type ), \ + .opcode = _opcode, \ + } + /** An UNDI expansion ROM header */ struct undi_rom_header { /** Signature @@ -144,9 +187,11 @@ struct pcir_header { #define PCIR_SIGNATURE \ ( ( 'P' << 0 ) + ( 'C' << 8 ) + ( 'I' << 16 ) + ( 'R' << 24 ) ) - extern struct net_device *pxe_netdev; extern void pxe_set_netdev ( struct net_device *netdev ); +extern PXENV_EXIT_t pxenv_tftp_read_file ( struct s_PXENV_TFTP_READ_FILE + *tftp_read_file ); +extern PXENV_EXIT_t undi_loader ( struct s_UNDI_LOADER *undi_loader ); #endif /* PXE_H */ diff --git a/src/arch/i386/include/pxe_api.h b/src/arch/i386/include/pxe_api.h index 9b40187ed..f40138467 100644 --- a/src/arch/i386/include/pxe_api.h +++ b/src/arch/i386/include/pxe_api.h @@ -252,9 +252,6 @@ struct s_PXENV_UNLOAD_STACK { typedef struct s_PXENV_UNLOAD_STACK PXENV_UNLOAD_STACK_t; -extern PXENV_EXIT_t pxenv_unload_stack ( struct s_PXENV_UNLOAD_STACK - *unload_stack ); - /** @} */ /* pxenv_unload_stack */ /** @defgroup pxenv_get_cached_info PXENV_GET_CACHED_INFO @@ -403,9 +400,6 @@ struct bootph { typedef struct bootph BOOTPLAYER_t; -extern PXENV_EXIT_t pxenv_get_cached_info ( struct s_PXENV_GET_CACHED_INFO - *get_cached_info ); - /** @} */ /* pxenv_get_cached_info */ /** @defgroup pxenv_restart_tftp PXENV_RESTART_TFTP @@ -423,9 +417,6 @@ struct s_PXENV_TFTP_READ_FILE; typedef struct s_PXENV_RESTART_TFTP PXENV_RESTART_TFTP_t; -extern PXENV_EXIT_t pxenv_restart_tftp ( struct s_PXENV_TFTP_READ_FILE - *restart_tftp ); - /** @} */ /* pxenv_restart_tftp */ /** @defgroup pxenv_start_undi PXENV_START_UNDI @@ -496,8 +487,6 @@ struct s_PXENV_START_UNDI { typedef struct s_PXENV_START_UNDI PXENV_START_UNDI_t; -extern PXENV_EXIT_t pxenv_start_undi ( struct s_PXENV_START_UNDI *start_undi ); - /** @} */ /* pxenv_start_undi */ /** @defgroup pxenv_stop_undi PXENV_STOP_UNDI @@ -517,8 +506,6 @@ struct s_PXENV_STOP_UNDI { typedef struct s_PXENV_STOP_UNDI PXENV_STOP_UNDI_t; -extern PXENV_EXIT_t pxenv_stop_undi ( struct s_PXENV_STOP_UNDI *stop_undi ); - /** @} */ /* pxenv_stop_undi */ /** @defgroup pxenv_start_base PXENV_START_BASE @@ -538,8 +525,6 @@ struct s_PXENV_START_BASE { typedef struct s_PXENV_START_BASE PXENV_START_BASE_t; -extern PXENV_EXIT_t pxenv_start_base ( struct s_PXENV_START_BASE *start_base ); - /** @} */ /* pxenv_start_base */ /** @defgroup pxenv_stop_base PXENV_STOP_BASE @@ -559,8 +544,6 @@ struct s_PXENV_STOP_BASE { typedef struct s_PXENV_STOP_BASE PXENV_STOP_BASE_t; -extern PXENV_EXIT_t pxenv_stop_base ( struct s_PXENV_STOP_BASE *stop_base ); - /** @} */ /* pxenv_stop_base */ /** @} */ /* pxe_preboot_api */ @@ -600,8 +583,6 @@ struct s_PXENV_TFTP_OPEN { typedef struct s_PXENV_TFTP_OPEN PXENV_TFTP_OPEN_t; -extern PXENV_EXIT_t pxenv_tftp_open ( struct s_PXENV_TFTP_OPEN *tftp_open ); - /** @} */ /* pxenv_tftp_open */ /** @defgroup pxenv_tftp_close PXENV_TFTP_CLOSE @@ -621,8 +602,6 @@ struct s_PXENV_TFTP_CLOSE { typedef struct s_PXENV_TFTP_CLOSE PXENV_TFTP_CLOSE_t; -extern PXENV_EXIT_t pxenv_tftp_close ( struct s_PXENV_TFTP_CLOSE *tftp_close ); - /** @} */ /* pxenv_tftp_close */ /** @defgroup pxenv_tftp_read PXENV_TFTP_READ @@ -645,8 +624,6 @@ struct s_PXENV_TFTP_READ { typedef struct s_PXENV_TFTP_READ PXENV_TFTP_READ_t; -extern PXENV_EXIT_t pxenv_tftp_read ( struct s_PXENV_TFTP_READ *tftp_read ); - /** @} */ /* pxenv_tftp_read */ /** @defgroup pxenv_tftp_read_file PXENV_TFTP_READ_FILE @@ -690,9 +667,6 @@ struct s_PXENV_TFTP_READ_FILE { typedef struct s_PXENV_TFTP_READ_FILE PXENV_TFTP_READ_FILE_t; -extern PXENV_EXIT_t pxenv_tftp_read_file ( struct s_PXENV_TFTP_READ_FILE - *tftp_read_file ); - /** @} */ /* pxenv_tftp_read_file */ /** @defgroup pxenv_tftp_get_fsize PXENV_TFTP_GET_FSIZE @@ -716,9 +690,6 @@ struct s_PXENV_TFTP_GET_FSIZE { typedef struct s_PXENV_TFTP_GET_FSIZE PXENV_TFTP_GET_FSIZE_t; -extern PXENV_EXIT_t pxenv_tftp_get_fsize ( struct s_PXENV_TFTP_GET_FSIZE - *get_fsize ); - /** @} */ /* pxenv_tftp_get_fsize */ /** @} */ /* pxe_tftp_api */ @@ -748,8 +719,6 @@ struct s_PXENV_UDP_OPEN { typedef struct s_PXENV_UDP_OPEN PXENV_UDP_OPEN_t; -extern PXENV_EXIT_t pxenv_udp_open ( struct s_PXENV_UDP_OPEN *udp_open ); - /** @} */ /* pxenv_udp_open */ /** @defgroup pxenv_udp_close PXENV_UDP_CLOSE @@ -769,8 +738,6 @@ struct s_PXENV_UDP_CLOSE { typedef struct s_PXENV_UDP_CLOSE PXENV_UDP_CLOSE_t; -extern PXENV_EXIT_t pxenv_udp_close ( struct s_PXENV_UDP_CLOSE *udp_close ); - /** @} */ /* pxenv_udp_close */ /** @defgroup pxenv_udp_write PXENV_UDP_WRITE @@ -796,8 +763,6 @@ struct s_PXENV_UDP_WRITE { typedef struct s_PXENV_UDP_WRITE PXENV_UDP_WRITE_t; -extern PXENV_EXIT_t pxenv_udp_write ( struct s_PXENV_UDP_WRITE *udp_write ); - /** @} */ /* pxenv_udp_write */ /** @defgroup pxenv_udp_read PXENV_UDP_READ @@ -823,8 +788,6 @@ struct s_PXENV_UDP_READ { typedef struct s_PXENV_UDP_READ PXENV_UDP_READ_t; -extern PXENV_EXIT_t pxenv_udp_read ( struct s_PXENV_UDP_READ *udp_read ); - /** @} */ /* pxenv_udp_read */ /** @} */ /* pxe_udp_api */ @@ -860,9 +823,6 @@ struct s_PXENV_UNDI_STARTUP { typedef struct s_PXENV_UNDI_STARTUP PXENV_UNDI_STARTUP_t; -extern PXENV_EXIT_t pxenv_undi_startup ( struct s_PXENV_UNDI_STARTUP - *undi_startup ); - /** @} */ /* pxenv_undi_startup */ /** @defgroup pxenv_undi_cleanup PXENV_UNDI_CLEANUP @@ -882,9 +842,6 @@ struct s_PXENV_UNDI_CLEANUP { typedef struct s_PXENV_UNDI_CLEANUP PXENV_UNDI_CLEANUP_t; -extern PXENV_EXIT_t pxenv_undi_cleanup ( struct s_PXENV_UNDI_CLEANUP - *undi_cleanup ); - /** @} */ /* pxenv_undi_cleanup */ /** @defgroup pxenv_undi_initialize PXENV_UNDI_INITIALIZE @@ -913,9 +870,6 @@ struct s_PXENV_UNDI_INITIALIZE { typedef struct s_PXENV_UNDI_INITIALIZE PXENV_UNDI_INITIALIZE_t; -extern PXENV_EXIT_t pxenv_undi_initialize ( struct s_PXENV_UNDI_INITIALIZE - *undi_initialize ); - /** @} */ /* pxenv_undi_initialize */ /** @defgroup pxenv_undi_reset_adapter PXENV_UNDI_RESET_ADAPTER @@ -950,9 +904,6 @@ struct s_PXENV_UNDI_RESET { typedef struct s_PXENV_UNDI_RESET PXENV_UNDI_RESET_t; -extern PXENV_EXIT_t pxenv_undi_reset_adapter ( struct s_PXENV_UNDI_RESET - *undi_reset_adapter ); - /** @} */ /* pxenv_undi_reset_adapter */ /** @defgroup pxenv_undi_shutdown PXENV_UNDI_SHUTDOWN @@ -972,9 +923,6 @@ struct s_PXENV_UNDI_SHUTDOWN { typedef struct s_PXENV_UNDI_SHUTDOWN PXENV_UNDI_SHUTDOWN_t; -extern PXENV_EXIT_t pxenv_undi_shutdown ( struct s_PXENV_UNDI_SHUTDOWN - *undi_shutdown ); - /** @} */ /* pxenv_undi_shutdown */ /** @defgroup pxenv_undi_open PXENV_UNDI_OPEN @@ -1024,8 +972,6 @@ struct s_PXENV_UNDI_OPEN { typedef struct s_PXENV_UNDI_OPEN PXENV_UNDI_OPEN_t; -extern PXENV_EXIT_t pxenv_undi_open ( struct s_PXENV_UNDI_OPEN *undi_open ); - /** @} */ /* pxenv_undi_open */ /** @defgroup pxenv_undi_close PXENV_UNDI_CLOSE @@ -1045,8 +991,6 @@ struct s_PXENV_UNDI_CLOSE { typedef struct s_PXENV_UNDI_CLOSE PXENV_UNDI_CLOSE_t; -extern PXENV_EXIT_t pxenv_undi_close ( struct s_PXENV_UNDI_CLOSE *undi_close ); - /** @} */ /* pxenv_undi_close */ /** @defgroup pxenv_undi_transmit PXENV_UNDI_TRANSMIT @@ -1122,9 +1066,6 @@ struct s_PXENV_UNDI_TRANSMIT { typedef struct s_PXENV_UNDI_TRANSMIT PXENV_UNDI_TRANSMIT_t; -extern PXENV_EXIT_t pxenv_undi_transmit ( struct s_PXENV_UNDI_TRANSMIT - *undi_transmit ); - /** @} */ /* pxenv_undi_transmit */ /** @defgroup pxenv_undi_set_mcast_address PXENV_UNDI_SET_MCAST_ADDRESS @@ -1146,9 +1087,6 @@ struct s_PXENV_UNDI_SET_MCAST_ADDRESS { typedef struct s_PXENV_UNDI_SET_MCAST_ADDRESS PXENV_UNDI_SET_MCAST_ADDRESS_t; -extern PXENV_EXIT_t pxenv_undi_set_mcast_address ( - struct s_PXENV_UNDI_SET_MCAST_ADDRESS *undi_set_mcast_address ); - /** @} */ /* pxenv_undi_set_mcast_address */ /** @defgroup pxenv_undi_set_station_address PXENV_UNDI_SET_STATION_ADDRESS @@ -1169,9 +1107,6 @@ struct s_PXENV_UNDI_SET_STATION_ADDRESS { typedef struct s_PXENV_UNDI_SET_STATION_ADDRESS PXENV_UNDI_SET_STATION_ADDRESS_t; -extern PXENV_EXIT_t pxenv_undi_set_station_address ( - struct s_PXENV_UNDI_SET_STATION_ADDRESS *undi_set_station_address ); - /** @} */ /* pxenv_undi_set_station_address */ /** @defgroup pxenv_undi_set_packet_filter PXENV_UNDI_SET_PACKET_FILTER @@ -1202,9 +1137,6 @@ struct s_PXENV_UNDI_SET_PACKET_FILTER { typedef struct s_PXENV_UNDI_SET_PACKET_FILTER PXENV_UNDI_SET_PACKET_FILTER_t; -extern PXENV_EXIT_t pxenv_undi_set_packet_filter ( - struct s_PXENV_UNDI_SET_PACKET_FILTER *undi_set_packet_filter ); - /** @} */ /* pxenv_undi_set_packet_filter */ /** @defgroup pxenv_undi_get_information PXENV_UNDI_GET_INFORMATION @@ -1248,9 +1180,6 @@ struct s_PXENV_UNDI_GET_INFORMATION { typedef struct s_PXENV_UNDI_GET_INFORMATION PXENV_UNDI_GET_INFORMATION_t; -extern PXENV_EXIT_t pxenv_undi_get_information ( - struct s_PXENV_UNDI_GET_INFORMATION *undi_get_information ); - /** @} */ /* pxenv_undi_get_information */ /** @defgroup pxenv_undi_get_statistics PXENV_UNDI_GET_STATISTICS @@ -1274,9 +1203,6 @@ struct s_PXENV_UNDI_GET_STATISTICS { typedef struct s_PXENV_UNDI_GET_STATISTICS PXENV_UNDI_GET_STATISTICS_t; -extern PXENV_EXIT_t pxenv_undi_get_statistics ( - struct s_PXENV_UNDI_GET_STATISTICS *undi_get_statistics ); - /** @} */ /* pxenv_undi_get_statistics */ /** @defgroup pxenv_undi_clear_statistics PXENV_UNDI_CLEAR_STATISTICS @@ -1296,9 +1222,6 @@ struct s_PXENV_UNDI_CLEAR_STATISTICS { typedef struct s_PXENV_UNDI_CLEAR_STATISTICS PXENV_UNDI_CLEAR_STATISTICS_t; -extern PXENV_EXIT_t pxenv_undi_clear_statistics ( - struct s_PXENV_UNDI_CLEAR_STATISTICS *undi_clear_statistics ); - /** @} */ /* pxenv_undi_clear_statistics */ /** @defgroup pxenv_undi_initiate_diags PXENV_UNDI_INITIATE_DIAGS @@ -1318,9 +1241,6 @@ struct s_PXENV_UNDI_INITIATE_DIAGS { typedef struct s_PXENV_UNDI_INITIATE_DIAGS PXENV_UNDI_INITIATE_DIAGS_t; -extern PXENV_EXIT_t pxenv_undi_initiate_diags ( - struct s_PXENV_UNDI_INITIATE_DIAGS *undi_initiate_diags ); - /** @} */ /* pxenv_undi_initiate_diags */ /** @defgroup pxenv_undi_force_interrupt PXENV_UNDI_FORCE_INTERRUPT @@ -1340,9 +1260,6 @@ struct s_PXENV_UNDI_FORCE_INTERRUPT { typedef struct s_PXENV_UNDI_FORCE_INTERRUPT PXENV_UNDI_FORCE_INTERRUPT_t; -extern PXENV_EXIT_t pxenv_undi_force_interrupt ( - struct s_PXENV_UNDI_FORCE_INTERRUPT *undi_force_interrupt ); - /** @} */ /* pxenv_undi_force_interrupt */ /** @defgroup pxenv_undi_get_mcast_address PXENV_UNDI_GET_MCAST_ADDRESS @@ -1364,9 +1281,6 @@ struct s_PXENV_UNDI_GET_MCAST_ADDRESS { typedef struct s_PXENV_UNDI_GET_MCAST_ADDRESS PXENV_UNDI_GET_MCAST_ADDRESS_t; -extern PXENV_EXIT_t pxenv_undi_get_mcast_address ( - struct s_PXENV_UNDI_GET_MCAST_ADDRESS *undi_get_mcast_address ); - /** @} */ /* pxenv_undi_get_mcast_address */ /** @defgroup pxenv_undi_get_nic_type PXENV_UNDI_GET_NIC_TYPE @@ -1427,9 +1341,6 @@ struct s_PXENV_UNDI_GET_NIC_TYPE { typedef struct s_PXENV_UNDI_GET_NIC_TYPE PXENV_UNDI_GET_NIC_TYPE_t; -extern PXENV_EXIT_t pxenv_undi_get_nic_type ( - struct s_PXENV_UNDI_GET_NIC_TYPE *undi_get_nic_type ); - /** @} */ /* pxenv_undi_get_nic_type */ /** @defgroup pxenv_undi_get_iface_info PXENV_UNDI_GET_IFACE_INFO @@ -1488,9 +1399,6 @@ struct s_PXENV_UNDI_GET_IFACE_INFO { typedef struct s_PXENV_UNDI_GET_IFACE_INFO PXENV_UNDI_GET_IFACE_INFO_t; -extern PXENV_EXIT_t pxenv_undi_get_iface_info ( - struct s_PXENV_UNDI_GET_IFACE_INFO *undi_get_iface_info ); - /** @} */ /* pxenv_undi_get_iface_info */ /** @defgroup pxenv_undi_get_state PXENV_UNDI_GET_STATE @@ -1524,9 +1432,6 @@ struct s_PXENV_UNDI_GET_STATE { typedef struct s_PXENV_UNDI_GET_STATE PXENV_UNDI_GET_STATE_t; -extern PXENV_EXIT_t pxenv_undi_get_state ( struct s_PXENV_UNDI_GET_STATE - *undi_get_state ); - /** @} */ /* pxenv_undi_get_state */ /** @defgroup pxenv_undi_isr PXENV_UNDI_ISR @@ -1595,8 +1500,6 @@ struct s_PXENV_UNDI_ISR { typedef struct s_PXENV_UNDI_ISR PXENV_UNDI_ISR_t; -extern PXENV_EXIT_t pxenv_undi_isr ( struct s_PXENV_UNDI_ISR *undi_isr ); - /** @} */ /* pxenv_undi_isr */ /** @} */ /* pxe_undi_api */ @@ -1628,8 +1531,6 @@ struct s_PXENV_FILE_OPEN { typedef struct s_PXENV_FILE_OPEN PXENV_FILE_OPEN_t; -extern PXENV_EXIT_t pxenv_file_open ( struct s_PXENV_FILE_OPEN *file_open ); - /** @} */ /* pxenv_file_open */ /** @defgroup pxenv_file_close PXENV_FILE_CLOSE @@ -1650,9 +1551,6 @@ struct s_PXENV_FILE_CLOSE { typedef struct s_PXENV_FILE_CLOSE PXENV_FILE_CLOSE_t; -extern PXENV_EXIT_t pxenv_file_close ( struct s_PXENV_FILE_CLOSE - *file_close ); - /** @} */ /* pxenv_file_close */ /** @defgroup pxenv_file_select PXENV_FILE_SELECT @@ -1677,9 +1575,6 @@ struct s_PXENV_FILE_SELECT { typedef struct s_PXENV_FILE_SELECT PXENV_FILE_SELECT_t; -extern PXENV_EXIT_t pxenv_file_select ( struct s_PXENV_FILE_SELECT - *file_select ); - /** @} */ /* pxenv_file_select */ /** @defgroup pxenv_file_read PXENV_FILE_READ @@ -1702,8 +1597,6 @@ struct s_PXENV_FILE_READ { typedef struct s_PXENV_FILE_READ PXENV_FILE_READ_t; -extern PXENV_EXIT_t pxenv_file_read ( struct s_PXENV_FILE_READ *file_read ); - /** @} */ /* pxenv_file_read */ /** @defgroup pxenv_get_file_size PXENV_GET_FILE_SIZE @@ -1725,9 +1618,6 @@ struct s_PXENV_GET_FILE_SIZE { typedef struct s_PXENV_GET_FILE_SIZE PXENV_GET_FILE_SIZE_t; -extern PXENV_EXIT_t pxenv_get_file_size ( struct s_PXENV_GET_FILE_SIZE - *get_file_size ); - /** @} */ /* pxenv_get_file_size */ /** @defgroup pxenv_file_exec PXENV_FILE_EXEC @@ -1748,8 +1638,6 @@ struct s_PXENV_FILE_EXEC { typedef struct s_PXENV_FILE_EXEC PXENV_FILE_EXEC_t; -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 @@ -1774,8 +1662,6 @@ struct s_PXENV_FILE_API_CHECK { 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 */ /** @defgroup pxenv_file_exit_hook PXENV_FILE_EXIT_HOOK @@ -1796,8 +1682,6 @@ struct s_PXENV_FILE_EXIT_HOOK { typedef struct s_PXENV_FILE_EXIT_HOOK PXENV_FILE_EXIT_HOOK_t; -extern PXENV_EXIT_t pxenv_file_exit_hook ( struct s_PXENV_FILE_EXIT_HOOK *file_exit_hook ); - /** @} */ /* pxenv_file_exit_hook */ /** @} */ /* pxe_file_api */ @@ -1847,8 +1731,6 @@ struct s_UNDI_LOADER { typedef struct s_UNDI_LOADER UNDI_LOADER_t; -extern PXENV_EXIT_t undi_loader ( struct s_UNDI_LOADER *undi_loader ); - /** @} */ /* pxe_loader_api */ /** @} */ /* pxe */ |
