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 | /*
|
---|
16 | * PCI parameters
|
---|
17 | */
|
---|
18 | #define PNIC_PCI_VENDOR 0xfefe /* Hopefully these won't clash with */
|
---|
19 | #define PNIC_PCI_DEVICE 0xefef /* any real PCI device IDs. */
|
---|
20 |
|
---|
21 | /*
|
---|
22 | * 'Hardware' register addresses, offset from io_base
|
---|
23 | */
|
---|
24 | #define PNIC_REG_CMD 0x00 /* Command register, 2 bytes, write only */
|
---|
25 | #define PNIC_REG_STAT 0x00 /* Status register, 2 bytes, read only */
|
---|
26 | #define PNIC_REG_LEN 0x02 /* Length register, 2 bytes, read-write */
|
---|
27 | #define PNIC_REG_DATA 0x04 /* Data port, 1 byte, read-write */
|
---|
28 | /*
|
---|
29 | * PNIC_MAX_REG used in Bochs to claim i/o space
|
---|
30 | */
|
---|
31 | #define PNIC_MAX_REG 0x04
|
---|
32 |
|
---|
33 | /*
|
---|
34 | * Command code definitions: write these into PNIC_REG_CMD
|
---|
35 | */
|
---|
36 | #define PNIC_CMD_NOOP 0x0000
|
---|
37 | #define PNIC_CMD_API_VER 0x0001
|
---|
38 | #define PNIC_CMD_READ_MAC 0x0002
|
---|
39 | #define PNIC_CMD_RESET 0x0003
|
---|
40 | #define PNIC_CMD_XMIT 0x0004
|
---|
41 | #define PNIC_CMD_RECV 0x0005
|
---|
42 | #define PNIC_CMD_RECV_QLEN 0x0006
|
---|
43 | #define PNIC_CMD_MASK_IRQ 0x0007
|
---|
44 | #define PNIC_CMD_FORCE_IRQ 0x0008
|
---|
45 |
|
---|
46 | /*
|
---|
47 | * Status code definitions: read these from PNIC_REG_STAT
|
---|
48 | *
|
---|
49 | * We avoid using status codes that might be confused with
|
---|
50 | * randomly-read data (e.g. 0x0000, 0xffff etc.)
|
---|
51 | */
|
---|
52 | #define PNIC_STATUS_OK 0x4f4b /* 'OK' */
|
---|
53 | #define PNIC_STATUS_UNKNOWN_CMD 0x3f3f /* '??' */
|
---|
54 |
|
---|
55 | /*
|
---|
56 | * Other miscellaneous information
|
---|
57 | */
|
---|
58 |
|
---|
59 | #define PNIC_API_VERSION 0x0101 /* 1.1 */
|
---|