Ignore:
Timestamp:
Dec 20, 2016, 9:35:27 PM (9 years ago)
Author:
David Azarewicz
Message:

Fix for sparse port hardware

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/os2ahci/ahci.c

    r184 r185  
    295295    /* more ports in port_map than in HOST_CAP & 0x1f */
    296296    ports = ai->hw_ports;
    297     DPRINTF(1,"implemented port map (0x%x) contains more ports than nr_ports (%d), using nr_ports\n", ai->port_map, ports);
     297    DPRINTF(1,"implemented port map (0x%x) contains more ports than hw_ports (%d), using hw_ports\n", ai->port_map, ports);
    298298    ai->port_map = (1UL << ports) - 1UL;
    299299  }
     
    371371    int p;
    372372
    373     for (p = 0; p < AHCI_MAX_PORTS; p++)
     373    for (p = 0; p <= ai->port_max; p++)
    374374    {
    375375      if (ai->port_map & (1UL << p))
     
    729729   * enough if a previously detected device has problems.
    730730   */
    731   for (p = 0; p < AHCI_MAX_PORTS; p++)
     731  for (p = 0; p <= ai->port_max; p++)
    732732  {
    733733    if (ai->port_map & (1UL << p))
     
    17911791  HDEVICE dh;
    17921792  char dev_name[RM_MAX_PREFIX_LEN+ATA_ID_PROD_LEN+1];
     1793  char *pDevName;
    17931794  static u8 total_dev_cnt;
    17941795
     
    18041805  ai->ports[p].devs[d].removable = (id_buf[ATA_ID_CONFIG] & 0x0080U) != 0;
    18051806  ai->ports[p].devs[d].dev_type  = UIB_TYPE_DISK;
     1807  pDevName = ai->ports[p].devs[d].dev_name;
     1808  strncpy(pDevName, ata_dev_name(id_buf), sizeof(ai->ports[0].devs[0].dev_name));
    18061809
    18071810  if (id_buf[ATA_ID_CONFIG] & 0x8000U)
     
    18471850  adj.AdjType             = ADJ_ADD_UNIT;
    18481851  adj.Add_Unit.ADDHandle  = rm_drvh;
    1849   adj.Add_Unit.UnitHandle = (USHORT) total_dev_cnt;
     1852  adj.Add_Unit.UnitHandle = (USHORT)total_dev_cnt;
    18501853
    18511854  /* create Resource Manager device key string;
     
    18541857  if (ai->ports[p].devs[d].removable)
    18551858  {
    1856     sprintf(dev_name, RM_CD_PREFIX "%s", p, d, ata_dev_name(id_buf));
     1859    sprintf(dev_name, RM_CD_PREFIX "%s", p, d, pDevName);
    18571860  }
    18581861  else
    18591862  {
    1860     sprintf(dev_name, RM_HD_PREFIX "%s", p, d, ata_dev_name(id_buf));
     1863    sprintf(dev_name, RM_HD_PREFIX "%s", p, d, pDevName);
    18611864  }
    18621865
     
    18731876  /* try to detect virtualbox environment to enable a hack for IRQ routing */
    18741877  if (ai == ad_infos && ai->pci_vendor == 0x8086 && ai->pci_device == 0x2829 &&
    1875       !memcmp(ata_dev_name(id_buf), "VBOX HARDDISK", 13))
     1878      !memcmp(pDevName, "VBOX HARDDISK", 13))
    18761879  {
    18771880    /* running inside virtualbox */
Note: See TracChangeset for help on using the changeset viewer.