300 DDI_STRICTORDER_ACC
301 };
302
303 /* DMA access attributes for data: NOT to be byte swapped. */
304 static ddi_device_acc_attr_t data_accattr = {
305 DDI_DEVICE_ATTR_V0,
306 DDI_NEVERSWAP_ACC,
307 DDI_STRICTORDER_ACC
308 };
309
310 DDI_DEFINE_STREAM_OPS(xnf_dev_ops, nulldev, nulldev, xnf_attach, xnf_detach,
311 nodev, NULL, D_MP, NULL, ddi_quiesce_not_supported);
312
313 static struct modldrv xnf_modldrv = {
314 &mod_driverops,
315 "Virtual Ethernet driver",
316 &xnf_dev_ops
317 };
318
319 static struct modlinkage modlinkage = {
320 MODREV_1, &xnf_modldrv, NULL
321 };
322
323 int
324 _init(void)
325 {
326 int r;
327
328 mac_init_ops(&xnf_dev_ops, "xnf");
329 r = mod_install(&modlinkage);
330 if (r != DDI_SUCCESS)
331 mac_fini_ops(&xnf_dev_ops);
332
333 return (r);
334 }
335
336 int
337 _fini(void)
338 {
339 return (EBUSY); /* XXPV should be removable */
340 }
|
300 DDI_STRICTORDER_ACC
301 };
302
303 /* DMA access attributes for data: NOT to be byte swapped. */
304 static ddi_device_acc_attr_t data_accattr = {
305 DDI_DEVICE_ATTR_V0,
306 DDI_NEVERSWAP_ACC,
307 DDI_STRICTORDER_ACC
308 };
309
310 DDI_DEFINE_STREAM_OPS(xnf_dev_ops, nulldev, nulldev, xnf_attach, xnf_detach,
311 nodev, NULL, D_MP, NULL, ddi_quiesce_not_supported);
312
313 static struct modldrv xnf_modldrv = {
314 &mod_driverops,
315 "Virtual Ethernet driver",
316 &xnf_dev_ops
317 };
318
319 static struct modlinkage modlinkage = {
320 MODREV_1, { &xnf_modldrv, NULL }
321 };
322
323 int
324 _init(void)
325 {
326 int r;
327
328 mac_init_ops(&xnf_dev_ops, "xnf");
329 r = mod_install(&modlinkage);
330 if (r != DDI_SUCCESS)
331 mac_fini_ops(&xnf_dev_ops);
332
333 return (r);
334 }
335
336 int
337 _fini(void)
338 {
339 return (EBUSY); /* XXPV should be removable */
340 }
|