Deleted Added
full compact
kern_windrv.c (142399) kern_windrv.c (142931)
1/*-
2 * Copyright (c) 2005
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2005
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/sys/compat/ndis/kern_windrv.c 142399 2005-02-24 21:49:14Z wpaul $");
34__FBSDID("$FreeBSD: head/sys/compat/ndis/kern_windrv.c 142931 2005-03-01 17:21:25Z wpaul $");
35
36#include <sys/param.h>
37#include <sys/systm.h>
38#include <sys/unistd.h>
39#include <sys/types.h>
40
41#include <sys/kernel.h>
42#include <sys/malloc.h>

--- 186 unchanged lines hidden (view full) ---

229 module_t mod;
230 vm_offset_t img;
231 int len;
232{
233 image_import_descriptor imp_desc;
234 image_optional_header opt_hdr;
235 driver_entry entry;
236 struct drvdb_ent *new;
35
36#include <sys/param.h>
37#include <sys/systm.h>
38#include <sys/unistd.h>
39#include <sys/types.h>
40
41#include <sys/kernel.h>
42#include <sys/malloc.h>

--- 186 unchanged lines hidden (view full) ---

229 module_t mod;
230 vm_offset_t img;
231 int len;
232{
233 image_import_descriptor imp_desc;
234 image_optional_header opt_hdr;
235 driver_entry entry;
236 struct drvdb_ent *new;
237 struct driver_object *dobj;
237 struct driver_object *drv;
238 int status;
239
240 /*
241 * First step: try to relocate and dynalink the executable
242 * driver image.
243 */
244
245 /* Perform text relocation */

--- 26 unchanged lines hidden (view full) ---

272 entry = (driver_entry)pe_translate_addr(img, opt_hdr.ioh_entryaddr);
273
274 /* Next step: allocate and store a driver object. */
275
276 new = malloc(sizeof(struct drvdb_ent), M_DEVBUF, M_NOWAIT);
277 if (new == NULL)
278 return (ENOMEM);
279
238 int status;
239
240 /*
241 * First step: try to relocate and dynalink the executable
242 * driver image.
243 */
244
245 /* Perform text relocation */

--- 26 unchanged lines hidden (view full) ---

272 entry = (driver_entry)pe_translate_addr(img, opt_hdr.ioh_entryaddr);
273
274 /* Next step: allocate and store a driver object. */
275
276 new = malloc(sizeof(struct drvdb_ent), M_DEVBUF, M_NOWAIT);
277 if (new == NULL)
278 return (ENOMEM);
279
280 dobj = malloc(sizeof(device_object), M_DEVBUF, M_NOWAIT|M_ZERO);
281 if (dobj == NULL) {
280 drv = malloc(sizeof(driver_object), M_DEVBUF, M_NOWAIT|M_ZERO);
281 if (drv == NULL) {
282 free (new, M_DEVBUF);
283 return (ENOMEM);
284 }
285
286 /* Allocate a driver extension structure too. */
287
282 free (new, M_DEVBUF);
283 return (ENOMEM);
284 }
285
286 /* Allocate a driver extension structure too. */
287
288 dobj->dro_driverext = malloc(sizeof(driver_extension),
288 drv->dro_driverext = malloc(sizeof(driver_extension),
289 M_DEVBUF, M_NOWAIT|M_ZERO);
290
289 M_DEVBUF, M_NOWAIT|M_ZERO);
290
291 if (dobj->dro_driverext == NULL) {
291 if (drv->dro_driverext == NULL) {
292 free(new, M_DEVBUF);
292 free(new, M_DEVBUF);
293 free(dobj, M_DEVBUF);
293 free(drv, M_DEVBUF);
294 return(ENOMEM);
295 }
296
294 return(ENOMEM);
295 }
296
297 INIT_LIST_HEAD((&dobj->dro_driverext->dre_usrext));
297 INIT_LIST_HEAD((&drv->dro_driverext->dre_usrext));
298
298
299 dobj->dro_driverstart = (void *)img;
300 dobj->dro_driversize = len;
299 drv->dro_driverstart = (void *)img;
300 drv->dro_driversize = len;
301
301
302 dobj->dro_drivername.us_len = strlen(DUMMY_REGISTRY_PATH) * 2;
303 dobj->dro_drivername.us_maxlen = strlen(DUMMY_REGISTRY_PATH) * 2;
304 dobj->dro_drivername.us_buf = NULL;
302 drv->dro_drivername.us_len = strlen(DUMMY_REGISTRY_PATH) * 2;
303 drv->dro_drivername.us_maxlen = strlen(DUMMY_REGISTRY_PATH) * 2;
304 drv->dro_drivername.us_buf = NULL;
305 ndis_ascii_to_unicode(DUMMY_REGISTRY_PATH,
305 ndis_ascii_to_unicode(DUMMY_REGISTRY_PATH,
306 &dobj->dro_drivername.us_buf);
306 &drv->dro_drivername.us_buf);
307
307
308 new->windrv_object = dobj;
308 new->windrv_object = drv;
309
310 /* Now call the DriverEntry() function. */
311
309
310 /* Now call the DriverEntry() function. */
311
312 status = MSCALL2(entry, dobj, &dobj->dro_drivername);
312 status = MSCALL2(entry, drv, &drv->dro_drivername);
313
314 if (status != STATUS_SUCCESS) {
313
314 if (status != STATUS_SUCCESS) {
315 free(dobj->dro_drivername.us_buf, M_DEVBUF);
316 free(dobj, M_DEVBUF);
315 free(drv->dro_drivername.us_buf, M_DEVBUF);
316 free(drv, M_DEVBUF);
317 free(new, M_DEVBUF);
318 return(ENODEV);
319 }
320
321 mtx_lock(&drvdb_mtx);
322 STAILQ_INSERT_HEAD(&drvdb_head, new, link);
323 mtx_unlock(&drvdb_mtx);
324

--- 161 unchanged lines hidden ---
317 free(new, M_DEVBUF);
318 return(ENODEV);
319 }
320
321 mtx_lock(&drvdb_mtx);
322 STAILQ_INSERT_HEAD(&drvdb_head, new, link);
323 mtx_unlock(&drvdb_mtx);
324

--- 161 unchanged lines hidden ---