Print this page
NEX-17521 Unable to install Nexentastor on Lenovo SR650 platform
8702 PCI addresses with physaddr > 0xffffffff can't be mapped in
8703 pci/npe DDI_CTLOPS_REGSIZE should be 64-bit aware
8704 want OFF_MAX in the kernel
8705 unsupported 64-bit prefetch memory on pci-pci bridge
Contributed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Albert Lee <trisk@forkgnu.org>
9550 Create hub symlinks for xhci devices
Contributed by: Alexander Pyhalov <apyhalov@gmail.com>
Reviewed by: Andy Stormont <astormont@racktopsystems.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/devfsadm/usb_link.c
          +++ new/usr/src/cmd/devfsadm/usb_link.c
↓ open down ↓ 53 lines elided ↑ open up ↑
  54   54          { "usb", NULL, "hwarc", DRV_EXACT,
  55   55                                                  ILEVEL_0, usb_process },
  56   56          { "usb", NULL, "wusb_ca",       DRV_EXACT,
  57   57                                                  ILEVEL_0, usb_process },
  58   58          { "usb", DDI_NT_NEXUS, "hubd",  DRV_EXACT|TYPE_EXACT,
  59   59                                                  ILEVEL_0, usb_process },
  60   60          { "usb", DDI_NT_NEXUS, "ohci",  DRV_EXACT|TYPE_EXACT,
  61   61                                                  ILEVEL_0, usb_process },
  62   62          { "usb", DDI_NT_NEXUS, "ehci",  DRV_EXACT|TYPE_EXACT,
  63   63                                                  ILEVEL_0, usb_process },
       64 +        { "usb", DDI_NT_NEXUS, "xhci",  DRV_EXACT|TYPE_EXACT,
       65 +                                                ILEVEL_0, usb_process },
  64   66          { "usb", DDI_NT_SCSI_NEXUS, "scsa2usb", DRV_EXACT|TYPE_EXACT,
  65   67                                                  ILEVEL_0, usb_process },
  66   68          { "usb", DDI_NT_UGEN, "scsa2usb",       DRV_EXACT|TYPE_EXACT,
  67   69                                                  ILEVEL_0, usb_process },
  68   70          { "usb", DDI_NT_NEXUS, "uhci",  DRV_EXACT|TYPE_EXACT,
  69   71                                                  ILEVEL_0, usb_process },
  70   72          { "usb", DDI_NT_UGEN, "ugen",   DRV_EXACT|TYPE_EXACT,
  71   73                                                  ILEVEL_0, usb_process },
  72   74          { "usb", DDI_NT_NEXUS, "usb_mid", DRV_EXACT|TYPE_EXACT,
  73   75                                                  ILEVEL_0, usb_process },
