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 --- |