xref: /onnv-gate/usr/src/grub/grub-0.97/netboot/pnic_api.h (revision 8044:b3af80bbf173)
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