david/ipxe
Archived
1
0
Commit Graph

305 Commits

Author SHA1 Message Date
Dan Lynch
bef8874842 - implemented printw (formatted string output, a la printf)
- implemented hline/vline (part of wborder family)
- screen cursor now relocates at same time as window cursor when
  restoring after a non-wrapping function
2006-05-22 17:03:41 +00:00
Michael Brown
84a493b88d Allow vcprintf() to be called by external code such as the curses library.
Also trim another eight bytes from vsprintf.o.  :)
2006-05-22 15:41:01 +00:00
Dan Lynch
f778500739 - fixes to _wputch to get positioning and wrap working properly
- fixes to wborder (same)
- addition of a few minor functions
2006-05-22 13:10:19 +00:00
Michael Brown
9dfb9d84b4 Made the LBA48 example clearer. 2006-05-21 16:02:38 +00:00
Michael Brown
80958ff69c Added (untested) support for ATA devices. This code should be generic
enough to support both real IDE chipsets and AoE.
2006-05-21 16:01:23 +00:00
Michael Brown
af4aacb978 Added missing @file block 2006-05-20 13:25:07 +00:00
Michael Brown
402ba15c64 READ CAPACITY (16) turns out to be an optional command (even though
READ(16) is mandatory); we must use READ CAPACITY (10) first and then
use READ CAPACITY (16) if the READ CAPACITY (10) returns "out of range".
2006-05-19 18:54:38 +00:00
Michael Brown
444b885a7d Add EOVERFLOW==ERANGE 2006-05-19 18:53:12 +00:00
Dan Lynch
acf572905c - made some of the bit shifting attribute access simpler (in my mind)
- added extern declarations for global vars
- removed comments from static inlines (too time consuming to do them
  all, considering all so far have been due to the ridiculous amount of
  redundancy within the API spec)
- removed a few more extern func decls for funcs that cannot be
  implemented at this time
2006-05-19 16:22:10 +00:00
Michael Brown
d48d0fb1bb Add the concept of a "user pointer" (similar to the void __user * in
the kernel), which encapsulates the information needed to refer to an
external buffer.  Under normal operation, this can just be a void *
equivalent, but under -DKEEP_IT_REAL it would be a segoff_t equivalent.

Use this concept to avoid the need for bounce buffers in int13.c,
which reduces memory usage and opens up the possibility of using
multi-sector reads.

Extend the block-device API and the SCSI block device implementation
to support multi-sector reads.

Update iscsi.c to use user buffers.

Move the obsolete portions of realmode.h to old_realmode.h.

MS-DOS now boots an order of magnitude faster over iSCSI (~10 seconds
from power-up to C:> prompt in bochs).
2006-05-19 15:06:51 +00:00
Michael Brown
a280587cde iSCSI writes seem to be working (at least, the ethereal trace shows no
errors; still need to verify data integrity).

SCSI response PDUs are handled: status and sense data (if available) are
returned via the scsi_command structure.

Updated iSCSI session parameter usage.
2006-05-19 00:20:08 +00:00
Michael Brown
b531bd2bda All uses iscsi_state were removed some time ago; removing the
declaration.
2006-05-18 21:38:16 +00:00
Dan Lynch
2814681d20 all window primitives implemented 2006-05-18 17:51:19 +00:00
Michael Brown
6b6096d28b Strip down i386 PCI configuration space I/O to the bare minimum. A
typical build will now include 880 bytes of PCI support code, compared to
2327 bytes in Etherboot 5.4.

(There is a slight cost of around 5 extra bytes per access to a
non-constant config space address; this should be an overall win.
Driver-specific accesses will usually be to constant addresses, for
which there is no additional cost.)
2006-05-17 01:12:11 +00:00
Michael Brown
15ee09ed10 Restructured PCI subsystem to fit the new device model.
Generic PCI code now handles 64-bit BARs correctly when setting
"membase"; drivers should need to call pci_bar_start() only if they want
to use BARs other than the first memory or I/O BAR.

Split rarely-used PCI functions out into pciextra.c.

Core PCI code is now 662 bytes (down from 1308 bytes in Etherboot 5.4).
284 bytes of this saving comes from the pci/pciextra split.

Cosmetic changes to lots of drivers (e.g. vendor_id->vendor in order to
match the names used in Linux).
2006-05-16 15:12:06 +00:00
Michael Brown
0afa9db2de Tear out old heap code, replace with code that simply allocates memory
for use by malloc().

