NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
    loader: pxe receive cleanup
    9475 libefi: Do not return only if ReceiveFilter
    installboot: should support efi system partition
    8931 boot1.efi: scan all display modes rather than
    loader: spinconsole updates
    loader: gfx experiment to try GOP Blt() function.
    sha1 build test
    loader: add sha1 hash calculation
    common/sha1: update for loader build
    loader: biosdisk rework
    uts: 32-bit kernel FB needs mapping in low memory
    uts: add diag-device
    uts: boot console mirror with diag-device
    uts: enable very early console on ttya
    kmdb: add diag-device as input/output device
    uts: test VGA memory exclusion from mapping
    uts: clear boot mapping and protect boot pages test
    uts: add dboot map debug printf
    uts: need to release FB pages in release_bootstrap()
    uts: add screenmap ioctl
    uts: update sys/queue.h
    loader: add illumos uts/common to include path
    loader: tem/gfx font cleanup
    loader: vbe checks
    uts: gfx_private set KD_TEXT when KD_RESETTEXT is
    uts: gfx 8-bit update
    loader: gfx 8-bit fix
    loader: always set media size from partition.
    uts: MB2 support for 32-bit kernel
    loader: x86 should have tem 80x25
    uts: x86 should have tem 80x25
    uts: font update
    loader: font update
    uts: tem attributes
    loader: tem.c comment added
    uts: use font module
    loader: add font module
    loader: build rules for new font setup
    uts: gfx_private update for new font structure
    uts: early boot update for new font structure
    uts: font update
    uts: font build rules update for new fonts
    uts: tem update to new font structure
    loader: module.c needs to include tem_impl.h
    uts: gfx_private 8x16 font rework
    uts: make font_lookup public
    loader: font rework
    uts: font rework
    9259 libefi: efi_alloc_and_read should check for PMBR
    uts: tem utf-8 support
    loader: implement tem utf-8 support
    loader: tem should be able to display UTF-8
    7784 uts: console input should support utf-8
    7796 uts: ldterm default to utf-8
    uts: do not reset serial console
    uts: set up colors even if tem is not console
    uts: add type for early boot properties
    uts: gfx_private experiment with drm and vga
    uts: gfx_private should use setmode drm callback.
    uts: identify FB types and set up gfx_private based
    loader: replace gop and vesa with framebuffer
    uts: boot needs simple tem to support mdb
    uts: boot_keyboard should emit esc sequences for
    uts: gfx_private FB showuld be written by line
    kmdb: set terminal window size
    uts: gfx_private needs to keep track of early boot FB
    pnglite: move pnglite to usr/src/common
    loader: gfx_fb
    ficl-sys: add gfx primitives
    loader: add illumos.png logo
    ficl: add fb-putimage
    loader: add png support
    loader: add alpha blending for gfx_fb
    loader: use term-drawrect for menu frame
    ficl: add simple gfx words
    uts: provide fb_info via fbgattr dev_specific array.
    uts: gfx_private add alpha blending
    uts: update sys/ascii.h
    uts: tem OSC support (incomplete)
    uts: implement env module support and use data from
    uts: tem get colors from early boot data
    loader: use crc32 from libstand (libz)
    loader: optimize for size
    loader: pass tem info to the environment
    loader: import tem for loader console
    loader: UEFI loader needs to set ISADIR based on
    loader: need UEFI32 support
    8918 loader.efi: add vesa edid support
    uts: tem_safe_pix_clear_prom_output() should only
    uts: tem_safe_pix_clear_entire_screen() should use
    uts: tem_safe_check_first_time() should query cursor
    uts: tem implement cls callback & visual_io v4
    uts: gfx_vgatext use block cursor for vgatext
    uts: gfx_private implement cls callback & visual_io
    uts: gfx_private bitmap framebuffer implementation
    uts: early start frame buffer console support
    uts: font functions should check the input char
    uts: font rendering should support 16/24/32bit depths
    uts: use smallest font as fallback default.
    uts: update terminal dimensions based on selected
    7834 uts: vgatext should use gfx_private
    uts: add spacing property to 8859-1.bdf
    terminfo: add underline for sun-color
    terminfo: sun-color has 16 colors
    uts: add font load callback type
    loader: do not repeat int13 calls with error 0x20 and
    8905 loader: add skein/edonr support
    8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Revert "NEX-16819 loader UEFI support"
