Whamcloud - gitweb
Portals NAL for Myrinet GM2 for Lustre (lgmnal)
[fs/lustre-release.git] / lnet / klnds / lgmlnd / lgmnal_module.c
1 /*
2  * This program was prepared by the Regents of the University of
3  * California at Los Alamos National Laboratory (the University) under 
4  * contract number W-7405-ENG-36 with the U.S. Department of Energy
5  * (DoE). Neither the U.S. Government nor the
6  * University makes any warranty, express or implied, or assumes any
7  * liability or responsibility for the use of this software.
8  */
9
10
11 #include "lgmnal.h"
12
13
14 ptl_handle_ni_t lgmnal_ni;
15
16
17 int 
18 lgmnal_cmd(struct portal_ioctl_data *data, void *private)
19 {
20         lgmnal_data_t   *nal_data = NULL;
21         char            *name = NULL;
22         int             nid = -2;
23         int             gnid;
24         gm_status_t     gm_status;
25
26
27         LGMNAL_PRINT(LGMNAL_DEBUG_TRACE, ("lgmnal_cmd [d] private [%p]\n", data->ioc_nal_cmd, private));
28         nal_data = (lgmnal_data_t*)private;
29         LGMNAL_PRINT(LGMNAL_DEBUG_V, ("nal_data is [%p]\n", nal_data));
30         switch(data->ioc_nal_cmd) {
31         /*
32          * just reuse already defined GET_NID. Should define LGMNAL version
33          */
34         case(LGMNAL_IOC_GET_GNID):
35                 LGMNAL_PRINT(LGMNAL_DEBUG_V, ("lgmnal_cmd GETNID (Get GM Global Network Id\n"));
36
37                 PORTAL_ALLOC(name, data->ioc_plen1);
38                 copy_from_user(name, data->ioc_pbuf1, data->ioc_plen1);
39         
40                 LGMNAL_GM_LOCK(nal_data);
41                 nid = gm_host_name_to_node_id(nal_data->gm_port, name);
42                 LGMNAL_GM_UNLOCK(nal_data);
43                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Local node id is [%d]\n", nid));
44                 LGMNAL_GM_LOCK(nal_data);
45                 gm_status = gm_node_id_to_global_id(nal_data->gm_port, nid, &gnid);
46                 LGMNAL_GM_UNLOCK(nal_data);
47                 if (gm_status != GM_SUCCESS) {
48                         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("gm_node_id_to_global_id failed\n", gm_status));
49                         return(-1);
50                 }
51                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Global node is is [%u][%x]\n", gnid, gnid));
52                 copy_to_user(data->ioc_pbuf2, &gnid, data->ioc_plen2);
53         break;
54         default:
55                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("lgmnal_cmd UNKNOWN[%d]\n", data->ioc_nal_cmd));
56                 data->ioc_nid2 = -1;
57         }
58
59
60         return(0);
61 }
62
63 int lgmnal_small_msg_size = 81920;
64 int lgmnal_debug_level = 1;
65
66 int
67 init_module()
68 {
69         int     status;
70         LGMNAL_PRINT(LGMNAL_DEBUG_TRACE, ("This is the lgmnal module initialisation routine\n"));
71
72
73
74         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Calling lgmnal_init\n"));
75         status = PtlNIInit(lgmnal_init, 32, 4, 0, &lgmnal_ni);
76         if (status == PTL_OK) {
77                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Portals LGMNAL initialised ok lgmnal_ni [%lx]\n", lgmnal_ni));
78         } else {
79                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Portals LGMNAL Failed to initialise\n"));
80                 return(1);
81                 
82         }
83
84         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Calling kportal_nal_register\n"));
85         /*
86          *      global_nal_data is set by lgmnal_init
87          */
88         if (kportal_nal_register(LGMNAL, &lgmnal_cmd, global_nal_data) != 0) {
89                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("kportal_nal_register failed\n"));
90                 return(1);
91         }
92
93         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Calling PORTAL_SYMBOL_REGISTER\n"));
94         PORTAL_SYMBOL_REGISTER(lgmnal_ni);
95
96         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("This is the end of the lgmnal module initialisation routine"));
97
98
99         return(0);
100 }
101
102
103 void cleanup_module()
104 {
105         int interface=0;
106
107         LGMNAL_PRINT(LGMNAL_DEBUG_TRACE, ("Cleaning up lgmnal module"));
108         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Interface [%d] Calling shutdown\n", interface));
109         kportal_nal_unregister(LGMNAL);
110         PORTAL_SYMBOL_UNREGISTER(lgmnal_ni);
111         lgmnal_fini();
112         global_nal_data = NULL;
113         return;
114 }
115
116
117 EXPORT_SYMBOL(lgmnal_ni);
118 EXPORT_SYMBOL(lgmnal_debug_level);
119
120 MODULE_PARM(lgmnal_small_msg_size, "i");
121 MODULE_PARM(lgmnal_debug_level, "i");
122
123 MODULE_AUTHOR("Morgan Doyle. morgan.doyle@hp.com");
124
125 MODULE_DESCRIPTION("A Portals kernel NAL for Myrinet GM2. [0<lgmnal_debug_level<4]");
126
127 MODULE_LICENSE("GPL");