This breaks the image-loading code (which previously used the heap to
allocate the buffer for downloading the image), but that's not a major
concern since I'm going to tear out all the image formats within the next
couple of days anyway.  Byebye, NBI!  :)
2006-05-16 15:00:36 +00:00
Michael Brown
441189c6f8 Kill off the "all devices are boot devices" idea 2006-05-16 14:42:15 +00:00
Michael Brown
7cd0390013 Add list_for_each_entry_safe. 2006-05-16 14:14:31 +00:00
Michael Brown
ceba6ecb75 Added generic device model. 2006-05-16 14:10:21 +00:00
Michael Brown
6b514393d3 Change movetoyx(), putc() and getc() to methods of the screen. 2006-05-15 09:51:18 +00:00
Dan Lynch
dccc6aed3a lightweight xcurses implementation for etherboot (Michael made me do it...) 2006-05-15 09:29:48 +00:00
Michael Brown
f25731d08f Split "iSCSI as a SCSI device" out from "iSCSI as a TCP protocol". 2006-05-14 23:29:16 +00:00
Michael Brown
25f5d114a0 Updated documentation.
Shaved around 100 bytes off vsprintf.o.  It's now 50 bytes smaller than
the old implementation and provides much more conformant semantics,
including the ability to return the number of characters that would have
been printed to the string had the buffer been big enough.  (iSCSI needs
this functionality).
2006-05-14 03:31:20 +00:00
Michael Brown
2421723a15 Rewrote printf and friends to better support standard C semantics. 2006-05-14 02:51:55 +00:00
Michael Brown
1ad72e0e79 Add 64-bit byte-swapping operations. 2006-05-13 11:40:39 +00:00
Michael Brown
5009f8d6a2 Provide a SCSI device interface to the iSCSI protocol 2006-05-13 11:39:46 +00:00
Michael Brown
f33f01c126 Defined SCSI device interface, and added SCSI block device
implementation.
2006-05-13 11:37:50 +00:00
Michael Brown
8638a5e471 Defined a block device interface. 2006-05-13 11:36:30 +00:00
Michael Brown
568cad0ddc (Redoing check-in lost by SourceForge's failure.) 2006-05-13 11:30:03 +00:00
Michael Brown
9fcded3d23 Towards a(nother) new real-mode infrastructure, in which we take
advantage of the fact that we have to have a permanently-resident block
in base memory.
2006-05-02 15:41:21 +00:00
Michael Brown
9e1becaf8a Merge TCP aborted(), timedout() and closed() methods into a single
closed() method with a reason code.
2006-04-30 16:59:45 +00:00
Michael Brown
aec0e127d2 Proof-of-concept FTP implementation 2006-04-30 12:02:07 +00:00
Michael Brown
a42092d2a0 Add a temporary snprintf, so that safely-written code can at least
compile, even if it won't yet be safe.
2006-04-30 12:01:31 +00:00
Michael Brown
8df7e74990 Fix up prototype of strtoul() to match POSIX. 2006-04-30 11:45:38 +00:00
Michael Brown
7af478b30d Make tcp_connect() void; it will eventually have no failure case. 2006-04-30 02:13:52 +00:00
Michael Brown
9c9208a132 Put the TCP connection periodic processing in tcp.c, where it belongs. 2006-04-30 02:08:42 +00:00
Michael Brown
178b0a7e5e Consistency 2006-04-30 01:35:01 +00:00
Michael Brown
352bf1bda2 Move init.h to gpxe/init.h. 2006-04-30 01:08:52 +00:00
Michael Brown
bac97eb979 Change semantics of network API so that packet-absorbing calls *always*
take ownership of the packet, rather than doing so only if they return
success.  This breaks semantic compatibility with Linux's
hard_start_xmit() method, but means that we don't have to worry so much
about error cases.

Split mechanism of processing received packets (net_rx_process()) out
from policy (net_step()), preparatory to putting net_step() in a separate
object.
2006-04-29 17:17:43 +00:00
Michael Brown
23c494d14e Added basic code for implementing co-operative multitasking.
Yes, you really can do it in 65 bytes.
2006-04-29 16:42:09 +00:00
Michael Brown
129c6c3968 Network layer now works as a proof of concept 2006-04-28 14:13:50 +00:00
Michael Brown
1488cd3b73 Fix a couple of broken assertions, and align the buffer correctly. 2006-04-28 14:09:31 +00:00
Michael Brown
d8e99bf28f Gave up on adding POSIX errno's as required, and just added (almost) all
of them in one go.

EBADIMG has been replaced by ENOEXEC, and EIMGRET by ECANCELED.
2006-04-28 13:44:34 +00:00
Michael Brown
cf3783b4ca Actually, it's probably a good idea to have packet buffers avoid 4kB
crossings.
2006-04-25 12:11:36 +00:00
Michael Brown
b601a7d355 Updated memory allocator to improve support for unaligned or partially
aligned blocks.

Moved header to include/malloc.h, since we now also provide the
POSIX-like malloc()/free() pair.

Not yet tested.
2006-04-25 03:30:46 +00:00
Michael Brown
2f0d412210 Add __constant_flsl(), because it's useful for finding out the next
power-of-two up from a given constant via
  ( 1 << fls ( constant - 1 ) )

fls(), flsl(), ffs() and ffsl() appear in strings.h according to
POSIX.
2006-04-24 23:00:32 +00:00
Michael Brown
455b76980f Added pkb_reserve(). 2006-04-24 19:34:51 +00:00
Michael Brown
832e86246b gcc is rather over-aggressive about optimising out static data structures
even when __atribute__ (( unused )) is correctly set...
2006-04-24 18:31:37 +00:00
Michael Brown
824d6ffa7f Header rearrangement.
I want to get to the point where any header in include/ reflects a
standard user-level header (e.g. a POSIX header), while everything that's
specific to gPXE lives in include/gpxe/.  Headers that reflect a Linux
header (e.g. if_ether.h) should also be in include/gpxe/, with the same
name as the Linux header and, preferably, the same names used for the
definitions.
2006-04-24 15:42:49 +00:00
Michael Brown
53f78346bf Network API now allows for multiple network devices (although the
implementation allows for only one, and does so without compromising on
the efficiency of static allocation).

Link-layer protocols are cleanly separated from the device drivers.

Network-layer protocols are cleanly separated from individual network
devices.

Link-layer and network-layer protocols are cleanly separated from each
other.
2006-04-24 15:38:53 +00:00
Michael Brown
fdc2ee79db Network API now allows for multiple network devices (although the
implementation allows for only one, and does so without compromising on
the efficiency of static allocation).

Link-layer protocols are cleanly separated from the device drivers.

Network-layer protocols are cleanly separated from individual network
devices.

Link-layer and network-layer protocols are cleanly separated from each
other.
2006-04-24 15:33:06 +00:00
Michael Brown
5423f876fb Don't bother poisoning lists; it costs code size. 2006-04-24 15:28:56 +00:00
Michael Brown
1d7cfd5acf Prototype now clashes with the macro in arch/i386. 2006-04-24 15:27:58 +00:00
Michael Brown
b6b6a0b5fe First draft of a dynamic memory allocator 2006-04-24 15:21:18 +00:00
Michael Brown
6209bd873a First sketch of a new net device API. 2006-04-19 12:07:46 +00:00
Michael Brown
bdc8190c8d Remove the concept of the media-independent link-layer header and replace
it with metadata in the pkb structure.  This is required since UNDI will
want to be able to parse the link-layer header without destroying it.
2006-04-19 11:32:24 +00:00
Michael Brown
3ca7dbe7ca Added the concept of a network interface (a network-layer concept) as
separate from a network device (a link-layer concept).
2006-04-19 02:09:08 +00:00
Michael Brown
d65a66606b Typo 2006-04-19 02:08:27 +00:00
Michael Brown
2558439ce4 First version, based on include/linux/list.h, stripped down to just
those functions we are likely to need.

Still need to come up with a way of getting the linker to create
static lists using this linking mechanism.
2006-04-19 02:05:50 +00:00
Michael Brown
d24042f0bb Update now that if_ether.h has moved. 2006-04-19 01:56:10 +00:00
Michael Brown
4f3581e99c Added ENOENT and EAFNOSUPPORT 2006-04-19 01:54:53 +00:00
Michael Brown
ab139ceda9 Added pkb_unput() and pkb_len(). 2006-04-19 01:54:24 +00:00
Michael Brown
744b895077 Make flags more efficient.
Add 'raw' net_addr facility (needed for ARP).
2006-04-19 01:53:49 +00:00
Michael Brown
49f933fbc3 Moved if_ether.h and if_arp.h to include/gpxe, for consistency with Linux
kernel.

Removed obsolete struct arprequest from if_arp.h and put it in nic.c so
that nic.c will still compile.  ARP will very shortly be handled by
net/arp.c instead.
2006-04-19 01:52:41 +00:00
Michael Brown
363905e1b6 Add missing prototype 2006-04-19 01:42:33 +00:00
Michael Brown
02d342f38f First version 2006-04-19 01:42:03 +00:00
Michael Brown
0b561ce972 First sketch 2006-04-18 17:52:51 +00:00
Michael Brown
42b659f926 First version 2006-04-18 17:49:51 +00:00
Michael Brown
0864a73347 First version, based on the concepts in linux/skbuff.h 2006-04-18 17:47:01 +00:00
Michael Brown
6446767258 First draft of iSCSI protocol support. Is capable of retrieving disk
blocks.
2006-04-05 11:44:56 +00:00
Michael Brown
c8a7133e9f Added tcp_buffer, to give applications a zero-cost place to build data to
be transmitted.
2006-04-05 11:43:01 +00:00
Michael Brown
988bb50979 Added set_netmask() and set_gateway() 2006-04-05 11:41:15 +00:00
Michael Brown
b44332eb7d Split non-TCP portions of the stack out into ip.[ch].
Added set_ipaddr().
2006-03-24 17:22:09 +00:00
Michael Brown
7e61f38799 Moved "hello world" protocol implementation out of prototester.c and into
the first standalong uIP-based protocol module.
2006-03-23 22:37:05 +00:00
Michael Brown
508dcdb303 Added container_of(). This seems about the best place to put it, since
the definition of it uses offsetof(), and the two concepts are related.
2006-03-23 22:07:21 +00:00
Michael Brown
2299435f1c Added prototype for inet_ntoa, even though we don't have the function
yet, in order to allow prototester.c to compile.  It might be worth
changing all the uses of "%@" in printf to use "%s" and inet_ntoa
instead, in order to improve the portability of our code.
2006-03-23 21:34:25 +00:00
Michael Brown
a4a0244aa3 Moved uIP wrapper out of prototester.c and into proto/tcp.c. 2006-03-23 21:32:03 +00:00
Michael Brown
05b284399e Moved old tcp.h to old_tcp.h, to avoid name clash with new (uIP-based)
tcp.h.
2006-03-23 20:34:08 +00:00
Michael Brown
af23ff8a24 Assertions are now handled via the POSIX-like <assert.h>. 2006-03-23 19:33:57 +00:00
Michael Brown
55497b3402 Added missing #endif 2006-03-23 19:23:25 +00:00
Michael Brown
cb8e89de15 Added assert.h, with assert() defined (almost) as per POSIX, and
linker_assert() defined as gPXE-specific.
2006-03-23 17:28:51 +00:00
Michael Brown
dde1c5ad18 Moved include/in.h to include/gpxe/in.h, so that it can be included by
prototester.
2006-03-23 16:45:01 +00:00
Michael Brown
708bbc43bc Merge from Etherboot 5.4 2006-03-16 17:40:55 +00:00
Michael Brown
9c8a69b673 Merge from Etherboot 5.4 2006-03-16 17:31:29 +00:00
Michael Brown
5d28bae0f1 Fix up building with gcc 4.0.1 / gas 2.16.91 2006-01-17 01:47:41 +00:00
Michael Brown
33dbdda28e Allow data blocks to be less than sizeof ( struct buffer_free_block ) in
size.  (The restriction on the size of free blocks remains.)
2005-06-06 11:42:14 +00:00
Michael Brown
7d8adc25bc In multicast operation, the client still has a unicast local port. 2005-06-02 10:15:40 +00:00
Michael Brown
be7897523d IGMP protocol now uses the generic background protocol mechanism. 2005-06-01 22:22:14 +00:00
Michael Brown
85a380530d Add generic mechanism for background protocols (e.g. ARP, IGMP) 2005-06-01 22:18:38 +00:00
Michael Brown
fa17bf0917 Make rfc2090 multicast option optional 2005-06-01 19:10:25 +00:00
Michael Brown
55771a462d Re-order functions for more logical documentation 2005-06-01 18:02:24 +00:00
Michael Brown
f2198e8a65 Don't choke on duplicate OACK packets.
Make await_tftp() static and create tftp_get() for fetching the next TFTP
packet instead.
2005-06-01 18:00:01 +00:00
Michael Brown
378e922f8f Remove prototypes for obsolete functions 2005-06-01 17:57:27 +00:00
Michael Brown
53a4436d94 TFTP upgraded to use a core function library (in tftpcore.c) which will be
shared between TFTP, TFTM and MTFTP protocols.
2005-06-01 13:13:05 +00:00
Michael Brown
0b048e9cfb Now have enough functions to implement a standard TFTP client in around 50
lines of code.
2005-06-01 11:01:59 +00:00
Michael Brown
92f1a5c677 Documented the purpose of the two timeout fields in
s_PXENV_TFTP_READ_FILE.
2005-05-27 16:47:16 +00:00
Michael Brown
6e74dc3460 Added implementation note on IP routing.
Added reason for min value of 512 on s_PXENV_TFTP_OPEN::PacketSize.
2005-05-27 11:36:36 +00:00
Michael Brown
572483cc59 Separate out the documentation of the PXE API from the documentation of
the Etherboot implementation (i.e. don't do what Intel did).
2005-05-24 17:00:55 +00:00
Michael Brown
0e494614b5 Some versions of doxygen seem to object to "@ret None" or similar. 2005-05-24 00:11:25 +00:00
Michael Brown
7b423c0988 Fixes for gcc >= 3.2 from Georg Baum 2005-05-23 23:47:54 +00:00