↓ open down ↓ 108 lines elided ↑ open up ↑
 182  184  }
 183  185  
 184  186  int
 185  187  minor_fini(void)
 186  188  {
 187  189          devfsadm_print(debug_mid, "usb_link: minor_fini\n");
 188  190          return (DEVFSADM_SUCCESS);
 189  191  }
 190  192  
 191  193  typedef enum {
 192      -        DRIVER_HUBD     = 0,
 193      -        DRIVER_OHCI     = 1,
 194      -        DRIVER_EHCI     = 2,
 195      -        DRIVER_UHCI     = 3,
 196      -        DRIVER_USB_AC   = 4,
 197      -        DRIVER_USB_AS   = 5,
 198      -        DRIVER_HID      = 6,
 199      -        DRIVER_USB_MID  = 7,
 200      -        DRIVER_DDIVS_USBC = 8,
 201      -        DRIVER_SCSA2USB = 9,
 202      -        DRIVER_USBPRN   = 10,
 203      -        DRIVER_UGEN     = 11,
 204      -        DRIVER_VIDEO    = 12,
 205      -        DRIVER_HWAHC    = 13,
 206      -        DRIVER_HWARC    = 14,
 207      -        DRIVER_WUSB_CA  = 15,
 208      -        DRIVER_UNKNOWN  = 16
      194 +        DRIVER_HUBD,
      195 +        DRIVER_OHCI,
      196 +        DRIVER_EHCI,
      197 +        DRIVER_UHCI,
      198 +        DRIVER_XHCI,
      199 +        DRIVER_USB_AC,
      200 +        DRIVER_USB_AS,
      201 +        DRIVER_HID,
      202 +        DRIVER_USB_MID,
      203 +        DRIVER_DDIVS_USBC,
      204 +        DRIVER_SCSA2USB,
      205 +        DRIVER_USBPRN,
      206 +        DRIVER_UGEN,
      207 +        DRIVER_VIDEO,
      208 +        DRIVER_HWAHC,
      209 +        DRIVER_HWARC,
      210 +        DRIVER_WUSB_CA,
      211 +        DRIVER_UNKNOWN
 209  212  } driver_defs_t;
 210  213  
 211  214  typedef struct {
 212  215          char    *driver_name;
 213      -        int     index;
      216 +        driver_defs_t   index;
 214  217  } driver_name_table_entry_t;
 215  218  
 216  219  driver_name_table_entry_t driver_name_table[] = {
 217  220          { "hubd",       DRIVER_HUBD },
 218  221          { "ohci",       DRIVER_OHCI },
 219  222          { "ehci",       DRIVER_EHCI },
 220  223          { "uhci",       DRIVER_UHCI },
      224 +        { "xhci",       DRIVER_XHCI },
 221  225          { "usb_ac",     DRIVER_USB_AC },
 222  226          { "usb_as",     DRIVER_USB_AS },
 223  227          { "hid",        DRIVER_HID },
 224  228          { "usb_mid",    DRIVER_USB_MID },
 225  229          { "ddivs_usbc", DRIVER_DDIVS_USBC },
 226  230          { "scsa2usb",   DRIVER_SCSA2USB },
 227  231          { "usbprn",     DRIVER_USBPRN },
 228  232          { "ugen",       DRIVER_UGEN },
 229  233          { "usbvc",      DRIVER_VIDEO },
 230  234          { "hwahc",      DRIVER_HWAHC },
↓ open down ↓ 6 lines elided ↑ open up ↑
 237  241   * This function is called for every usb minor node.
 238  242   * Calls enumerate to assign a logical usb id, and then
 239  243   * devfsadm_mklink to make the link.
 240  244   */
 241  245  static int
 242  246  usb_process(di_minor_t minor, di_node_t node)
 243  247  {
 244  248          devfsadm_enumerate_t rules[1];
 245  249          char *l_path, *p_path, *buf, *devfspath;
 246  250          char *minor_nm, *drvr_nm, *name = (char *)NULL;
 247      -        int i, index;
      251 +        int i;
      252 +        driver_defs_t index;
 248  253          int flags = 0;
 249  254          int create_secondary_link = 0;
 250  255  
 251  256          minor_nm = di_minor_name(minor);
 252  257          drvr_nm = di_driver_name(node);
 253  258          if ((minor_nm == NULL) || (drvr_nm == NULL)) {
 254  259                  return (DEVFSADM_CONTINUE);
 255  260          }
 256  261  
 257  262          devfsadm_print(debug_mid, "usb_process: minor=%s node=%s type=%s\n",
↓ open down ↓ 42 lines elided ↑ open up ↑
 300  305                  free(p_path);
 301  306                  return (DEVFSADM_CONTINUE);
 302  307          }
 303  308  
 304  309          /* Figure out which rules to apply */
 305  310          switch (index) {
 306  311          case DRIVER_HUBD:
 307  312          case DRIVER_OHCI:
 308  313          case DRIVER_EHCI:
 309  314          case DRIVER_UHCI:
      315 +        case DRIVER_XHCI:
 310  316                  rules[0] = hub_rules[0];        /* For HUBs */
 311  317                  name = "hub";
 312  318  
 313  319                  break;
 314  320          case DRIVER_USB_AC:
 315  321                  if (strcmp(minor_nm, "sound,audio") == 0) {
 316  322                          rules[0] = audio_rules[0];
 317  323                          name = "audio";         /* For audio */
 318  324                          create_secondary_link = 1;
 319  325                  } else if (strcmp(minor_nm, "sound,audioctl") == 0) {
↓ open down ↓ 170 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX