00001 #ifndef PXE_H 00002 #define PXE_H 00003 00004 FILE_LICENCE ( GPL2_OR_LATER ); 00005 00006 #include "pxe_types.h" 00007 #include "pxe_api.h" 00008 #include <gpxe/device.h> 00009 00010 /* Parameter block for pxenv_unknown() */ 00011 struct s_PXENV_UNKNOWN { 00012 PXENV_STATUS_t Status; /**< PXE status code */ 00013 } PACKED; 00014 00015 typedef struct s_PXENV_UNKNOWN PXENV_UNKNOWN_t; 00016 00017 /* Union used for PXE API calls; we don't know the type of the 00018 * structure until we interpret the opcode. Also, Status is available 00019 * in the same location for any opcode, and it's convenient to have 00020 * non-specific access to it. 00021 */ 00022 union u_PXENV_ANY { 00023 /* Make it easy to read status for any operation */ 00024 PXENV_STATUS_t Status; 00025 struct s_PXENV_UNKNOWN unknown; 00026 struct s_PXENV_UNLOAD_STACK unload_stack; 00027 struct s_PXENV_GET_CACHED_INFO get_cached_info; 00028 struct s_PXENV_TFTP_READ_FILE restart_tftp; 00029 struct s_PXENV_START_UNDI start_undi; 00030 struct s_PXENV_STOP_UNDI stop_undi; 00031 struct s_PXENV_START_BASE start_base; 00032 struct s_PXENV_STOP_BASE stop_base; 00033 struct s_PXENV_TFTP_OPEN tftp_open; 00034 struct s_PXENV_TFTP_CLOSE tftp_close; 00035 struct s_PXENV_TFTP_READ tftp_read; 00036 struct s_PXENV_TFTP_READ_FILE tftp_read_file; 00037 struct s_PXENV_TFTP_GET_FSIZE tftp_get_fsize; 00038 struct s_PXENV_UDP_OPEN udp_open; 00039 struct s_PXENV_UDP_CLOSE udp_close; 00040 struct s_PXENV_UDP_WRITE udp_write; 00041 struct s_PXENV_UDP_READ udp_read; 00042 struct s_PXENV_UNDI_STARTUP undi_startup; 00043 struct s_PXENV_UNDI_CLEANUP undi_cleanup; 00044 struct s_PXENV_UNDI_INITIALIZE undi_initialize; 00045 struct s_PXENV_UNDI_RESET undi_reset_adapter; 00046 struct s_PXENV_UNDI_SHUTDOWN undi_shutdown; 00047 struct s_PXENV_UNDI_OPEN undi_open; 00048 struct s_PXENV_UNDI_CLOSE undi_close; 00049 struct s_PXENV_UNDI_TRANSMIT undi_transmit; 00050 struct s_PXENV_UNDI_SET_MCAST_ADDRESS undi_set_mcast_address; 00051 struct s_PXENV_UNDI_SET_STATION_ADDRESS undi_set_station_address; 00052 struct s_PXENV_UNDI_SET_PACKET_FILTER undi_set_packet_filter; 00053 struct s_PXENV_UNDI_GET_INFORMATION undi_get_information; 00054 struct s_PXENV_UNDI_GET_STATISTICS undi_get_statistics; 00055 struct s_PXENV_UNDI_CLEAR_STATISTICS undi_clear_statistics; 00056 struct s_PXENV_UNDI_INITIATE_DIAGS undi_initiate_diags; 00057 struct s_PXENV_UNDI_FORCE_INTERRUPT undi_force_interrupt; 00058 struct s_PXENV_UNDI_GET_MCAST_ADDRESS undi_get_mcast_address; 00059 struct s_PXENV_UNDI_GET_NIC_TYPE undi_get_nic_type; 00060 struct s_PXENV_UNDI_GET_IFACE_INFO undi_get_iface_info; 00061 struct s_PXENV_UNDI_GET_STATE undi_get_state; 00062 struct s_PXENV_UNDI_ISR undi_isr; 00063 struct s_PXENV_FILE_OPEN file_open; 00064 struct s_PXENV_FILE_CLOSE file_close; 00065 struct s_PXENV_FILE_SELECT file_select; 00066 struct s_PXENV_FILE_READ file_read; 00067 struct s_PXENV_GET_FILE_SIZE get_file_size; 00068 struct s_PXENV_FILE_EXEC file_exec; 00069 struct s_PXENV_FILE_API_CHECK file_api_check; 00070 struct s_PXENV_FILE_EXIT_HOOK file_exit_hook; 00071 }; 00072 00073 typedef union u_PXENV_ANY PXENV_ANY_t; 00074 00075 /** An UNDI expansion ROM header */ 00076 struct undi_rom_header { 00077 /** Signature 00078 * 00079 * Must be equal to @c ROM_SIGNATURE 00080 */ 00081 UINT16_t Signature; 00082 /** ROM length in 512-byte blocks */ 00083 UINT8_t ROMLength; 00084 /** Unused */ 00085 UINT8_t unused[0x13]; 00086 /** Offset of the PXE ROM ID structure */ 00087 UINT16_t PXEROMID; 00088 /** Offset of the PCI ROM structure */ 00089 UINT16_t PCIRHeader; 00090 } PACKED; 00091 00092 /** Signature for an expansion ROM */ 00093 #define ROM_SIGNATURE 0xaa55 00094 00095 /** An UNDI ROM ID structure */ 00096 struct undi_rom_id { 00097 /** Signature 00098 * 00099 * Must be equal to @c UNDI_ROM_ID_SIGNATURE 00100 */ 00101 UINT32_t Signature; 00102 /** Length of structure */ 00103 UINT8_t StructLength; 00104 /** Checksum */ 00105 UINT8_t StructCksum; 00106 /** Structure revision 00107 * 00108 * Must be zero. 00109 */ 00110 UINT8_t StructRev; 00111 /** UNDI revision 00112 * 00113 * Version 2.1.0 is encoded as the byte sequence 0x00, 0x01, 0x02. 00114 */ 00115 UINT8_t UNDIRev[3]; 00116 /** Offset to UNDI loader */ 00117 UINT16_t UNDILoader; 00118 /** Minimum required stack segment size */ 00119 UINT16_t StackSize; 00120 /** Minimum required data segment size */ 00121 UINT16_t DataSize; 00122 /** Minimum required code segment size */ 00123 UINT16_t CodeSize; 00124 } PACKED; 00125 00126 /** Signature for an UNDI ROM ID structure */ 00127 #define UNDI_ROM_ID_SIGNATURE \ 00128 ( ( 'U' << 0 ) + ( 'N' << 8 ) + ( 'D' << 16 ) + ( 'I' << 24 ) ) 00129 00130 /** A PCI expansion header */ 00131 struct pcir_header { 00132 /** Signature 00133 * 00134 * Must be equal to @c PCIR_SIGNATURE 00135 */ 00136 uint32_t signature; 00137 /** PCI vendor ID */ 00138 uint16_t vendor_id; 00139 /** PCI device ID */ 00140 uint16_t device_id; 00141 } PACKED; 00142 00143 /** Signature for an UNDI ROM ID structure */ 00144 #define PCIR_SIGNATURE \ 00145 ( ( 'P' << 0 ) + ( 'C' << 8 ) + ( 'I' << 16 ) + ( 'R' << 24 ) ) 00146 00147 00148 extern struct net_device *pxe_netdev; 00149 00150 extern void pxe_set_netdev ( struct net_device *netdev ); 00151 00152 #endif /* PXE_H */
1.5.7.1