1/*
2 * pci_vmio.h
3 *
4 * Virtual Network device for Host/Guest communication
5 *
6 *  Created on: May 13, 2012
7 *      Author: luki
8 */
9
10#ifndef PCI_VMKITMON_ETH_H_
11#define PCI_VMKITMON_ETH_H_
12
13#include "pci.h"
14#include <dev/pci_hdr0_mem_dev.h>
15
16// control register
17#define PCI_VMKITMON_ETH_RSTIRQ (1<<0) //guest writes 1 if he has handled interrupt
18#define PCI_VMKITMON_ETH_TXMIT (1<<1)  //guest writes 1 if it wants send packets
19#define PCI_VMKITMON_ETH_IFUP (1<<2)   //guest writes 1 if interface is up
20
21// status register
22#define PCI_VMKITMON_ETH_IRQST 1
23
24// PCI device id
25#define PCI_VMKITMON_ETH_DEVID 0x1000
26
27// Memory mapped registers
28enum pci_vmkitmon_registers {
29	PCI_VMKITMON_ETH_STATUS,
30	PCI_VMKITMON_ETH_CONTROL,
31	PCI_VMKITMON_ETH_MAC_LOW,
32	PCI_VMKITMON_ETH_MAC_HIGH,
33	PCI_VMKITMON_ETH_TXDESC_ADR,	//Guest Physical ptr to array of rxdescs
34	PCI_VMKITMON_ETH_TXDESC_LEN,	//Packet length
35	PCI_VMKITMON_ETH_RXDESC_ADR, 	//Guest Physical ptr to receive buffer
36	PCI_VMKITMON_ETH_RXDESC_LEN		//Size of the receive buffer
37};
38
39struct pci_vmkitmon_eth_rxdesc {
40	uint32_t addr;
41	uint32_t len;
42};
43
44struct pci_vmkitmon_eth_txdesc {
45	uint32_t addr;
46	uint32_t len;
47};
48
49struct pci_vmkitmon_eth {
50	pci_hdr0_mem_t      ph;
51    uint32_t            pci_header[0x40];
52    uint32_t			mmio_register[8];
53    uint32_t            mem_guest_paddr; //guest physical base address of memory register
54	struct pci_device *pci_device;
55};
56
57//#define VMKITMON_ETH_DEBUG_SWITCH 1
58#if defined(VMKITMON_ETH_DEBUG_SWITCH)
59#define VMKITMON_ETH_DEBUG(x...) printf("VMKITMON_ETH: " x)
60#else
61#define VMKITMON_ETH_DEBUG(x...) ((void)0)
62#endif
63
64#endif
65