!************************************************************************** !* !* Network driver interface for netboot bootrom !* !* Module: ndisdos.inc !* Purpose: Definitions for DOS simulator interface private to NDIS interface !* Entries: None !* !************************************************************************** !* !* Copyright (C) 1998-2003 Gero Kuhlmann !* !* This program is free software; you can redistribute it and/or modify !* it under the terms of the GNU General Public License as published by !* the Free Software Foundation; either version 2 of the License, or !* any later version. !* !* This program is distributed in the hope that it will be useful, !* but WITHOUT ANY WARRANTY; without even the implied warranty of !* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the !* GNU General Public License for more details. !* !* You should have received a copy of the GNU General Public License !* along with this program; if not, write to the Free Software !* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. !* !* $Id: ndisdos.inc,v 1.4 2003/01/25 23:29:41 gkminix Exp $ !* #ifndef _NETDRVR_NDIS2_NDISDOS_INC #define _NETDRVR_NDIS2_NDISDOS_INC ! !************************************************************************** ! ! Include private header file of DOS simulator. This will, among ! others, include DOS error codes and predefined file handles. ! #include "../dossim/dospriv.inc" ! !************************************************************************** ! ! DOS functions which are not part of the DOS simulator and which we ! have to implement ourselves: ! DOSFN_OPEN equ $3D ! open device or file DOSFN_CLOSE equ $3E ! close device or file DOSFN_IOCTL equ $44 ! IOCTL for device or file ! !************************************************************************** ! ! File handle to use for protocol manager. This has to follow the last ! handle used by the DOS simulator for standard devices. ! PM_HANDLE equ RES_HANDLES ! !************************************************************************** ! ! Attribute and device information for protocol manager device ! PM_ATTRIB equ $8000 ! Character device attribute PM_DEVINFO equ $4880 ! Device supports IOCTL/OPEN/CLOSE ! !************************************************************************** ! ! Subfunction codes for IOCTL call: ! IOCTL_GETINFO equ 0 ! get device information IOCTL_SETINFO equ 1 ! set device information IOCTL_RDCHAR equ 2 ! read from char device control channel IOCTL_WRCHAR equ 3 ! write to char device control channel IOCTL_RDBLOCK equ 4 ! read from block device control channel IOCTL_WRBLOCK equ 5 ! write to block device control channel IOCTL_INSTS equ 6 ! get device input status IOCTL_OUTSTS equ 7 ! get device output status IOCTL_REMOVE equ 8 ! check if block device is removable IOCTL_DEVREM equ 9 ! check if block device is remote IOCTL_HDLREM equ 10 ! check if handle is remote IOCTL_RTRYCNT equ 11 ! set sharing retry count IOCTL_CHARREQ equ 12 ! generic char device request IOCTL_BLOCKREQ equ 13 ! generic block device request IOCTL_GETDRVMAP equ 14 ! get logical drive map IOCTL_SETDRVMAP equ 15 ! set logical drive map ! !************************************************************************** ! ! Layout of device header ! DEVHDR_NEXT equ $0000 ! offset to far ptr to next device DEVHDR_ATTR equ $0004 ! offset to device attribute DEVHDR_STRAT equ $0006 ! offset to strategy routine pointer DEVHDR_INT equ $0008 ! offset to interrupt handler pointer DEVHDR_NAME equ $000A ! offset to device name DEV_NAME_SIZE equ 8 ! size of device name ! !************************************************************************** ! ! Device driver opcodes: ! DEV_INIT equ $0000 ! initialize device DEV_MEDIA_CHECK equ $0001 ! media check for block device DEV_BUILD_BPB equ $0002 ! build block device parameter block DEV_IOCTL_INP equ $0003 ! read from IOCTL control channel DEV_INPUT equ $0004 ! read from device DEV_NOWAIT equ $0005 ! read from device without waiting DEV_INP_STATUS equ $0006 ! input status DEV_INP_FLUSH equ $0007 ! flush input buffers DEV_OUTPUT equ $0008 ! write to device DEV_OUT_VERIFY equ $0009 ! write to device with verify DEV_OUT_STATUS equ $000A ! output status DEV_OUT_FLUSH equ $000B ! flush output buffers DEV_IOCTL_OUT equ $000C ! write to IOCTL control channel DEV_OPEN equ $000D ! open device DEV_CLOSE equ $000E ! close device DEV_REMOVE equ $000F ! check for removable media DEV_OUT_BUSY equ $0010 ! output until busy ! !************************************************************************** ! ! General request header for devices: ! DEVREQ_LENGTH equ $0000 ! length of device header DEVREQ_SUBUNIT equ $0001 ! number of device subunit DEVREQ_COMMAND equ $0002 ! command opcode DEVREQ_STATUS equ $0003 ! return result code DEVREQ_SIZE equ $0004 ! length of standard header ! Request header for device function 00 (initialize device): DEV0_UNITS equ $000D ! number of subunits DEV0_MEMAVAIL equ $000E ! far ptr past end of available memory DEV0_FREE equ $000E ! far ptr to first free byte DEV0_CMDLINE equ $0012 ! far ptr to command line DEV0_BPB equ $0012 ! far ptr to BPB DEV0_FIRST equ $0016 ! drive number of first subunit DEV0_LENGTH equ $0018 ! length of request header ! Request header for device function 01 (media check): DEV1_MEDIA equ $000D ! media descriptor DEV1_STATUS equ $000E ! media status DEV1_VOLUME equ $000F ! far ptr to volume ID DEV1_LENGTH equ $0014 ! length of request header ! Request header for device function 02 (build BPB): DEV2_MEDIA equ $000D ! media descriptor DEV2_TXADDR equ $000E ! far ptr to transfer address DEV2_BPB equ $0012 ! far ptr to BPB DEV2_LENGTH equ $0016 ! length of request header ! Request header for device functions 03 and 0C (read/write IOCTL channel): DEV3_MEDIA equ $000D ! media descriptor DEV3_TXADDR equ $000E ! transfer address DEV3_BUFLEN equ $0012 ! number of bytes to read/write DEV3_LENGTH equ $0016 ! length of request header ! Request header for device functions 04, 08 and 09 (read/write device): DEV4_MEDIA equ $000D ! media descriptor DEV4_TXADDR equ $000E ! transfer address DEV4_COUNT equ $0012 ! byte/sector count DEV4_SECTOR equ $0014 ! starting sector (block device) DEV4_VOLUME equ $0016 ! far ptr to volume ID DEV4_SECT32 equ $001A ! 32-bit starting sector number DEV4_LENGTH equ $001D ! length of request header ! Request header for device function 05 (read character device without waiting): DEV5_CHAR equ $000D ! character read DEV5_LENGTH equ $000E ! length of request header ! Request header for device function 10 (write until busy): DEV10_TXADDR equ $000E ! transfer address DEV10_BUFLEN equ $0012 ! number of bytes to write DEV10_LENGTH equ $0016 ! length of request header ! !************************************************************************** ! ! Device driver error codes: ! DEVERR_SUCCESS equ $0100 ! success DEVERR_PROTECT equ $8100 ! write protect violation DEVERR_UNKNOWN equ $8101 ! unknown unit DEVERR_NOTREADY equ $8102 ! device not ready DEVERR_COMMAND equ $8103 ! unknown command DEVERR_CRC equ $8104 ! CRC error DEVERR_LENGTH equ $8105 ! bad driver request structure length DEVERR_SEEK equ $8106 ! seek error DEVERR_MEDIA equ $8107 ! unknown media type DEVERR_SECTOR equ $8108 ! sector not found DEVERR_PAPER equ $8109 ! printer out of paper DEVERR_WRITE equ $810A ! write error DEVERR_READ equ $810B ! read error DEVERR_GENERAL equ $810C ! general error ! !************************************************************************** ! #endif