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 15FILE_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 */ 62