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