176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- * 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright 2007-2008 H. Peter Anvin - All Rights Reserved 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Permission is hereby granted, free of charge, to any person 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * obtaining a copy of this software and associated documentation 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * files (the "Software"), to deal in the Software without 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * restriction, including without limitation the rights to use, 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * copy, modify, merge, publish, distribute, sublicense, and/or 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * sell copies of the Software, and to permit persons to whom 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Software is furnished to do so, subject to the following 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * conditions: 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The above copyright notice and this permission notice shall 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * be included in all copies or substantial portions of the Software. 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * OTHER DEALINGS IN THE SOFTWARE. 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ----------------------------------------------------------------------- */ 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * syslinux/pxe_api.h 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * PXE type and constant definitions for SYSLINUX 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _SYSLINUX_PXE_API_H 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _SYSLINUX_PXE_API_H 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h> 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <netinet/in.h> 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <klibc/compiler.h> 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <com32.h> 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* PXE spec structures and definitions. These mostly follow the PXE 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman spec, except when the PXE spec is unnecessarily stupid. Of course, 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman that is most of the time. */ 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Basic types; use Unix-like _t convention instead of SCREAMING; also 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman re-use types we already have, like in_addr_t. */ 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint16_t pxenv_status_t; 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAC_ADDR_LEN 16 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint8_t mac_addr_t[MAC_ADDR_LEN]; 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* "Protected mode segment descriptor" according to PXE... */ 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t sel; 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t base; 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t size; 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed pxe_segdesc_t; 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef far_ptr_t segoff16_t; 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t opcode; 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BOOTP_REQ 1 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BOOTP_REP 2 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Hardware; 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Hardlen; 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Gatehops; 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t ident; 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t seconds; 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t Flags; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BOOTP_BCAST 0x8000 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t cip; /* Client IP address */ 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t yip; /* You IP address */ 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t sip; /* next server IP address */ 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t gip; /*relay agent IP address */ 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mac_addr_t CAddr; 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Sname[64]; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t bootfile[128]; 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union { 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BOOTP_DHCPVEND 1024 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t d[BOOTP_DHCPVEND]; 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct { 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t magic[4]; 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define VM_RFC1048 0x63825363L 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t flags; 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t pad[56]; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } v; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } vendor; 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed pxe_bootp_t; 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Function calling structures and constants */ 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_GET_CACHED_INFO { 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t PacketType; 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_PACKET_TYPE_DHCP_DISCOVER 1 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_PACKET_TYPE_DHCP_ACK 2 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_PACKET_TYPE_CACHED_REPLY 3 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BufferSize; 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t Buffer; 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BufferLimit; 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_GET_CACHED_INFO; 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_START_UNDI { 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t AX; 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BX; 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t DX; 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t DI; 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t ES; 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_START_UNDI; 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_STOP_UNDI { 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_STOP_UNDI; 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_START_BASE { 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_START_BASE; 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_STOP_BASE { 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_STOP_BASE; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_TFTP_OPEN { 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t ServerIPAddress; 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t GatewayIPAddress; 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t FileName[128]; 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t TFTPPort; 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t PacketSize; 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_TFTP_OPEN; 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_TFTP_CLOSE { 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_TFTP_CLOSE; 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_TFTP_READ { 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t PacketNumber; 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BufferSize; 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t Buffer; 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_TFTP_READ; 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_TFTP_READ_FILE { 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t FileName[128]; 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t BufferSize; 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman void *Buffer; 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t ServerIPAddress; 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t GatewayIPAddress; 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t McastIPAddress; 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t TFTPClntPort; 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t TFTPSrvPort; 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t TFTPOpenTimeOut; 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t TFTPReopenDelay; 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_TFTP_READ_FILE; 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_TFTP_GET_FSIZE { 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t ServerIPAddress; 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t GatewayIPAddress; 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t FileName[128]; 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t FileSize; 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_TFTP_GET_FSIZE; 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UDP_OPEN { 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t status; 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t src_ip; 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UDP_OPEN; 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UDP_CLOSE { 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t status; 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UDP_CLOSE; 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UDP_WRITE { 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t status; 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t ip; 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t gw; 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t src_port; 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t dst_port; 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t buffer_size; 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t buffer; 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UDP_WRITE; 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UDP_READ { 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t status; 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t src_ip; 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t dest_ip; 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t s_port; 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_port_t d_port; 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t buffer_size; 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t buffer; 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UDP_READ; 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_STARTUP { 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_STARTUP; 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_CLEANUP { 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_CLEANUP; 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_INITIALIZE { 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman void *ProtocolIni; 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t reserved[8]; 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_INITIALIZE; 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAXNUM_MCADDR 8 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_MCAST_ADDRESS { 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t MCastAddrCount; 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mac_addr_t McastAddr[MAXNUM_MCADDR]; 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_MCAST_ADDRESS; 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_RESET { 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf; 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_RESET; 22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_SHUTDOWN { 22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_SHUTDOWN; 22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_OPEN { 22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t OpenFlag; 23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t PktFilter; 23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FLTR_DIRECTED 0x0001 23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FLTR_BRDCST 0x0002 23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FLTR_PRMSCS 0x0004 23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FLTR_SRC_RTG 0x0008 23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf; 23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_OPEN; 23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_CLOSE { 23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_CLOSE; 24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_TRANSMIT { 24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Protocol; 24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define P_UNKNOWN 0 24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define P_IP 1 24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define P_ARP 2 24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define P_RARP 3 24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t XmitFlag; 25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define XMT_DESTADDR 0x0000 25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define XMT_BROADCAST 0x0001 25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t DestAddr; 25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t TBD; 25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Reserved[2]; 25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_TRANSMIT; 25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_DATA_BLKS 8 25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_TBD { 25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t ImmedLength; 25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t Xmit; 26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t DataBlkCount; 26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct DataBlk { 26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t TDPtrType; 26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t TDRsvdByte; 26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t TDDataLen; 26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t TDDataPtr; 26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } DataBlock[MAX_DATA_BLKS]; 26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_TBD; 26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_SET_MCAST_ADDRESS { 27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf; 27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_SET_MCAST_ADDR; 27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_SET_STATION_ADDRESS { 27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mac_addr_t StationAddress; 27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_SET_STATION_ADDR; 27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_SET_PACKET_FILTER { 28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t filter; 28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_SET_PACKET_FILTER; 28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_GET_INFORMATION { 28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BaseIo; 28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t IntNumber; 28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t MaxTranUnit; 28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t HwType; 29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHER_TYPE 1 29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXP_ETHER_TYPE 2 29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE_TYPE 6 29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ARCNET_TYPE 7 29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t HwAddrLen; 29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mac_addr_t CurrentNodeAddress; 29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mac_addr_t PermNodeAddress; 29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t ROMAddress; 29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t RxBufCt; 29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t TxBufCt; 30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_GET_INFORMATION; 30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_GET_STATISTICS { 30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t XmtGoodFrames; 30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t RcvGoodFrames; 30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t RcvCRCErrors; 30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t RcvResourceErrors; 30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_GET_STATISTICS; 30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_CLEAR_STATISTICS { 31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_CLEAR_STATISTICS; 31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_INITIATE_DIAGS { 31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_INITIATE_DIAGS; 31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_FORCE_INTERRUPT { 31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_FORCE_INTERRUPT; 32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_GET_MCAST_ADDRESS { 32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman in_addr_t InetAddr; 32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mac_addr_t MediaAddr; 32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_GET_MCAST_ADDR; 32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_GET_NIC_TYPE { 32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t NicType; 33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PCI_NIC 2 33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PnP_NIC 3 33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define CardBus_NIC 4 33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union { 33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct { 33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t Vendor_ID; 33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t Dev_ID; 33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Base_Class; 33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Sub_Class; 34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Prog_Intf; 34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Rev; 34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BusDevFunc; 34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t SubVendor_ID; 34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t SubDevice_ID; 34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } pci, cardbus; 34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct { 34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t EISA_Dev_ID; 34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Base_Class; 34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Sub_Class; 35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t Prog_Intf; 35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t CardSelNum; 35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } __packed pnp; 35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } __packed info; 35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_GET_NIC_TYPE; 35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_GET_IFACE_INFO { 35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t IfaceType[16]; 35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t LinkSpeed; 36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t ServiceFlags; 36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Reserved[4]; 36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_GET_IFACE_INFO; 36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_BCAST 0x00000001 36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_MCAST 0x00000002 36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_GROUP 0x00000004 36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_PROMISC 0x00000008 36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_SOFTMAC 0x00000010 36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_STATS 0x00000020 36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_DIAGS 0x00000040 37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_LOOPBACK 0x00000080 37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_RCVCHAIN 0x00000100 37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_IBMSRCRT 0x00000200 37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_RESET 0x00000400 37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_OPEN 0x00000800 37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_IRQ 0x00001000 37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_SRCRT 0x00002000 37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_GDTVIRT 0x00004000 37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_MULTI 0x00008000 37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_IFACE_FLAG_LKFISZ 0x00010000 38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_GET_STATE { 38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_GET_STATE_STARTED 1 38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_GET_STATE_INITIALIZED 2 38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXE_UNDI_GET_STATE_OPENED 3 38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t UNDIstate; 38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_GET_STATE; 38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNDI_ISR { 39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FuncFlag; 39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BufferLength; 39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FrameLength; 39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FrameHeaderLength; 39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t Frame; 39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t ProtType; 39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t PktType; 39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNDI_ISR; 39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_FILE_API_CHECK { 40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t Size; 40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Magic; 40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Provider; 40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t APIMask; 40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Flags; 40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_FILE_API_CHECK; 40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_FILE_READ { 41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FileHandle; 41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t BufferSize; 41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t Buffer; 41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_FILE_READ; 41576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 41676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_FILE_OPEN { 41776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 41876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FileHandle; 41976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman segoff16_t FileName; 42076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Reserved; 42176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_FILE_OPEN; 42276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_FILE_CLOSE { 42476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 42576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FileHandle; 42676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_FILE_CLOSE; 42776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_GET_FILE_SIZE { 42976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 43076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t FileHandle; 43176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t FileSize; 43276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_GET_FILE_SIZE; 43376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_PXENV_UNLOAD_STACK { 43576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pxenv_status_t Status; 43676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t reserved[10]; 43776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __packed t_PXENV_UNLOAD_STACK; 43876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_IN_START 1 44076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_IN_PROCESS 2 44176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_IN_GET_NEXT 3 44276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* One of these will be returned for 44376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PXENV_UNDI_ISR_IN_START */ 44476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_OUT_OURS 0 44576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_USR_OUT_NOT_OURS 1 44676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* One of these will be returned for 44776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PXENV_UNDI_ISR_IN_PROCESS and 44876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PXENV_UNDI_ISR_IN_GET_NEXT */ 44976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_OUT_DONE 0 45076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_OUT_TRANSMIT 2 45176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_OUT_RECEIVE 3 45276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR_OUT_BUSY 4 45376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Function numbers and error codes */ 45576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_TFTP_OPEN 0x0020 45776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_TFTP_CLOSE 0x0021 45876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_TFTP_READ 0x0022 45976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_TFTP_READ_FILE 0x0023 46076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_TFTP_READ_FILE_PMODE 0x0024 46176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_TFTP_GET_FSIZE 0x0025 46276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 46376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UDP_OPEN 0x0030 46476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UDP_CLOSE 0x0031 46576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UDP_READ 0x0032 46676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UDP_WRITE 0x0033 46776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 46876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_START_UNDI 0x0000 46976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_STARTUP 0x0001 47076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_CLEANUP 0x0002 47176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_INITIALIZE 0x0003 47276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_RESET_NIC 0x0004 47376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_SHUTDOWN 0x0005 47476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_OPEN 0x0006 47576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_CLOSE 0x0007 47676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_TRANSMIT 0x0008 47776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_SET_MCAST_ADDR 0x0009 47876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_SET_STATION_ADDR 0x000A 47976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_SET_PACKET_FILTER 0x000B 48076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_GET_INFORMATION 0x000C 48176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_GET_STATISTICS 0x000D 48276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_CLEAR_STATISTICS 0x000E 48376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_INITIATE_DIAGS 0x000F 48476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_FORCE_INTERRUPT 0x0010 48576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_GET_MCAST_ADDR 0x0011 48676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_GET_NIC_TYPE 0x0012 48776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_GET_IFACE_INFO 0x0013 48876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_ISR 0x0014 48976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STOP_UNDI 0x0015 /* Overlap...? */ 49076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNDI_GET_STATE 0x0015 /* Overlap...? */ 49176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_UNLOAD_STACK 0x0070 49376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_GET_CACHED_INFO 0x0071 49476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_RESTART_DHCP 0x0072 49576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_RESTART_TFTP 0x0073 49676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_MODE_SWITCH 0x0074 49776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_START_BASE 0x0075 49876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STOP_BASE 0x0076 49976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* gPXE extensions... */ 50176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_FILE_OPEN 0x00e0 50276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_FILE_CLOSE 0x00e1 50376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_FILE_SELECT 0x00e2 50476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_FILE_READ 0x00e3 50576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_GET_FILE_SIZE 0x00e4 50676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_FILE_EXEC 0x00e5 50776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_FILE_API_CHECK 0x00e6 50876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Exit codes */ 51076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_EXIT_SUCCESS 0x0000 51176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_EXIT_FAILURE 0x0001 51276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 51376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Status codes */ 51476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_SUCCESS 0x00 51576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_FAILURE 0x01 51676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BAD_FUNC 0x02 51776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNSUPPORTED 0x03 51876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_KEEP_UNDI 0x04 51976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_KEEP_ALL 0x05 52076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_OUT_OF_RESOURCES 0x06 52176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_ARP_TIMEOUT 0x11 52276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UDP_CLOSED 0x18 52376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UDP_OPEN 0x19 52476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_CLOSED 0x1a 52576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_OPEN 0x1b 52676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_MCOPY_PROBLEM 0x20 52776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_INTEGRITY_FAILURE 0x21 52876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_VALIDATE_FAILURE 0x22 52976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_INIT_FAILURE 0x23 53076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_SHUTDOWN_FAILURE 0x24 53176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_GBOA_FAILURE 0x25 53276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_FREE_FAILURE 0x26 53376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_GSI_FAILURE 0x27 53476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BIS_BAD_CKSUM 0x28 53576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_CANNOT_ARP_ADDRESS 0x30 53676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_OPEN_TIMEOUT 0x32 53776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 53876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_UNKNOWN_OPCODE 0x33 53976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_READ_TIMEOUT 0x35 54076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_ERROR_OPCODE 0x36 54176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_CANNOT_OPEN_CONNECTION 0x38 54276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION 0x39 54376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_TOO_MANY_PACKAGES 0x3a 54476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_FILE_NOT_FOUND 0x3b 54576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_ACCESS_VIOLATION 0x3c 54676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_NO_MCAST_ADDRESS 0x3d 54776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_NO_FILESIZE 0x3e 54876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_TFTP_INVALID_PACKET_SIZE 0x3f 54976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_DHCP_TIMEOUT 0x51 55076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_DHCP_NO_IP_ADDRESS 0x52 55176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_DHCP_NO_BOOTFILE_NAME 0x53 55276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_DHCP_BAD_IP_ADDRESS 0x54 55376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_INVALID_FUNCTION 0x60 55476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_MEDIATEST_FAILED 0x61 55576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST 0x62 55676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC 0x63 55776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY 0x64 55876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA 0x65 55976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA 0x66 56076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_BAD_MAC_ADDRESS 0x67 56176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_BAD_EEPROM_CHECKSUM 0x68 56276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_ERROR_SETTING_ISR 0x69 56376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_INVALID_STATE 0x6a 56476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_TRANSMIT_ERROR 0x6b 56576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_UNDI_INVALID_PARAMETER 0x6c 56676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BSTRAP_PROMPT_MENU 0x74 56776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BSTRAP_MCAST_ADDR 0x76 56876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BSTRAP_MISSING_LIST 0x77 56976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BSTRAP_NO_RESPONSE 0x78 57076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BSTRAP_FILE_TOO_BIG 0x79 57176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BINL_CANCELED_BY_KEYSTROKE 0xa0 57276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BINL_NO_PXE_SERVER 0xa1 57376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_NOT_AVAILABLE_IN_PMODE 0xa2 57476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_NOT_AVAILABLE_IN_RMODE 0xa3 57576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_BUSD_DEVICE_NOT_SUPPORTED 0xb0 57676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_NO_FREE_BASE_MEMORY 0xc0 57776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_NO_BC_ROMID 0xc1 57876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_BAD_BC_ROMID 0xc2 57976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_BAD_BC_RUNTIME_IMAGE 0xc3 58076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_NO_UNDI_ROMID 0xc4 58176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_BAD_UNDI_ROMID 0xc5 58276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_BAD_UNDI_DRIVER_IMAGE 0xc6 58376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_NO_PXE_STRUCT 0xc8 58476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_NO_PXENV_STRUCT 0xc9 58576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_UNDI_START 0xca 58676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PXENV_STATUS_LOADER_BC_START 0xcb 58776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 58876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint __weak pxe_call(int, void *); 58976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid __weak unload_pxe(uint16_t flags); 59076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanuint32_t __weak dns_resolv(const char *); 59176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 59276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern uint32_t __weak SendCookies; 59376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid __weak http_bake_cookies(void); 59476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 59576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* _SYSLINUX_PXE_API_H */ 596