Changeset 191 for trunk


Ignore:
Timestamp:
Aug 10, 2017, 11:21:16 PM (8 years ago)
Author:
David Azarewicz
Message:

Misc fixes. NULL pointer fixes.

Location:
trunk/src/os2ahci
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/os2ahci/ReadMe.txt

    r190 r191  
    11AHCI Driver for OS/2 v2.03
    2 
    32
    43Introduction
     
    366365===================
    367366
    368 - Run the included update.cmd,
    369   or copy the driver file, OS2AHCI.ADD, to \OS2\BOOT on your boot disk.
     367- Copy the driver file, OS2AHCI.ADD, to \OS2\BOOT on your boot disk.
    370368
    371369- Add the following line to CONFIG.SYS:
     
    381379   to build this driver.)
    382380 - Open Watcom version 1.9 or later
    383  - The Drv32 kit.
     381 - The Drv32 kit. (You must have a DDK license to use the Drv32 kit.)
    384382
    385383Define DDK, WATCOM, and DRV32KIT in the environment.
     
    391389
    392390v.2.03 15-Jul-2017 - David Azarewicz
    393   Added MSI support.
     391  Added MSI support. PSD 3.23.06 or higher is required for MSI.
    394392
    395393v.2.02 07-Jun-2017 - David Azarewicz
  • trunk/src/os2ahci/ahci.c

    r190 r191  
    692692      if (rc)
    693693      {
    694        dprintf(0,"failed to register interrupt %d\n", ai->irq);
     694        dprintf(0,"failed to register interrupt %d\n", ai->irq);
    695695        return(-1);
    696696      }
     
    14981498  IORB_QUEUE done_queue;
    14991499  IORBH FAR16DATA *vIorb;
    1500   IORBH FAR16DATA *vNext = NULL;
     1500  IORBH FAR16DATA *vNext = FAR16NULL;
    15011501  u8 *port_mmio = port_base(ai, p);
    15021502  u32 irq_stat;
     
    15551555   *        processed after releasing the spinlock.
    15561556   */
    1557   for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != NULL; vIorb = vNext)
     1557  for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    15581558  {
    15591559    IORBH *pIorb = Far16ToFlat(vIorb);
     
    15841584
    15851585  /* complete all IORBs in the done queue */
    1586   for (vIorb = done_queue.vRoot; vIorb != NULL; vIorb = vNext)
     1586  for (vIorb = done_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    15871587  {
    15881588    IORBH *pIorb = Far16ToFlat(vIorb);
  • trunk/src/os2ahci/ctxhook.c

    r184 r191  
    104104  D32ThunkStackTo32();
    105105
    106   vNext = NULL;
     106  vNext = FAR16NULL;
    107107  rearm_ctx_hook = 0;
    108108
     
    131131        /* restart this port */
    132132        port_mmio = port_base(ai, p);
    133         vProblemIorb = NULL;
     133        vProblemIorb = FAR16NULL;
    134134        need_reset = 0;
    135135
     
    140140        DPRINTF(8," PORT_CMD      = 0x%x\n", ccs);
    141141
    142         for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != NULL; vIorb = vNext)
     142        for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    143143        {
    144144          IORBH *pIorb = Far16ToFlat(vIorb);
     
    180180              {
    181181                /* no further analysis -- we're done with this one */
    182                 vProblemIorb = NULL;
     182                vProblemIorb = FAR16NULL;
    183183              }
    184184            }
     
    223223        ai->ports[p].cmd_slot = 0;
    224224
    225         if (vProblemIorb != NULL)
     225        if (vProblemIorb != FAR16NULL)
    226226        {
    227227          IORBH *pProblemIorb = Far16ToFlat(vProblemIorb);
     
    271271
    272272  /* call notification routine on all IORBs which have completed */
    273   for (vIorb = done_queue.vRoot; vIorb != NULL; vIorb = vNext)
     273  for (vIorb = done_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    274274  {
    275275    IORBH *pIorb = Far16ToFlat(vIorb);
     
    339339  D32ThunkStackTo32();
    340340
    341   vNext = NULL;
     341  vNext = FAR16NULL;
    342342  rearm_ctx_hook = 0;
    343343
     
    355355
    356356  /* add ports of active IORBs from the abort queue to ports_to_reset[] */
    357   for (vIorb = abort_queue.vRoot; vIorb != NULL; vIorb = vNext)
     357  for (vIorb = abort_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    358358  {
    359359    IORBH *pIorb = Far16ToFlat(vIorb);
     
    417417
    418418        /* retry or abort all remaining active commands on this port */
    419         for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != NULL; vIorb = vNext)
     419        for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    420420        {
    421421          IORBH *pIorb = Far16ToFlat(vIorb);
     
    448448
    449449  /* complete all aborted IORBs */
    450   for (vIorb = done_queue.vRoot; vIorb != NULL; vIorb = vNext)
     450  for (vIorb = done_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    451451  {
    452452    IORBH *pIorb = Far16ToFlat(vIorb);
  • trunk/src/os2ahci/ioctl.c

    r181 r191  
    6565                         USHORT *d);
    6666
    67 extern IORBH FAR16DATA * __far16 IoctlWakeup16(IORBH FAR16DATA*);
     67extern IORBH FAR16DATA * (__far16 *Far16AdrOfIoctlWakeup16)(IORBH FAR16DATA*);
    6868
    6969/* ------------------------ global/static variables ------------------------ */
     
    175175  ic->iorb.iorbh.RequestControl   = IORB_ASYNC_POST;
    176176  ic->iorb.iorbh.Timeout          = req->timeout;
    177   ic->iorb.iorbh.NotifyAddress    = IoctlWakeup16;
     177  ic->iorb.iorbh.NotifyAddress    = Far16AdrOfIoctlWakeup16;
    178178
    179179  ic->iorb.cSGList = ic->sg_cnt;
  • trunk/src/os2ahci/os2ahci.c

    r190 r191  
    463463
    464464    return(RPDONE);
    465 
    466465  }
    467466  else
     
    500499    switch (ioctl->ioctl.bFunction)
    501500    {
    502 
    503501    case OS2AHCI_IOCTL_GET_DEVLIST:
    504502      return(ioctl_get_devlist(ioctl));
     
    506504    case OS2AHCI_IOCTL_PASSTHROUGH:
    507505      return(ioctl_passthrough(ioctl));
    508 
    509506    }
    510507    break;
     
    592589{
    593590  IORBH FAR16DATA *vIorb;
    594   IORBH FAR16DATA *vNext = NULL;
     591  IORBH FAR16DATA *vNext = FAR16NULL;
    595592
    596593  spin_lock(drv_lock);
    597594
    598   for (vIorb=vFirstIorb; vIorb!=NULL; vIorb=vNext)
     595  for (vIorb=vFirstIorb; vIorb!=FAR16NULL; vIorb=vNext)
    599596  {
    600597    IORBH *pIorb = Far16ToFlat(vIorb);
     
    622619      pIorb->UnitHandle = 0;
    623620      iorb_queue_add(&driver_queue, vIorb, pIorb);
    624 
    625621    }
    626622    else
     
    636632          (ad_infos[a].port_map & (1UL << p)) == 0)
    637633      {
    638 
    639634        /* unit handle outside of the allowed range */
    640635        dprintf(0,"warning: IORB for %d.%d.%d out of range\n", a, p, d);
     
    745740
    746741  /* process driver-level IORBs */
    747   if ((vIorb = driver_queue.vRoot) != NULL)
     742  if ((vIorb = driver_queue.vRoot) != FAR16NULL)
    748743  {
    749744    pIorb = Far16ToFlat(vIorb);
     
    768763    {
    769764      /* send all queued IORBs on this port */
    770       vNext = NULL;
    771       for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != NULL; vIorb = vNext)
     765      vNext = FAR16NULL;
     766      for (vIorb = ai->ports[p].iorb_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext)
    772767      {
    773768        pIorb = Far16ToFlat(vIorb);
     
    904899  AD_INFO *ai = ad_infos + iorb_unit_adapter(pIorb);
    905900  IORBH FAR16DATA *vPtr;
    906   IORBH FAR16DATA *vNext = NULL;
     901  IORBH FAR16DATA *vNext = FAR16NULL;
    907902  int p = iorb_unit_port(pIorb);
    908903  int d = iorb_unit_device(pIorb);
     
    910905  switch (pIorb->CommandModifier)
    911906  {
    912 
    913907  case IOCM_ABORT:
    914908    /* abort all pending commands on specified port and device */
    915909    spin_lock(drv_lock);
    916     for (vPtr = ai->ports[p].iorb_queue.vRoot; vPtr != NULL; vPtr = vNext)
     910    for (vPtr = ai->ports[p].iorb_queue.vRoot; vPtr != FAR16NULL; vPtr = vNext)
    917911    {
    918912      IORBH *pPtr = Far16ToFlat(vPtr);
     
    12711265  switch (pIorb->CommandModifier)
    12721266  {
    1273 
    12741267  case IOCM_EXECUTE_CDB:
    12751268    add_workspace(pIorb)->idempotent = 0;
     
    13031296  {
    13041297    /* append IORB to end of queue */
    1305     pIorb->pNxtIORB = NULL;
    1306 
    1307     if (queue->vRoot == NULL)
     1298    pIorb->pNxtIORB = FAR16NULL;
     1299
     1300    if (queue->vRoot == FAR16NULL)
    13081301    {
    13091302      queue->vRoot = vIorb;
     
    13301323      queue_type = "local";
    13311324      min_debug = 8;
    1332 
    13331325    }
    13341326    else if (queue == &driver_queue)
    13351327    {
    13361328      queue_type = "driver";
    1337 
    13381329    }
    13391330    else if (queue == &abort_queue)
     
    13411332      queue_type = "abort";
    13421333      min_debug = 8;
    1343 
    13441334    }
    13451335    else
     
    13621352{
    13631353  IORBH FAR16DATA *_vIorb;
    1364   IORBH FAR16DATA *_vPrev = NULL;
     1354  IORBH FAR16DATA *_vPrev = FAR16NULL;
    13651355  int found = 0;
    13661356
    1367   for (_vIorb = queue->vRoot; _vIorb != NULL; )
     1357  for (_vIorb = queue->vRoot; _vIorb != FAR16NULL; )
    13681358  {
    13691359    IORBH *_pIorb = Far16ToFlat(_vIorb);
     
    13711361    {
    13721362      /* found the IORB to be removed */
    1373       if (_vPrev != NULL)
     1363      if (_vPrev != FAR16NULL)
    13741364      {
    13751365        ((IORBH*)Far16ToFlat(_vPrev))->pNxtIORB = _pIorb->pNxtIORB;
  • trunk/src/os2ahci/thunk.asm

    r190 r191  
    1010_TEXT16 SEGMENT byte PUBLIC USE16 'CODE'
    1111        assume ds:nothing, es:nothing
    12         public IoctlWakeup16
    1312IoctlWakeup16 Proc far
    1413        jmp     far ptr FLAT:IoctlWakeup32
     
    1615
    1716_TEXT16 ENDS
     17
     18;==========================================================
     19; 32 bit data segment
     20;
     21_DATA     segment dword public use32 'DATA'
     22
     23Far16AdrOfIoctlWakeup16 dw offset _TEXT16:IoctlWakeup16
     24                        dw seg _TEXT16:IoctlWakeup16
     25        public Far16AdrOfIoctlWakeup16
     26
     27_DATA       ends
    1828
    1929;==========================================================
Note: See TracChangeset for help on using the changeset viewer.