[CORE] Expose vendor defined device in ibiou.
[mirror/winof/.git] / core / iou / kernel / iou_ioc_mgr.h
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
3  * Portions Copyright (c) 2008 Microsoft Corporation.  All rights reserved.\r
4  *\r
5  * This software is available to you under the OpenIB.org BSD license\r
6  * below:\r
7  *\r
8  *     Redistribution and use in source and binary forms, with or\r
9  *     without modification, are permitted provided that the following\r
10  *     conditions are met:\r
11  *\r
12  *      - Redistributions of source code must retain the above\r
13  *        copyright notice, this list of conditions and the following\r
14  *        disclaimer.\r
15  *\r
16  *      - Redistributions in binary form must reproduce the above\r
17  *        copyright notice, this list of conditions and the following\r
18  *        disclaimer in the documentation and/or other materials\r
19  *        provided with the distribution.\r
20  *\r
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
25  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
26  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
27  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
28  * SOFTWARE.\r
29  *\r
30  * $Id$\r
31  */\r
32 \r
33 \r
34 \r
35 #if !defined( __IOU_IOU_MGR_H__ )\r
36 #define __IOU_IOU_MGR_H__\r
37 \r
38 #include <iba/ib_al.h>\r
39 #include <complib/cl_mutex.h>\r
40 #include <complib/cl_obj.h>\r
41 #include <iba/iou_ifc.h>\r
42 \r
43 /* Global load service */\r
44 typedef struct _ioc_mgr\r
45 {\r
46         cl_obj_t                                        obj;\r
47 \r
48         ib_al_ifc_t                                     ifc;\r
49 \r
50         ib_al_handle_t                          h_al;\r
51         ib_pnp_handle_t                         h_pnp;  /* Handle for iou PnP events */\r
52 \r
53         /* Attributes for this IOU. */\r
54         iou_ifc_data_t                          info;\r
55 \r
56         /* Mutex protects both pointer vectors. */\r
57         cl_mutex_t                                      pdo_mutex;\r
58 \r
59         /* Pointer vector of child IOC PDOs. */\r
60         cl_qlist_t                                      pdo_list;\r
61 \r
62 }       ioc_mgr_t;\r
63 \r
64 \r
65 #pragma pack(push, 1)\r
66 \r
67 /* Windows pnp device information */\r
68 #define MAX_DEVICE_ID_LEN     200\r
69 #define MAX_DEVICE_STRING_LEN           MAX_DEVICE_ID_LEN + 2   //add extra 4 bytes in case we need double NULL ending\r
70 \r
71 typedef struct _ca_ioc_info {\r
72         net64_t                                 ca_guid;\r
73         ib_ioc_info_t                           info;\r
74         ib_svc_entry_t                          svc_entry_array[1];\r
75 } ca_ioc_info_t;\r
76 \r
77 typedef struct _child_device_info {\r
78         wchar_t         device_id[MAX_DEVICE_STRING_LEN];  \r
79         uint32_t        device_id_size;\r
80         wchar_t         compatible_id[MAX_DEVICE_STRING_LEN];\r
81         uint32_t        compatible_id_size;\r
82         wchar_t         hardware_id[MAX_DEVICE_STRING_LEN];\r
83         uint32_t        hardware_id_size;\r
84         wchar_t         description[MAX_DEVICE_STRING_LEN];\r
85         uint32_t        description_size;\r
86         ca_ioc_info_t   ca_ioc_path;\r
87         uint32_t        uniqueinstanceid;\r
88 }  child_device_info_t;\r
89 \r
90 typedef struct _child_device_info_list{\r
91         struct _child_device_info_list *next_device_info;\r
92         child_device_info_t io_device_info;\r
93 }child_device_info_list_t;\r
94 \r
95 typedef struct _ca_ioc_map {\r
96         cl_list_item_t                          ioc_list;\r
97         ioc_mgr_t                               *p_ioc_mgr;\r
98         net64_t                                 ca_guid;\r
99         ib_ioc_info_t                           info;\r
100         ib_svc_entry_t                          svc_entry_array[1];\r
101 } ca_ioc_map_t;\r
102 #pragma pack(pop)\r
103 \r
104 ib_api_status_t\r
105 _create_ioc_pdo(\r
106         IN                              child_device_info_t*                    p_child_dev,\r
107         IN                              ca_ioc_map_t*                           p_ca_ioc_map);\r
108 \r
109 ca_ioc_map_t    *find_ca_ioc_map(net64_t        ca_guid,\r
110                                  ib_net64_t     ioc_guid);\r
111 \r
112 \r
113 void\r
114 ioc_mgr_construct(\r
115         IN      OUT                     ioc_mgr_t* const                        p_ioc_mgr );\r
116 \r
117 ib_api_status_t\r
118 ioc_mgr_init(\r
119         IN      OUT                     ioc_mgr_t* const                        p_ioc_mgr );\r
120 \r
121 NTSTATUS\r
122 ioc_mgr_get_iou_relations(\r
123         IN                              ioc_mgr_t* const                        p_ioc_mgr,\r
124         IN                              IRP* const                                      p_irp );\r
125 \r
126 #endif\r