iPXE
pnic_api.h
Go to the documentation of this file.
1 /*
2  * Constants etc. for the Bochs/Etherboot pseudo-NIC
3  *
4  * This header file must be valid C and C++.
5  *
6  * Operation of the pseudo-NIC (PNIC) is pretty simple. To write a
7  * command plus data, first write the length of the data to
8  * PNIC_REG_LEN, then write the data a byte at a type to
9  * PNIC_REG_DATA, then write the command code to PNIC_REG_CMD. The
10  * status will be available from PNIC_REG_STAT. The length of any
11  * data returned will be in PNIC_REG_LEN and can be read a byte at a
12  * time from PNIC_REG_DATA.
13  */
14 
15 FILE_LICENCE ( GPL2_OR_LATER );
16 
17 /*
18  * PCI parameters
19  */
20 #define PNIC_PCI_VENDOR 0xfefe /* Hopefully these won't clash with */
21 #define PNIC_PCI_DEVICE 0xefef /* any real PCI device IDs. */
22 
23 /*
24  * 'Hardware' register addresses, offset from io_base
25  */
26 #define PNIC_REG_CMD 0x00 /* Command register, 2 bytes, write only */
27 #define PNIC_REG_STAT 0x00 /* Status register, 2 bytes, read only */
28 #define PNIC_REG_LEN 0x02 /* Length register, 2 bytes, read-write */
29 #define PNIC_REG_DATA 0x04 /* Data port, 1 byte, read-write */
30 /*
31  * PNIC_MAX_REG used in Bochs to claim i/o space
32  */
33 #define PNIC_MAX_REG 0x04
34 
35 /*
36  * Command code definitions: write these into PNIC_REG_CMD
37  */
38 #define PNIC_CMD_NOOP 0x0000
39 #define PNIC_CMD_API_VER 0x0001
40 #define PNIC_CMD_READ_MAC 0x0002
41 #define PNIC_CMD_RESET 0x0003
42 #define PNIC_CMD_XMIT 0x0004
43 #define PNIC_CMD_RECV 0x0005
44 #define PNIC_CMD_RECV_QLEN 0x0006
45 #define PNIC_CMD_MASK_IRQ 0x0007
46 #define PNIC_CMD_FORCE_IRQ 0x0008
47 
48 /*
49  * Status code definitions: read these from PNIC_REG_STAT
50  *
51  * We avoid using status codes that might be confused with
52  * randomly-read data (e.g. 0x0000, 0xffff etc.)
53  */
54 #define PNIC_STATUS_OK 0x4f4b /* 'OK' */
55 #define PNIC_STATUS_UNKNOWN_CMD 0x3f3f /* '??' */
56 
57 /*
58  * Other miscellaneous information
59  */
60 
61 #define PNIC_API_VERSION 0x0101 /* 1.1 */
FILE_LICENCE(GPL2_OR_LATER)