This reverts commit ec06b9fc617b99234e538bf2e7e4d02a24993e0c.
Reverting due to failures in the zfs-tests and the sharefs-tests
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
    loader: pxe receive cleanup
    9475 libefi: Do not return only if ReceiveFilter
    installboot: should support efi system partition
    8931 boot1.efi: scan all display modes rather than
    loader: spinconsole updates
    loader: gfx experiment to try GOP Blt() function.
    sha1 build test
    loader: add sha1 hash calculation
    common/sha1: update for loader build
    loader: biosdisk rework
    uts: 32-bit kernel FB needs mapping in low memory
    uts: add diag-device
    uts: boot console mirror with diag-device
    uts: enable very early console on ttya
    kmdb: add diag-device as input/output device
    uts: test VGA memory exclusion from mapping
    uts: clear boot mapping and protect boot pages test
    uts: add dboot map debug printf
    uts: need to release FB pages in release_bootstrap()
    uts: add screenmap ioctl
    uts: update sys/queue.h
    loader: add illumos uts/common to include path
    loader: tem/gfx font cleanup
    loader: vbe checks
    uts: gfx_private set KD_TEXT when KD_RESETTEXT is
    uts: gfx 8-bit update
    loader: gfx 8-bit fix
    loader: always set media size from partition.
    uts: MB2 support for 32-bit kernel
    loader: x86 should have tem 80x25
    uts: x86 should have tem 80x25
    uts: font update
    loader: font update
    uts: tem attributes
    loader: tem.c comment added
    uts: use font module
    loader: add font module
    loader: build rules for new font setup
    uts: gfx_private update for new font structure
    uts: early boot update for new font structure
    uts: font update
    uts: font build rules update for new fonts
    uts: tem update to new font structure
    loader: module.c needs to include tem_impl.h
    uts: gfx_private 8x16 font rework
    uts: make font_lookup public
    loader: font rework
    uts: font rework
    libefi: efi_alloc_and_read should check for PMBR
    uts: tem utf-8 support
    loader: implement tem utf-8 support
    loader: tem should be able to display UTF-8
    7784 uts: console input should support utf-8
    7796 uts: ldterm default to utf-8
    uts: do not reset serial console
    uts: set up colors even if tem is not console
    uts: add type for early boot properties
    uts: gfx_private experiment with drm and vga
    uts: gfx_private should use setmode drm callback.
    uts: identify FB types and set up gfx_private based
    loader: replace gop and vesa with framebuffer
    uts: boot needs simple tem to support mdb
    uts: boot_keyboard should emit esc sequences for
    uts: gfx_private FB showuld be written by line
    kmdb: set terminal window size
    uts: gfx_private needs to keep track of early boot FB
    pnglite: move pnglite to usr/src/common
    loader: gfx_fb
    ficl-sys: add gfx primitives
    loader: add illumos.png logo
    ficl: add fb-putimage
    loader: add png support
    loader: add alpha blending for gfx_fb
    loader: use term-drawrect for menu frame
    ficl: add simple gfx words
    uts: provide fb_info via fbgattr dev_specific array.
    uts: gfx_private add alpha blending
    uts: update sys/ascii.h
    uts: tem OSC support (incomplete)
    uts: implement env module support and use data from
    uts: tem get colors from early boot data
    loader: use crc32 from libstand (libz)
    loader: optimize for size
    loader: pass tem info to the environment
    loader: import tem for loader console
    loader: UEFI loader needs to set ISADIR based on
    loader: need UEFI32 support
    8918 loader.efi: add vesa edid support
    uts: tem_safe_pix_clear_prom_output() should only
    uts: tem_safe_pix_clear_entire_screen() should use
    uts: tem_safe_check_first_time() should query cursor
    uts: tem implement cls callback & visual_io v4
    uts: gfx_vgatext use block cursor for vgatext
    uts: gfx_private implement cls callback & visual_io
    uts: gfx_private bitmap framebuffer implementation
    uts: early start frame buffer console support
    uts: font functions should check the input char
    uts: font rendering should support 16/24/32bit depths
    uts: use smallest font as fallback default.
    uts: update terminal dimensions based on selected
    7834 uts: vgatext should use gfx_private
    uts: add spacing property to 8859-1.bdf
    terminfo: add underline for sun-color
    terminfo: sun-color has 16 colors
    uts: add font load callback type
    loader: do not repeat int13 calls with error 0x20 and
    8905 loader: add skein/edonr support
    8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
 123         mutex_destroy(&drm_inst_list_lock);
 124         return (0);
 125 }
 126 
 127 int
 128 _info(struct modinfo *modinfop)
 129 {
 130         return (mod_info(&modlinkage, modinfop));
 131 }
 132 
 133 void *
 134 drm_supp_register(dev_info_t *dip, drm_device_t *dp)
 135 {
 136         int             error;
 137         char    buf[80];
 138         int             instance = ddi_get_instance(dip);
 139         ddi_acc_handle_t        pci_cfg_handle;
 140         agp_master_softc_t      *agpm;
 141         drm_inst_state_t        *mstate;
 142         drm_inst_list_t         *entry;
 143         gfxp_vgatext_softc_ptr_t gfxp;
 144         struct dev_ops  *devop;
 145 
 146         ASSERT(dip != NULL);
 147 
 148         entry = drm_supp_alloc_drv_entry(dip);
 149         if (entry == NULL) {
 150                 cmn_err(CE_WARN, "drm_supp_register: failed to get softstate");
 151                 return (NULL);
 152         }
 153         mstate = &entry->disl_state;
 154 
 155         /*
 156          * DRM drivers are required to use common cb_ops
 157          */
 158         devop = ddi_get_driver(dip);
 159         if (devop->devo_cb_ops != &drm_cb_ops) {
 160                 devop->devo_cb_ops = &drm_cb_ops;
 161         }
 162 
 163         /* Generic graphics initialization */
 164         gfxp = gfxp_vgatext_softc_alloc();
 165         error = gfxp_vgatext_attach(dip, DDI_ATTACH, gfxp);
 166         if (error != DDI_SUCCESS) {
 167                 DRM_ERROR("drm_supp_regiter: failed to init gfx");
 168                 goto exit1;
 169         }
 170 
 171         /* create a minor node for common graphics ops */
 172         (void) sprintf(buf, "%s%d", GFX_NAME, instance);
 173         error = ddi_create_minor_node(dip, buf, S_IFCHR,
 174             INST2NODE0(instance), DDI_NT_DISPLAY, NULL);
 175         if (error != DDI_SUCCESS) {
 176                 DRM_ERROR("drm_supp_regiter: "
 177                     "failed to create minor node for gfx");
 178                 goto exit2;
 179         }
 180 
 181         /* setup mapping for later PCI config space access */
 182         error = pci_config_setup(dip, &pci_cfg_handle);
 183         if (error != DDI_SUCCESS) {
 184                 DRM_ERROR("drm_supp_regiter: "
 185                     "PCI configuration space setup failed");
 207         mstate->mis_cfg_hdl = pci_cfg_handle;
 208         mstate->mis_devp = dp;
 209         mutex_exit(&mstate->mis_lock);
 210 
 211         /* create minor node for DRM access */
 212         (void) sprintf(buf, "%s%d", DRM_DEVNODE, instance);
 213         if (ddi_create_minor_node(dip, buf, S_IFCHR,
 214             INST2NODE2(instance), DDI_NT_DISPLAY_DRM, 0)) {
 215                 DRM_ERROR("supp_regiter: faled to create minor node for drm");
 216                 goto exit4;
 217         }
 218 
 219         return ((void *)mstate);
 220 
 221 exit4:
 222         if ((dp->driver->use_agp) && agpm)
 223                 agpmaster_detach(&agpm);
 224 exit3:
 225         pci_config_teardown(&pci_cfg_handle);
 226 exit2:
 227         (void) gfxp_vgatext_detach(dip, DDI_DETACH, gfxp);
 228 exit1:
 229         gfxp_vgatext_softc_free(gfxp);
 230         drm_supp_free_drv_entry(dip);
 231         ddi_remove_minor_node(dip, NULL);
 232 
 233         return (NULL);
 234 }
 235 
 236 
 237 int
 238 drm_supp_unregister(void *handle)
 239 {
 240         drm_inst_list_t         *list;
 241         drm_inst_state_t        *mstate;
 242 
 243         list = (drm_inst_list_t *)handle;
 244         mstate = &list->disl_state;
 245         mutex_enter(&mstate->mis_lock);
 246 
 247         /* AGP master detach */
 248         if (mstate->mis_agpm != NULL)
 249                 agpmaster_detach(&mstate->mis_agpm);
 250 
 251         /* free PCI config access handle */
 252         if (mstate->mis_cfg_hdl)
 253                 pci_config_teardown(&mstate->mis_cfg_hdl);
 254 
 255         /* graphics misc module detach */
 256         if (mstate->mis_gfxp) {
 257                 (void) gfxp_vgatext_detach(mstate->mis_dip, DDI_DETACH,
 258                     mstate->mis_gfxp);
 259                 gfxp_vgatext_softc_free(mstate->mis_gfxp);
 260         }
 261 
 262         mstate->mis_devp = NULL;
 263 
 264         /* remove all minor nodes */
 265         ddi_remove_minor_node(mstate->mis_dip, NULL);
 266         mutex_exit(&mstate->mis_lock);
 267         drm_supp_free_drv_entry(mstate->mis_dip);
 268 
 269         return (DDI_SUCCESS);
 270 }
 271 
 272 
 273 /*ARGSUSED*/
 274 static int
 275 drm_sun_open(dev_t *devp, int flag, int otyp, cred_t *credp)
 276 {
 277         drm_inst_state_t        *mstate;
 278         drm_cminor_t    *mp, *newp;
 279         drm_device_t    *dp;
 431         drm_file_t              *fpriv;
 432         minor_t         minor;
 433         int             retval;
 434         int             nr;
 435 
 436         if (cmd == VIS_GETIDENTIFIER) {
 437                 if (ddi_copyout(&text_ident, (void *)arg,
 438                     sizeof (struct vis_identifier), mode))
 439                         return (EFAULT);
 440         }
 441 
 442         mstate = drm_sup_devt_to_state(dev);
 443         if (mstate == NULL) {
 444                 return (EIO);
 445         }
 446 
 447         minor = DEV2MINOR(dev);
 448         ASSERT(minor <= MAX_CLONE_MINOR);
 449         switch (minor) {
 450         case GFX_MINOR:
 451                 retval = gfxp_vgatext_ioctl(dev, cmd, arg,
 452                     mode, credp, rvalp, mstate->mis_gfxp);
 453                 return (retval);
 454 
 455         case AGPMASTER_MINOR:
 456                 retval = agpmaster_ioctl(dev, cmd, arg, mode,
 457                     credp, rvalp, mstate->mis_agpm);
 458                 return (retval);
 459 
 460         case DRM_MINOR:
 461         default:        /* DRM cloning minor nodes */
 462                 break;
 463         }
 464 
 465         dp = mstate->mis_devp;
 466         ASSERT(dp != NULL);
 467 
 468         nr = DRM_IOCTL_NR(cmd);
 469         ioctl = &drm_ioctls[nr];
 470         atomic_inc_32(&dp->counts[_DRM_STAT_IOCTLS]);
 471 
 527         int                     ret;
 528 
 529         static ddi_device_acc_attr_t dev_attr = {
 530                 DDI_DEVICE_ATTR_V0,
 531                 DDI_NEVERSWAP_ACC,
 532                 DDI_STRICTORDER_ACC,
 533         };
 534         static ddi_device_acc_attr_t gem_dev_attr = {
 535                 DDI_DEVICE_ATTR_V0,
 536                 DDI_NEVERSWAP_ACC,
 537                 DDI_MERGING_OK_ACC
 538         };
 539 
 540         mstate = drm_sup_devt_to_state(dev);
 541         if (mstate == NULL)
 542                 return (ENXIO);
 543 
 544         minor = DEV2MINOR(dev);
 545         switch (minor) {
 546         case GFX_MINOR:
 547                 ret = gfxp_vgatext_devmap(dev, dhp, offset, len, maplen, model,
 548                     mstate->mis_gfxp);
 549                 return (ret);
 550 
 551         case AGPMASTER_MINOR:
 552                 return (ENOTSUP);
 553 
 554         case DRM_MINOR:
 555                 break;
 556 
 557         default:
 558                 /* DRM cloning nodes */
 559                 if (minor > MAX_CLONE_MINOR)
 560                         return (EBADF);
 561                 break;
 562         }
 563 
 564 
 565         dp = mstate->mis_devp;
 566         if (dp == NULL) {
 567                 DRM_ERROR("drm_sun_devmap: NULL soft state");
 | 
 123         mutex_destroy(&drm_inst_list_lock);
 124         return (0);
 125 }
 126 
 127 int
 128 _info(struct modinfo *modinfop)
 129 {
 130         return (mod_info(&modlinkage, modinfop));
 131 }
 132 
 133 void *
 134 drm_supp_register(dev_info_t *dip, drm_device_t *dp)
 135 {
 136         int             error;
 137         char    buf[80];
 138         int             instance = ddi_get_instance(dip);
 139         ddi_acc_handle_t        pci_cfg_handle;
 140         agp_master_softc_t      *agpm;
 141         drm_inst_state_t        *mstate;
 142         drm_inst_list_t         *entry;
 143         gfxp_fb_softc_ptr_t     gfxp;
 144         struct dev_ops  *devop;
 145 
 146         ASSERT(dip != NULL);
 147 
 148         entry = drm_supp_alloc_drv_entry(dip);
 149         if (entry == NULL) {
 150                 cmn_err(CE_WARN, "drm_supp_register: failed to get softstate");
 151                 return (NULL);
 152         }
 153         mstate = &entry->disl_state;
 154 
 155         /*
 156          * DRM drivers are required to use common cb_ops
 157          */
 158         devop = ddi_get_driver(dip);
 159         if (devop->devo_cb_ops != &drm_cb_ops) {
 160                 devop->devo_cb_ops = &drm_cb_ops;
 161         }
 162 
 163         /* Generic graphics initialization */
 164         gfxp = gfxp_fb_softc_alloc();
 165         error = gfxp_fb_attach(dip, DDI_ATTACH, gfxp);
 166         if (error != DDI_SUCCESS) {
 167                 DRM_ERROR("drm_supp_regiter: failed to init gfx");
 168                 goto exit1;
 169         }
 170 
 171         /* create a minor node for common graphics ops */
 172         (void) sprintf(buf, "%s%d", GFX_NAME, instance);
 173         error = ddi_create_minor_node(dip, buf, S_IFCHR,
 174             INST2NODE0(instance), DDI_NT_DISPLAY, NULL);
 175         if (error != DDI_SUCCESS) {
 176                 DRM_ERROR("drm_supp_regiter: "
 177                     "failed to create minor node for gfx");
 178                 goto exit2;
 179         }
 180 
 181         /* setup mapping for later PCI config space access */
 182         error = pci_config_setup(dip, &pci_cfg_handle);
 183         if (error != DDI_SUCCESS) {
 184                 DRM_ERROR("drm_supp_regiter: "
 185                     "PCI configuration space setup failed");
 207         mstate->mis_cfg_hdl = pci_cfg_handle;
 208         mstate->mis_devp = dp;
 209         mutex_exit(&mstate->mis_lock);
 210 
 211         /* create minor node for DRM access */
 212         (void) sprintf(buf, "%s%d", DRM_DEVNODE, instance);
 213         if (ddi_create_minor_node(dip, buf, S_IFCHR,
 214             INST2NODE2(instance), DDI_NT_DISPLAY_DRM, 0)) {
 215                 DRM_ERROR("supp_regiter: faled to create minor node for drm");
 216                 goto exit4;
 217         }
 218 
 219         return ((void *)mstate);
 220 
 221 exit4:
 222         if ((dp->driver->use_agp) && agpm)
 223                 agpmaster_detach(&agpm);
 224 exit3:
 225         pci_config_teardown(&pci_cfg_handle);
 226 exit2:
 227         (void) gfxp_fb_detach(dip, DDI_DETACH, gfxp);
 228 exit1:
 229         gfxp_fb_softc_free(gfxp);
 230         drm_supp_free_drv_entry(dip);
 231         ddi_remove_minor_node(dip, NULL);
 232 
 233         return (NULL);
 234 }
 235 
 236 
 237 int
 238 drm_supp_unregister(void *handle)
 239 {
 240         drm_inst_list_t         *list;
 241         drm_inst_state_t        *mstate;
 242 
 243         list = (drm_inst_list_t *)handle;
 244         mstate = &list->disl_state;
 245         mutex_enter(&mstate->mis_lock);
 246 
 247         /* AGP master detach */
 248         if (mstate->mis_agpm != NULL)
 249                 agpmaster_detach(&mstate->mis_agpm);
 250 
 251         /* free PCI config access handle */
 252         if (mstate->mis_cfg_hdl)
 253                 pci_config_teardown(&mstate->mis_cfg_hdl);
 254 
 255         /* graphics misc module detach */
 256         if (mstate->mis_gfxp) {
 257                 (void) gfxp_fb_detach(mstate->mis_dip, DDI_DETACH,
 258                     mstate->mis_gfxp);
 259                 gfxp_fb_softc_free(mstate->mis_gfxp);
 260         }
 261 
 262         mstate->mis_devp = NULL;
 263 
 264         /* remove all minor nodes */
 265         ddi_remove_minor_node(mstate->mis_dip, NULL);
 266         mutex_exit(&mstate->mis_lock);
 267         drm_supp_free_drv_entry(mstate->mis_dip);
 268 
 269         return (DDI_SUCCESS);
 270 }
 271 
 272 
 273 /*ARGSUSED*/
 274 static int
 275 drm_sun_open(dev_t *devp, int flag, int otyp, cred_t *credp)
 276 {
 277         drm_inst_state_t        *mstate;
 278         drm_cminor_t    *mp, *newp;
 279         drm_device_t    *dp;
 431         drm_file_t              *fpriv;
 432         minor_t         minor;
 433         int             retval;
 434         int             nr;
 435 
 436         if (cmd == VIS_GETIDENTIFIER) {
 437                 if (ddi_copyout(&text_ident, (void *)arg,
 438                     sizeof (struct vis_identifier), mode))
 439                         return (EFAULT);
 440         }
 441 
 442         mstate = drm_sup_devt_to_state(dev);
 443         if (mstate == NULL) {
 444                 return (EIO);
 445         }
 446 
 447         minor = DEV2MINOR(dev);
 448         ASSERT(minor <= MAX_CLONE_MINOR);
 449         switch (minor) {
 450         case GFX_MINOR:
 451                 retval = gfxp_fb_ioctl(dev, cmd, arg,
 452                     mode, credp, rvalp, mstate->mis_gfxp);
 453                 return (retval);
 454 
 455         case AGPMASTER_MINOR:
 456                 retval = agpmaster_ioctl(dev, cmd, arg, mode,
 457                     credp, rvalp, mstate->mis_agpm);
 458                 return (retval);
 459 
 460         case DRM_MINOR:
 461         default:        /* DRM cloning minor nodes */
 462                 break;
 463         }
 464 
 465         dp = mstate->mis_devp;
 466         ASSERT(dp != NULL);
 467 
 468         nr = DRM_IOCTL_NR(cmd);
 469         ioctl = &drm_ioctls[nr];
 470         atomic_inc_32(&dp->counts[_DRM_STAT_IOCTLS]);
 471 
 527         int                     ret;
 528 
 529         static ddi_device_acc_attr_t dev_attr = {
 530                 DDI_DEVICE_ATTR_V0,
 531                 DDI_NEVERSWAP_ACC,
 532                 DDI_STRICTORDER_ACC,
 533         };
 534         static ddi_device_acc_attr_t gem_dev_attr = {
 535                 DDI_DEVICE_ATTR_V0,
 536                 DDI_NEVERSWAP_ACC,
 537                 DDI_MERGING_OK_ACC
 538         };
 539 
 540         mstate = drm_sup_devt_to_state(dev);
 541         if (mstate == NULL)
 542                 return (ENXIO);
 543 
 544         minor = DEV2MINOR(dev);
 545         switch (minor) {
 546         case GFX_MINOR:
 547                 ret = gfxp_fb_devmap(dev, dhp, offset, len, maplen, model,
 548                     mstate->mis_gfxp);
 549                 return (ret);
 550 
 551         case AGPMASTER_MINOR:
 552                 return (ENOTSUP);
 553 
 554         case DRM_MINOR:
 555                 break;
 556 
 557         default:
 558                 /* DRM cloning nodes */
 559                 if (minor > MAX_CLONE_MINOR)
 560                         return (EBADF);
 561                 break;
 562         }
 563 
 564 
 565         dp = mstate->mis_devp;
 566         if (dp == NULL) {
 567                 DRM_ERROR("drm_sun_devmap: NULL soft state");
 |