From f51034cd22759a4ec3a2547bddb3a7169d956eaa Mon Sep 17 00:00:00 2001 From: NicJA Date: Fri, 26 Aug 2011 22:46:27 +0000 Subject: [PATCH] Fix crash from uninitialized list and other errors. Driver loads but makes no noise (the same as CMI8738) git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@40900 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/devs/AHI/Drivers/SB128/driver-init.c | 57 ++++++++------------------ workbench/devs/AHI/Drivers/SB128/pci_aros.c | 15 +++---- 2 files changed, 23 insertions(+), 49 deletions(-) diff --git a/workbench/devs/AHI/Drivers/SB128/driver-init.c b/workbench/devs/AHI/Drivers/SB128/driver-init.c index 52322de1d1..e73f87ac1c 100755 --- a/workbench/devs/AHI/Drivers/SB128/driver-init.c +++ b/workbench/devs/AHI/Drivers/SB128/driver-init.c @@ -15,17 +15,15 @@ All Rights Reserved. */ +#define DEBUG 1 +#include +#define DebugPrintF bug + #include #include #include -#include - -#define DEBUG 1 -#include -#define DebugPrintF bug - #include "library.h" #include "version.h" #include "misc.h" @@ -67,7 +65,9 @@ DriverInit( struct DriverBase* ahisubbase ) SB128Base->cards_found = 0; SB128Base->driverdatas = 0; AHIsubBase = ahisubbase; - + + NewList(&foundCards); + DOSBase = OpenLibrary( DOSNAME, 37 ); if( DOSBase == NULL ) @@ -76,10 +76,10 @@ DriverInit( struct DriverBase* ahisubbase ) return FALSE; } - ExpansionBase = OpenLibrary( "expansion.library", 50 ); + ExpansionBase = OpenLibrary( "expansion.library", 1 ); if( ExpansionBase == NULL ) { - Req( "Unable to open 'expansion.library' version 50.\n" ); + Req( "Unable to open 'expansion.library' version 1.\n" ); return FALSE; } @@ -88,31 +88,6 @@ DriverInit( struct DriverBase* ahisubbase ) return FALSE; } - /* Timer Device */ - -/* replymp = (struct MsgPort *) CreatePort(NULL, 0); - if (!replymp) - { - DebugPrintF("SB128: Couldn't create ReplyPort!\n"); - return FALSE; - }*/ - - /*TimerIO = (struct timerequest *)CreateIORequest(replymp, sizeof(struct timerequest)); - - if (TimerIO == NULL) - { - DebugPrintF("Out of memory.\n"); - return FALSE; - } - - if (OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest *)TimerIO, 0) != 0) - { - DebugPrintF("Unable to open 'timer.device'.\n"); - return FALSE; - } - else - TimerBase = (struct Device *)TimerIO->tr_node.io_Device;*/ - InitSemaphore( &SB128Base->semaphore ); /*** Count cards ***********************************************************/ @@ -123,16 +98,16 @@ DriverInit( struct DriverBase* ahisubbase ) vendor_device_list[0].device = 0x5000; vendor_device_list_size++; - vendor_device_list[0].vendor = 0x1274; - vendor_device_list[0].device = 0x1371; + vendor_device_list[1].vendor = 0x1274; + vendor_device_list[1].device = 0x1371; vendor_device_list_size++; - vendor_device_list[0].vendor = 0x1274; - vendor_device_list[0].device = 0x5880; + vendor_device_list[2].vendor = 0x1274; + vendor_device_list[2].device = 0x5880; vendor_device_list_size++; - vendor_device_list[0].vendor = 0x1102; - vendor_device_list[0].device = 0x8938; + vendor_device_list[3].vendor = 0x1102; + vendor_device_list[3].device = 0x8938; vendor_device_list_size++; bug("vendor_device_list_size = %ld\n", vendor_device_list_size); @@ -161,7 +136,9 @@ DriverInit( struct DriverBase* ahisubbase ) if(SB128Base->cards_found == 0 ) { DebugPrintF("No SB128 found! :-(\n"); +#if defined(VERBOSE_REQ) Req( "No card present.\n" ); +#endif return FALSE; } diff --git a/workbench/devs/AHI/Drivers/SB128/pci_aros.c b/workbench/devs/AHI/Drivers/SB128/pci_aros.c index 54ef641637..be53e11b1f 100644 --- a/workbench/devs/AHI/Drivers/SB128/pci_aros.c +++ b/workbench/devs/AHI/Drivers/SB128/pci_aros.c @@ -140,35 +140,32 @@ APTR ahi_pci_find_device(ULONG vendorid, ULONG deviceid, APTR dev) ULONG pci_inl(ULONG addr, struct SB128_DATA *card) { - return (*((volatile ULONG *)(card->iobase + addr))); + return (*((ULONG *)(card->iobase + addr))); } UWORD pci_inw(ULONG addr, struct SB128_DATA *card) { - return (*((volatile UWORD *)(card->iobase + addr))); + return (*((UWORD *)(card->iobase + addr))); } UBYTE pci_inb(ULONG addr, struct SB128_DATA *card) { - return (*((volatile UBYTE *)(card->iobase + addr))); + return (*((UBYTE *)(card->iobase + addr))); } void pci_outl(ULONG value, ULONG addr, struct SB128_DATA *card) { - *((volatile ULONG *)(card->iobase + addr)) = (value); - pci_inl(addr, card); + *((ULONG *)(card->iobase + addr)) = (value); } void pci_outw(UWORD value, ULONG addr, struct SB128_DATA *card) { - *((volatile UWORD *)(card->iobase + addr)) = (value); - pci_inw(addr, card); + *((UWORD *)(card->iobase + addr)) = (value); } void pci_outb(UBYTE value, ULONG addr, struct SB128_DATA *card) { - *((volatile UBYTE *)(card->iobase + addr)) = (value); - pci_inb(addr, card); + *((UBYTE *)(card->iobase + addr)) = (value); } void outb_setbits(UBYTE value, ULONG addr, struct SB128_DATA *card) -- 2.11.4.GIT