diff --git a/lcd-domains/test_mods/ixgbe/ixgbe_cap.c b/lcd-domains/test_mods/ixgbe/ixgbe_cap.c index 7a57dc935611e37ee9172a543386abcebc616792..00e11446edadf2f10d4d3dff340abfc6d9717053 100644 --- a/lcd-domains/test_mods/ixgbe/ixgbe_cap.c +++ b/lcd-domains/test_mods/ixgbe/ixgbe_cap.c @@ -16,22 +16,33 @@ struct type_ops_id { cap_type_t libcap_type; }; +static int dummy_func(struct cspace *cspace, struct cnode *cnode, + void *object) +{ + return 0; +} + enum glue_type { + GLUE_TYPE_DEVICE_CONTAINER, GLUE_TYPE_MODULE_CONTAINER, GLUE_TYPE_NET_DEVICE_CONTAINER, + GLUE_TYPE_PCI_BUS_CONTAINER, GLUE_TYPE_PCI_DEV_CONTAINER, GLUE_TYPE_PCI_DEVICE_ID_CONTAINER, GLUE_TYPE_PCI_DRIVER_CONTAINER, + GLUE_TYPE_SK_BUFF_CONTAINER, GLUE_NR_TYPES, -}; -static int dummy_func(struct cspace *cspace, struct cnode *cnode, - void *object) -{ - return 0; -} +}; static struct type_ops_id glue_libcap_type_ops[GLUE_NR_TYPES] = { + { + { + .name = "struct device", + .delete = dummy_func, + .revoke = dummy_func, + } + }, { { .name = "struct module", @@ -46,6 +57,13 @@ static struct type_ops_id glue_libcap_type_ops[GLUE_NR_TYPES] = { .revoke = dummy_func, } }, + { + { + .name = "struct pci_bus", + .delete = dummy_func, + .revoke = dummy_func, + } + }, { { .name = "struct pci_dev", @@ -67,6 +85,13 @@ static struct type_ops_id glue_libcap_type_ops[GLUE_NR_TYPES] = { .revoke = dummy_func, } }, + { + { + .name = "struct sk_buff", + .delete = dummy_func, + .revoke = dummy_func, + } + }, }; int glue_cap_init(void) @@ -145,114 +170,4 @@ void glue_cap_exit(void) } } -int glue_cap_insert_module_type(struct glue_cspace *cspace, - struct module_container *module_container, - struct cptr *c_out) -{ - return glue_cspace_insert(cspace, - module_container, - glue_libcap_type_ops[ GLUE_TYPE_MODULE_CONTAINER ].libcap_type, - c_out); - -} - -int glue_cap_lookup_module_type(struct glue_cspace *cspace, - struct cptr c, - struct module_container **module_container) -{ - return glue_cspace_lookup(cspace, - c, - glue_libcap_type_ops[ GLUE_TYPE_MODULE_CONTAINER ].libcap_type, - ( void ** )module_container); - -} - -int glue_cap_insert_pci_dev_type(struct glue_cspace *cspace, - struct pci_dev_container *pci_dev_container, - struct cptr *c_out) -{ - return glue_cspace_insert(cspace, - pci_dev_container, - glue_libcap_type_ops[ GLUE_TYPE_PCI_DEV_CONTAINER ].libcap_type, - c_out); - -} - -int glue_cap_lookup_pci_dev_type(struct glue_cspace *cspace, - struct cptr c, - struct pci_dev_container **pci_dev_container) -{ - return glue_cspace_lookup(cspace, - c, - glue_libcap_type_ops[ GLUE_TYPE_PCI_DEV_CONTAINER ].libcap_type, - ( void ** )pci_dev_container); - -} - -int glue_cap_insert_pci_device_id_type(struct glue_cspace *cspace, - struct pci_device_id_container *pci_device_id_container, - struct cptr *c_out) -{ - return glue_cspace_insert(cspace, - pci_device_id_container, - glue_libcap_type_ops[ GLUE_TYPE_PCI_DEVICE_ID_CONTAINER ].libcap_type, - c_out); - -} - -int glue_cap_lookup_pci_device_id_type(struct glue_cspace *cspace, - struct cptr c, - struct pci_device_id_container **pci_device_id_container) -{ - return glue_cspace_lookup(cspace, - c, - glue_libcap_type_ops[ GLUE_TYPE_PCI_DEVICE_ID_CONTAINER ].libcap_type, - ( void ** )pci_device_id_container); - -} - -int glue_cap_insert_pci_driver_type(struct glue_cspace *cspace, - struct pci_driver_container *pci_driver_container, - struct cptr *c_out) -{ - return glue_cspace_insert(cspace, - pci_driver_container, - glue_libcap_type_ops[ GLUE_TYPE_PCI_DRIVER_CONTAINER ].libcap_type, - c_out); - -} - -int glue_cap_lookup_pci_driver_type(struct glue_cspace *cspace, - struct cptr c, - struct pci_driver_container **pci_driver_container) -{ - return glue_cspace_lookup(cspace, - c, - glue_libcap_type_ops[ GLUE_TYPE_PCI_DRIVER_CONTAINER ].libcap_type, - ( void ** )pci_driver_container); - -} - -int glue_cap_insert_net_device_type(struct glue_cspace *cspace, - struct net_device_container *net_device_container, - struct cptr *c_out) -{ - return glue_cspace_insert(cspace, - net_device_container, - glue_libcap_type_ops[ GLUE_TYPE_NET_DEVICE_CONTAINER ].libcap_type, - c_out); - -} - -int glue_cap_lookup_net_device_type(struct glue_cspace *cspace, - struct cptr c, - struct net_device_container **net_device_container) -{ - return glue_cspace_lookup(cspace, - c, - glue_libcap_type_ops[ GLUE_TYPE_NET_DEVICE_CONTAINER ].libcap_type, - ( void ** )net_device_container); - -} - - +#include "ixgbe_glue_helper.c" diff --git a/lcd-domains/test_mods/ixgbe/ixgbe_common.h b/lcd-domains/test_mods/ixgbe/ixgbe_common.h index 444179b39df61d44f0c2b64100e170471a1c427b..808f399c6248786e7cc35e8c776cdd62a6e36820 100644 --- a/lcd-domains/test_mods/ixgbe/ixgbe_common.h +++ b/lcd-domains/test_mods/ixgbe/ixgbe_common.h @@ -14,49 +14,50 @@ #include #include -#define PCI_REGIONS +#include "ixgbe_glue_helper.h" +#define PCI_REGIONS enum dispatch_t { __PCI_REGISTER_DRIVER, - PROBE, - REMOVE, PCI_UNREGISTER_DRIVER, ALLOC_ETHERDEV_MQS, -}; - -struct module_container { - struct module module; - struct cptr other_ref; - struct cptr my_ref; -}; - -struct net_device_container { - struct net_device net_device; - struct cptr other_ref; - struct cptr my_ref; -}; - -struct pci_dev_container { - struct pci_dev pci_dev; - struct cptr other_ref; - struct cptr my_ref; -}; -struct pci_device_id_container { - struct pci_device_id pci_device_id; - struct cptr other_ref; - struct cptr my_ref; -}; -struct pci_driver_container { - struct pci_driver pci_driver; - struct cptr other_ref; - struct cptr my_ref; -}; -struct trampoline_hidden_args { - void *struct_container; - struct glue_cspace *cspace; - struct lcd_trampoline_handle *t_handle; - struct thc_channel *async_chnl; - struct cptr sync_ep; + REGISTER_NETDEVICE, + ETHER_SETUP, + ETH_MAC_ADDR, + ETH_VALIDATE_ADDR, + FREE_NETDEV, + NETIF_CARRIER_OFF, + NETIF_CARRIER_ON, + NETIF_DEVICE_ATTACH, + NETIF_DEVICE_DETACH, + NETIF_SET_REAL_NUM_RX_QUEUES, + NETIF_SET_REAL_NUM_TX_QUEUES, + CONSUME_SKB, + UNREGISTER_NETDEV, + ETH_PLATFORM_GET_MAC_ADDRESS, + DEV_ADDR_DEL, + DEVICE_SET_WAKEUP_ENABLE, + ETH_GET_HEADLEN, + NETIF_TX_STOP_ALL_QUEUES, + PCI_DISABLE_PCIE_ERROR_REPORTING, + PCI_BUS_READ_CONFIG_WORD, + PCI_BUS_WRITE_CONFIG_WORD, + PCI_CLEANUP_AER_UNCORRECT_ERROR_STATUS, + PCI_DISABLE_DEVICE, + PCI_ENABLE_PCIE_ERROR_REPORTING, + PCIE_CAPABILITY_READ_WORD, + PCIE_GET_MINIMUM_LINK, + PCI_ENABLE_DEVICE_MEM, + PCI_REQUEST_SELECTED_REGIONS, + PCI_REQUEST_SELECTED_REGIONS_EXCLUSIVE, + PCI_SET_MASTER, + PCI_SAVE_STATE, + PCI_RELEASE_SELECTED_REGIONS, + PCI_SELECT_BARS, + PCI_WAKE_FROM_D3, + PROBE, + REMOVE, + TRIGGER_EXIT, }; #define ASYNC_RPC_BUFFER_ORDER 12 @@ -74,38 +75,6 @@ void glue_cap_remove( struct glue_cspace *cspace, cptr_t c); - -int glue_cap_insert_module_type(struct glue_cspace *cspace, - struct module_container *module_container, - struct cptr *c_out); -int glue_cap_insert_pci_dev_type(struct glue_cspace *cspace, - struct pci_dev_container *pci_dev_container, - struct cptr *c_out); -int glue_cap_insert_pci_device_id_type(struct glue_cspace *cspace, - struct pci_device_id_container *pci_device_id_container, - struct cptr *c_out); -int glue_cap_insert_pci_driver_type(struct glue_cspace *cspace, - struct pci_driver_container *pci_driver_container, - struct cptr *c_out); -int glue_cap_insert_net_device_type(struct glue_cspace *cspace, - struct net_device_container *net_device_container, - struct cptr *c_out); -int glue_cap_lookup_module_type(struct glue_cspace *cspace, - struct cptr c, - struct module_container **module_container); -int glue_cap_lookup_pci_dev_type(struct glue_cspace *cspace, - struct cptr c, - struct pci_dev_container **pci_dev_container); -int glue_cap_lookup_pci_device_id_type(struct glue_cspace *cspace, - struct cptr c, - struct pci_device_id_container **pci_device_id_container); -int glue_cap_lookup_pci_driver_type(struct glue_cspace *cspace, - struct cptr c, - struct pci_driver_container **pci_driver_container); -int glue_cap_lookup_net_device_type(struct glue_cspace *cspace, - struct cptr c, - struct net_device_container **net_device_container); - /* ASYNC HELPERS -------------------------------------------------- */ static inline diff --git a/lcd-domains/test_mods/ixgbe/ixgbe_glue_helper.c b/lcd-domains/test_mods/ixgbe/ixgbe_glue_helper.c new file mode 100644 index 0000000000000000000000000000000000000000..fa253b2c2a369e8e8a10de1b705e09c5a2904f18 --- /dev/null +++ b/lcd-domains/test_mods/ixgbe/ixgbe_glue_helper.c @@ -0,0 +1,177 @@ + +int glue_cap_insert_device_type(struct glue_cspace *cspace, + struct device_container *device_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + device_container, + glue_libcap_type_ops[ GLUE_TYPE_DEVICE_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_device_type(struct glue_cspace *cspace, + struct cptr c, + struct device_container **device_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_DEVICE_CONTAINER ].libcap_type, + ( void ** )device_container); + +} + +int glue_cap_insert_module_type(struct glue_cspace *cspace, + struct module_container *module_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + module_container, + glue_libcap_type_ops[ GLUE_TYPE_MODULE_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_module_type(struct glue_cspace *cspace, + struct cptr c, + struct module_container **module_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_MODULE_CONTAINER ].libcap_type, + ( void ** )module_container); + +} + +int glue_cap_insert_net_device_type(struct glue_cspace *cspace, + struct net_device_container *net_device_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + net_device_container, + glue_libcap_type_ops[ GLUE_TYPE_NET_DEVICE_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_net_device_type(struct glue_cspace *cspace, + struct cptr c, + struct net_device_container **net_device_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_NET_DEVICE_CONTAINER ].libcap_type, + ( void ** )net_device_container); + +} + +int glue_cap_insert_pci_bus_type(struct glue_cspace *cspace, + struct pci_bus_container *pci_bus_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + pci_bus_container, + glue_libcap_type_ops[ GLUE_TYPE_PCI_BUS_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_pci_bus_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_bus_container **pci_bus_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_PCI_BUS_CONTAINER ].libcap_type, + ( void ** )pci_bus_container); + +} + +int glue_cap_insert_pci_dev_type(struct glue_cspace *cspace, + struct pci_dev_container *pci_dev_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + pci_dev_container, + glue_libcap_type_ops[ GLUE_TYPE_PCI_DEV_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_pci_dev_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_dev_container **pci_dev_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_PCI_DEV_CONTAINER ].libcap_type, + ( void ** )pci_dev_container); + +} + +int glue_cap_insert_pci_device_id_type(struct glue_cspace *cspace, + struct pci_device_id_container *pci_device_id_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + pci_device_id_container, + glue_libcap_type_ops[ GLUE_TYPE_PCI_DEVICE_ID_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_pci_device_id_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_device_id_container **pci_device_id_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_PCI_DEVICE_ID_CONTAINER ].libcap_type, + ( void ** )pci_device_id_container); + +} + +int glue_cap_insert_pci_driver_type(struct glue_cspace *cspace, + struct pci_driver_container *pci_driver_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + pci_driver_container, + glue_libcap_type_ops[ GLUE_TYPE_PCI_DRIVER_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_pci_driver_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_driver_container **pci_driver_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_PCI_DRIVER_CONTAINER ].libcap_type, + ( void ** )pci_driver_container); + +} + +int glue_cap_insert_sk_buff_type(struct glue_cspace *cspace, + struct sk_buff_container *sk_buff_container, + struct cptr *c_out) +{ + return glue_cspace_insert(cspace, + sk_buff_container, + glue_libcap_type_ops[ GLUE_TYPE_SK_BUFF_CONTAINER ].libcap_type, + c_out); + +} + +int glue_cap_lookup_sk_buff_type(struct glue_cspace *cspace, + struct cptr c, + struct sk_buff_container **sk_buff_container) +{ + return glue_cspace_lookup(cspace, + c, + glue_libcap_type_ops[ GLUE_TYPE_SK_BUFF_CONTAINER ].libcap_type, + ( void ** )sk_buff_container); + +} + diff --git a/lcd-domains/test_mods/ixgbe/ixgbe_glue_helper.h b/lcd-domains/test_mods/ixgbe/ixgbe_glue_helper.h new file mode 100644 index 0000000000000000000000000000000000000000..c0c941c93bd9ed1e627d908b0d53b257e2b33619 --- /dev/null +++ b/lcd-domains/test_mods/ixgbe/ixgbe_glue_helper.h @@ -0,0 +1,100 @@ +#ifndef __IXGBE_GLUE_HELPER_H__ +#define __IXGBE_GLUE_HELPER_H__ + +struct device_container { + struct device device; + struct cptr other_ref; + struct cptr my_ref; +}; +struct module_container { + struct module module; + struct cptr other_ref; + struct cptr my_ref; +}; +struct net_device_container { + struct net_device net_device; + struct cptr other_ref; + struct cptr my_ref; +}; +struct pci_bus_container { + struct pci_bus pci_bus; + struct cptr other_ref; + struct cptr my_ref; +}; +struct pci_dev_container { + struct pci_dev pci_dev; + struct cptr other_ref; + struct cptr my_ref; +}; +struct pci_device_id_container { + struct pci_device_id pci_device_id; + struct cptr other_ref; + struct cptr my_ref; +}; +struct pci_driver_container { + struct pci_driver pci_driver; + struct cptr other_ref; + struct cptr my_ref; +}; +struct sk_buff_container { + struct sk_buff sk_buff; + struct cptr other_ref; + struct cptr my_ref; +}; +struct trampoline_hidden_args { + void *struct_container; + struct glue_cspace *cspace; + struct lcd_trampoline_handle *t_handle; + struct thc_channel *async_chnl; + struct cptr sync_ep; +}; +int glue_cap_insert_device_type(struct glue_cspace *cspace, + struct device_container *device_container, + struct cptr *c_out); +int glue_cap_insert_module_type(struct glue_cspace *cspace, + struct module_container *module_container, + struct cptr *c_out); +int glue_cap_insert_net_device_type(struct glue_cspace *cspace, + struct net_device_container *net_device_container, + struct cptr *c_out); +int glue_cap_insert_pci_bus_type(struct glue_cspace *cspace, + struct pci_bus_container *pci_bus_container, + struct cptr *c_out); +int glue_cap_insert_pci_dev_type(struct glue_cspace *cspace, + struct pci_dev_container *pci_dev_container, + struct cptr *c_out); +int glue_cap_insert_pci_device_id_type(struct glue_cspace *cspace, + struct pci_device_id_container *pci_device_id_container, + struct cptr *c_out); +int glue_cap_insert_pci_driver_type(struct glue_cspace *cspace, + struct pci_driver_container *pci_driver_container, + struct cptr *c_out); +int glue_cap_insert_sk_buff_type(struct glue_cspace *cspace, + struct sk_buff_container *sk_buff_container, + struct cptr *c_out); +int glue_cap_lookup_device_type(struct glue_cspace *cspace, + struct cptr c, + struct device_container **device_container); +int glue_cap_lookup_module_type(struct glue_cspace *cspace, + struct cptr c, + struct module_container **module_container); +int glue_cap_lookup_net_device_type(struct glue_cspace *cspace, + struct cptr c, + struct net_device_container **net_device_container); +int glue_cap_lookup_pci_bus_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_bus_container **pci_bus_container); +int glue_cap_lookup_pci_dev_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_dev_container **pci_dev_container); +int glue_cap_lookup_pci_device_id_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_device_id_container **pci_device_id_container); +int glue_cap_lookup_pci_driver_type(struct glue_cspace *cspace, + struct cptr c, + struct pci_driver_container **pci_driver_container); +int glue_cap_lookup_sk_buff_type(struct glue_cspace *cspace, + struct cptr c, + struct sk_buff_container **sk_buff_container); + +#endif /* __IXGBE_GLUE_HELPER_H__ */