IN void* const h_adapter,\r
OUT ipoib_adapter_t** const pp_adapter )\r
{\r
- ipoib_adapter_t *p_adapter;\r
- ib_api_status_t status;\r
- cl_status_t cl_status;\r
- uint8_t port_num;\r
+ ipoib_adapter_t *p_adapter;\r
+ ib_api_status_t status;\r
+ cl_status_t cl_status;\r
+ uint8_t port_num;\r
+ KLOCK_QUEUE_HANDLE hdl;\r
\r
IPOIB_ENTER( IPOIB_DBG_INIT );\r
\r
return IB_ERROR;\r
}\r
\r
+ KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
+ InsertHeadList( &g_ipoib.adapter_list, &p_adapter->entry );\r
+ KeReleaseInStackQueuedSpinLock( &hdl );\r
+\r
status = adapter_init( p_adapter );\r
if( status != IB_SUCCESS )\r
{\r
__adapter_destroying(\r
IN cl_obj_t* const p_obj )\r
{\r
- ipoib_adapter_t *p_adapter;\r
+ ipoib_adapter_t *p_adapter;\r
+ KLOCK_QUEUE_HANDLE hdl;\r
\r
IPOIB_ENTER( IPOIB_DBG_INIT );\r
\r
p_adapter->h_pnp = NULL;\r
}\r
\r
+ KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
+ ASSERT( !IsListEmpty( &g_ipoib.adapter_list ) );\r
+ RemoveEntryList( &p_adapter->entry );\r
+ KeReleaseInStackQueuedSpinLock( &hdl );\r
+\r
IPOIB_EXIT( IPOIB_DBG_INIT );\r
}\r
\r
\r
\r
/* Global driver debug level */\r
-uint32_t g_ipoib_dbg_lvl = IPOIB_DBG_ERROR;\r
-atomic32_t g_laa_idx = 0;\r
+uint32_t g_ipoib_dbg_lvl = IPOIB_DBG_ERROR;\r
+ipoib_globals_t g_ipoib = {0};\r
\r
\r
NTSTATUS\r
status = NDIS_STATUS_SUCCESS;\r
ndis_handle = NULL;\r
\r
+ KeInitializeSpinLock( &g_ipoib.lock );\r
+ InitializeListHead( &g_ipoib.adapter_list );\r
+\r
NdisMInitializeWrapper( &ndis_handle, p_drv_obj, p_registry_path, NULL );\r
\r
memset(&characteristics, 0, sizeof(characteristics));\r
\r
typedef struct _ipoib_globals\r
{\r
- cl_spinlock_t lock;\r
+ KSPIN_LOCK lock;\r
+ LIST_ENTRY adapter_list;\r
cl_qlist_t bundle_list;\r
\r
+ atomic32_t laa_idx;\r
+\r
} ipoib_globals_t;\r
/*\r
* FIELDS\r
* lock\r
* Spinlock to protect list access.\r
*\r
+* adapter_list\r
+* List of all adapter instances. Used for address translation support.\r
+*\r
* bundle_list\r
* List of all adapter bundles.\r
+*\r
+* laa_idx\r
+* Global counter for generating LAA MACs\r
*********/\r
\r
+extern ipoib_globals_t g_ipoib;\r
+\r
\r
typedef struct _ipoib_bundle\r
{\r
{\r
#endif\r
\r
-/* Global counter for generating LAA MACs */\r
-extern atomic32_t g_laa_idx;\r
-\r
\r
/*\r
* Address accessors\r
}\r
\r
/* Value of zero is reserved. */\r
- laa = cl_atomic_inc( &g_laa_idx );\r
+ laa = cl_atomic_inc( &g_ipoib.laa_idx );\r
\r
if( !laa )\r
return IB_INVALID_GUID;\r