- Timestamp:
- Aug 10, 2017, 11:21:16 PM (8 years ago)
- Location:
- trunk/src/os2ahci
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/os2ahci/ReadMe.txt
r190 r191 1 1 AHCI Driver for OS/2 v2.03 2 3 2 4 3 Introduction … … 366 365 =================== 367 366 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. 370 368 371 369 - Add the following line to CONFIG.SYS: … … 381 379 to build this driver.) 382 380 - 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.) 384 382 385 383 Define DDK, WATCOM, and DRV32KIT in the environment. … … 391 389 392 390 v.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. 394 392 395 393 v.2.02 07-Jun-2017 - David Azarewicz -
trunk/src/os2ahci/ahci.c
r190 r191 692 692 if (rc) 693 693 { 694 dprintf(0,"failed to register interrupt %d\n", ai->irq);694 dprintf(0,"failed to register interrupt %d\n", ai->irq); 695 695 return(-1); 696 696 } … … 1498 1498 IORB_QUEUE done_queue; 1499 1499 IORBH FAR16DATA *vIorb; 1500 IORBH FAR16DATA *vNext = NULL;1500 IORBH FAR16DATA *vNext = FAR16NULL; 1501 1501 u8 *port_mmio = port_base(ai, p); 1502 1502 u32 irq_stat; … … 1555 1555 * processed after releasing the spinlock. 1556 1556 */ 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) 1558 1558 { 1559 1559 IORBH *pIorb = Far16ToFlat(vIorb); … … 1584 1584 1585 1585 /* 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) 1587 1587 { 1588 1588 IORBH *pIorb = Far16ToFlat(vIorb); -
trunk/src/os2ahci/ctxhook.c
r184 r191 104 104 D32ThunkStackTo32(); 105 105 106 vNext = NULL;106 vNext = FAR16NULL; 107 107 rearm_ctx_hook = 0; 108 108 … … 131 131 /* restart this port */ 132 132 port_mmio = port_base(ai, p); 133 vProblemIorb = NULL;133 vProblemIorb = FAR16NULL; 134 134 need_reset = 0; 135 135 … … 140 140 DPRINTF(8," PORT_CMD = 0x%x\n", ccs); 141 141 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) 143 143 { 144 144 IORBH *pIorb = Far16ToFlat(vIorb); … … 180 180 { 181 181 /* no further analysis -- we're done with this one */ 182 vProblemIorb = NULL;182 vProblemIorb = FAR16NULL; 183 183 } 184 184 } … … 223 223 ai->ports[p].cmd_slot = 0; 224 224 225 if (vProblemIorb != NULL)225 if (vProblemIorb != FAR16NULL) 226 226 { 227 227 IORBH *pProblemIorb = Far16ToFlat(vProblemIorb); … … 271 271 272 272 /* 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) 274 274 { 275 275 IORBH *pIorb = Far16ToFlat(vIorb); … … 339 339 D32ThunkStackTo32(); 340 340 341 vNext = NULL;341 vNext = FAR16NULL; 342 342 rearm_ctx_hook = 0; 343 343 … … 355 355 356 356 /* 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) 358 358 { 359 359 IORBH *pIorb = Far16ToFlat(vIorb); … … 417 417 418 418 /* 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) 420 420 { 421 421 IORBH *pIorb = Far16ToFlat(vIorb); … … 448 448 449 449 /* complete all aborted IORBs */ 450 for (vIorb = done_queue.vRoot; vIorb != NULL; vIorb = vNext)450 for (vIorb = done_queue.vRoot; vIorb != FAR16NULL; vIorb = vNext) 451 451 { 452 452 IORBH *pIorb = Far16ToFlat(vIorb); -
trunk/src/os2ahci/ioctl.c
r181 r191 65 65 USHORT *d); 66 66 67 extern IORBH FAR16DATA * __far16 IoctlWakeup16(IORBH FAR16DATA*);67 extern IORBH FAR16DATA * (__far16 *Far16AdrOfIoctlWakeup16)(IORBH FAR16DATA*); 68 68 69 69 /* ------------------------ global/static variables ------------------------ */ … … 175 175 ic->iorb.iorbh.RequestControl = IORB_ASYNC_POST; 176 176 ic->iorb.iorbh.Timeout = req->timeout; 177 ic->iorb.iorbh.NotifyAddress = IoctlWakeup16;177 ic->iorb.iorbh.NotifyAddress = Far16AdrOfIoctlWakeup16; 178 178 179 179 ic->iorb.cSGList = ic->sg_cnt; -
trunk/src/os2ahci/os2ahci.c
r190 r191 463 463 464 464 return(RPDONE); 465 466 465 } 467 466 else … … 500 499 switch (ioctl->ioctl.bFunction) 501 500 { 502 503 501 case OS2AHCI_IOCTL_GET_DEVLIST: 504 502 return(ioctl_get_devlist(ioctl)); … … 506 504 case OS2AHCI_IOCTL_PASSTHROUGH: 507 505 return(ioctl_passthrough(ioctl)); 508 509 506 } 510 507 break; … … 592 589 { 593 590 IORBH FAR16DATA *vIorb; 594 IORBH FAR16DATA *vNext = NULL;591 IORBH FAR16DATA *vNext = FAR16NULL; 595 592 596 593 spin_lock(drv_lock); 597 594 598 for (vIorb=vFirstIorb; vIorb!= NULL; vIorb=vNext)595 for (vIorb=vFirstIorb; vIorb!=FAR16NULL; vIorb=vNext) 599 596 { 600 597 IORBH *pIorb = Far16ToFlat(vIorb); … … 622 619 pIorb->UnitHandle = 0; 623 620 iorb_queue_add(&driver_queue, vIorb, pIorb); 624 625 621 } 626 622 else … … 636 632 (ad_infos[a].port_map & (1UL << p)) == 0) 637 633 { 638 639 634 /* unit handle outside of the allowed range */ 640 635 dprintf(0,"warning: IORB for %d.%d.%d out of range\n", a, p, d); … … 745 740 746 741 /* process driver-level IORBs */ 747 if ((vIorb = driver_queue.vRoot) != NULL)742 if ((vIorb = driver_queue.vRoot) != FAR16NULL) 748 743 { 749 744 pIorb = Far16ToFlat(vIorb); … … 768 763 { 769 764 /* 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) 772 767 { 773 768 pIorb = Far16ToFlat(vIorb); … … 904 899 AD_INFO *ai = ad_infos + iorb_unit_adapter(pIorb); 905 900 IORBH FAR16DATA *vPtr; 906 IORBH FAR16DATA *vNext = NULL;901 IORBH FAR16DATA *vNext = FAR16NULL; 907 902 int p = iorb_unit_port(pIorb); 908 903 int d = iorb_unit_device(pIorb); … … 910 905 switch (pIorb->CommandModifier) 911 906 { 912 913 907 case IOCM_ABORT: 914 908 /* abort all pending commands on specified port and device */ 915 909 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) 917 911 { 918 912 IORBH *pPtr = Far16ToFlat(vPtr); … … 1271 1265 switch (pIorb->CommandModifier) 1272 1266 { 1273 1274 1267 case IOCM_EXECUTE_CDB: 1275 1268 add_workspace(pIorb)->idempotent = 0; … … 1303 1296 { 1304 1297 /* 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) 1308 1301 { 1309 1302 queue->vRoot = vIorb; … … 1330 1323 queue_type = "local"; 1331 1324 min_debug = 8; 1332 1333 1325 } 1334 1326 else if (queue == &driver_queue) 1335 1327 { 1336 1328 queue_type = "driver"; 1337 1338 1329 } 1339 1330 else if (queue == &abort_queue) … … 1341 1332 queue_type = "abort"; 1342 1333 min_debug = 8; 1343 1344 1334 } 1345 1335 else … … 1362 1352 { 1363 1353 IORBH FAR16DATA *_vIorb; 1364 IORBH FAR16DATA *_vPrev = NULL;1354 IORBH FAR16DATA *_vPrev = FAR16NULL; 1365 1355 int found = 0; 1366 1356 1367 for (_vIorb = queue->vRoot; _vIorb != NULL; )1357 for (_vIorb = queue->vRoot; _vIorb != FAR16NULL; ) 1368 1358 { 1369 1359 IORBH *_pIorb = Far16ToFlat(_vIorb); … … 1371 1361 { 1372 1362 /* found the IORB to be removed */ 1373 if (_vPrev != NULL)1363 if (_vPrev != FAR16NULL) 1374 1364 { 1375 1365 ((IORBH*)Far16ToFlat(_vPrev))->pNxtIORB = _pIorb->pNxtIORB; -
trunk/src/os2ahci/thunk.asm
r190 r191 10 10 _TEXT16 SEGMENT byte PUBLIC USE16 'CODE' 11 11 assume ds:nothing, es:nothing 12 public IoctlWakeup1613 12 IoctlWakeup16 Proc far 14 13 jmp far ptr FLAT:IoctlWakeup32 … … 16 15 17 16 _TEXT16 ENDS 17 18 ;========================================================== 19 ; 32 bit data segment 20 ; 21 _DATA segment dword public use32 'DATA' 22 23 Far16AdrOfIoctlWakeup16 dw offset _TEXT16:IoctlWakeup16 24 dw seg _TEXT16:IoctlWakeup16 25 public Far16AdrOfIoctlWakeup16 26 27 _DATA ends 18 28 19 29 ;==========================================================
Note:
See TracChangeset
for help on using the changeset viewer.